libiberty: Sync with GCC
Also sync include/simple-object.h, which goes together with the change in libiberty.
This commit is contained in:
parent
37f980dc03
commit
978588dc58
|
@ -198,12 +198,15 @@ extern void
|
||||||
simple_object_release_write (simple_object_write *);
|
simple_object_release_write (simple_object_write *);
|
||||||
|
|
||||||
/* Copy LTO debug sections from SRC_OBJECT to DEST.
|
/* Copy LTO debug sections from SRC_OBJECT to DEST.
|
||||||
|
If RENAME is true, rename LTO debug section into debug section (i.e.
|
||||||
|
when producing final binary) and if it is false, keep the sections with
|
||||||
|
original names (when incrementally linking).
|
||||||
If an error occurs, return the errno value in ERR and an error string. */
|
If an error occurs, return the errno value in ERR and an error string. */
|
||||||
|
|
||||||
extern const char *
|
extern const char *
|
||||||
simple_object_copy_lto_debug_sections (simple_object_read *src_object,
|
simple_object_copy_lto_debug_sections (simple_object_read *src_object,
|
||||||
const char *dest,
|
const char *dest,
|
||||||
int *err);
|
int *err, int rename);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,3 +1,10 @@
|
||||||
|
2018-05-30 Jan Hubicka <hubicka@ucw.cz>
|
||||||
|
|
||||||
|
* simple-object.c (handle_lto_debug_sections): Add rename parameter.
|
||||||
|
(handle_lto_debug_sections_rename): New function.
|
||||||
|
(handle_lto_debug_sections_norename): New function.
|
||||||
|
(simple_object_copy_lto_debug_sections): Add rename parameter.
|
||||||
|
|
||||||
2018-05-28 Bernd Edlinger <bernd.edlinger@hotmail.de>
|
2018-05-28 Bernd Edlinger <bernd.edlinger@hotmail.de>
|
||||||
|
|
||||||
* splay-tree.c (splay_tree_compare_strings,
|
* splay-tree.c (splay_tree_compare_strings,
|
||||||
|
|
|
@ -251,12 +251,15 @@ simple_object_find_section (simple_object_read *sobj, const char *name,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Callback to identify and rename LTO debug sections by name.
|
/* Callback to identify and rename LTO debug sections by name.
|
||||||
Returns 1 if NAME is a LTO debug section, 0 if not. */
|
Returns non-NULL if NAME is a LTO debug section, NULL if not.
|
||||||
|
If RENAME is true it will rename LTO debug sections to non-LTO
|
||||||
|
ones. */
|
||||||
|
|
||||||
static char *
|
static char *
|
||||||
handle_lto_debug_sections (const char *name)
|
handle_lto_debug_sections (const char *name, int rename)
|
||||||
{
|
{
|
||||||
char *newname = XCNEWVEC (char, strlen (name) + 1);
|
char *newname = rename ? XCNEWVEC (char, strlen (name) + 1)
|
||||||
|
: xstrdup (name);
|
||||||
|
|
||||||
/* ??? So we can't use .gnu.lto_ prefixed sections as the assembler
|
/* ??? So we can't use .gnu.lto_ prefixed sections as the assembler
|
||||||
complains about bogus section flags. Which means we need to arrange
|
complains about bogus section flags. Which means we need to arrange
|
||||||
|
@ -265,22 +268,24 @@ handle_lto_debug_sections (const char *name)
|
||||||
/* Also include corresponding reloc sections. */
|
/* Also include corresponding reloc sections. */
|
||||||
if (strncmp (name, ".rela", sizeof (".rela") - 1) == 0)
|
if (strncmp (name, ".rela", sizeof (".rela") - 1) == 0)
|
||||||
{
|
{
|
||||||
strncpy (newname, name, sizeof (".rela") - 1);
|
if (rename)
|
||||||
|
strncpy (newname, name, sizeof (".rela") - 1);
|
||||||
name += sizeof (".rela") - 1;
|
name += sizeof (".rela") - 1;
|
||||||
}
|
}
|
||||||
else if (strncmp (name, ".rel", sizeof (".rel") - 1) == 0)
|
else if (strncmp (name, ".rel", sizeof (".rel") - 1) == 0)
|
||||||
{
|
{
|
||||||
strncpy (newname, name, sizeof (".rel") - 1);
|
if (rename)
|
||||||
|
strncpy (newname, name, sizeof (".rel") - 1);
|
||||||
name += sizeof (".rel") - 1;
|
name += sizeof (".rel") - 1;
|
||||||
}
|
}
|
||||||
/* ??? For now this handles both .gnu.lto_ and .gnu.debuglto_ prefixed
|
/* ??? For now this handles both .gnu.lto_ and .gnu.debuglto_ prefixed
|
||||||
sections. */
|
sections. */
|
||||||
/* Copy LTO debug sections and rename them to their non-LTO name. */
|
/* Copy LTO debug sections and rename them to their non-LTO name. */
|
||||||
if (strncmp (name, ".gnu.debuglto_", sizeof (".gnu.debuglto_") - 1) == 0)
|
if (strncmp (name, ".gnu.debuglto_", sizeof (".gnu.debuglto_") - 1) == 0)
|
||||||
return strcat (newname, name + sizeof (".gnu.debuglto_") - 1);
|
return rename ? strcat (newname, name + sizeof (".gnu.debuglto_") - 1) : newname;
|
||||||
else if (strncmp (name, ".gnu.lto_.debug_",
|
else if (strncmp (name, ".gnu.lto_.debug_",
|
||||||
sizeof (".gnu.lto_.debug_") -1) == 0)
|
sizeof (".gnu.lto_.debug_") -1) == 0)
|
||||||
return strcat (newname, name + sizeof (".gnu.lto_") - 1);
|
return rename ? strcat (newname, name + sizeof (".gnu.lto_") - 1) : newname;
|
||||||
/* Copy over .note.GNU-stack section under the same name if present. */
|
/* Copy over .note.GNU-stack section under the same name if present. */
|
||||||
else if (strcmp (name, ".note.GNU-stack") == 0)
|
else if (strcmp (name, ".note.GNU-stack") == 0)
|
||||||
return strcpy (newname, name);
|
return strcpy (newname, name);
|
||||||
|
@ -289,14 +294,31 @@ handle_lto_debug_sections (const char *name)
|
||||||
COMDAT sections in objects produced by GCC. */
|
COMDAT sections in objects produced by GCC. */
|
||||||
else if (strcmp (name, ".comment") == 0)
|
else if (strcmp (name, ".comment") == 0)
|
||||||
return strcpy (newname, name);
|
return strcpy (newname, name);
|
||||||
|
free (newname);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Wrapper for handle_lto_debug_sections. */
|
||||||
|
|
||||||
|
static char *
|
||||||
|
handle_lto_debug_sections_rename (const char *name)
|
||||||
|
{
|
||||||
|
return handle_lto_debug_sections (name, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Wrapper for handle_lto_debug_sections. */
|
||||||
|
|
||||||
|
static char *
|
||||||
|
handle_lto_debug_sections_norename (const char *name)
|
||||||
|
{
|
||||||
|
return handle_lto_debug_sections (name, 0);
|
||||||
|
}
|
||||||
|
|
||||||
/* Copy LTO debug sections. */
|
/* Copy LTO debug sections. */
|
||||||
|
|
||||||
const char *
|
const char *
|
||||||
simple_object_copy_lto_debug_sections (simple_object_read *sobj,
|
simple_object_copy_lto_debug_sections (simple_object_read *sobj,
|
||||||
const char *dest, int *err)
|
const char *dest, int *err, int rename)
|
||||||
{
|
{
|
||||||
const char *errmsg;
|
const char *errmsg;
|
||||||
simple_object_write *dest_sobj;
|
simple_object_write *dest_sobj;
|
||||||
|
@ -317,9 +339,10 @@ simple_object_copy_lto_debug_sections (simple_object_read *sobj,
|
||||||
if (! dest_sobj)
|
if (! dest_sobj)
|
||||||
return errmsg;
|
return errmsg;
|
||||||
|
|
||||||
errmsg = sobj->functions->copy_lto_debug_sections (sobj, dest_sobj,
|
errmsg = sobj->functions->copy_lto_debug_sections
|
||||||
handle_lto_debug_sections,
|
(sobj, dest_sobj,
|
||||||
err);
|
rename ? handle_lto_debug_sections_rename
|
||||||
|
: handle_lto_debug_sections_norename, err);
|
||||||
if (errmsg)
|
if (errmsg)
|
||||||
{
|
{
|
||||||
simple_object_release_write (dest_sobj);
|
simple_object_release_write (dest_sobj);
|
||||||
|
|
Loading…
Reference in New Issue