aboutsummaryrefslogtreecommitdiff
path: root/libiberty/simple-object.c
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2018-01-11 12:12:39 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2018-01-11 12:12:39 +0000
commitbf6f2cc7be78a36b1648cdc9619b8fe98475825d (patch)
treed2f8fb5d40dada424665515fdd18680f7e9087d6 /libiberty/simple-object.c
parentec538483a14f61226e3f89b46f098cfb98be8f12 (diff)
downloadgcc-bf6f2cc7be78a36b1648cdc9619b8fe98475825d.zip
gcc-bf6f2cc7be78a36b1648cdc9619b8fe98475825d.tar.gz
gcc-bf6f2cc7be78a36b1648cdc9619b8fe98475825d.tar.bz2
re PR lto/81968 (early lto debug objects make Solaris ld SEGV)
2018-01-11 Richard Biener <rguenther@suse.de> Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> PR lto/81968 libiberty/ * simple-object-common.h (struct simple_object_functions): Change copy_lto_debug_sections callback signature. * simple-object-elf.c (SHN_HIRESERVE, SHT_SYMTAB_SHNDX, SHF_INFO_LINK): Add defines. (simple_object_elf_copy_lto_debug_sections): Instead of leaving not to be copied sections empty unnamed SHT_NULL remove them from the target section headers and adjust section reference everywhere. Handle SHN_XINDEX in the symbol table processing properly. * simple-object.c (handle_lto_debug_sections): Change interface to return a modified string and handle renaming of relocation sections. Co-Authored-By: Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> From-SVN: r256528
Diffstat (limited to 'libiberty/simple-object.c')
-rw-r--r--libiberty/simple-object.c36
1 files changed, 22 insertions, 14 deletions
diff --git a/libiberty/simple-object.c b/libiberty/simple-object.c
index 5b95fb2d..56dc956 100644
--- a/libiberty/simple-object.c
+++ b/libiberty/simple-object.c
@@ -253,30 +253,38 @@ simple_object_find_section (simple_object_read *sobj, const char *name,
/* Callback to identify and rename LTO debug sections by name.
Returns 1 if NAME is a LTO debug section, 0 if not. */
-static int
-handle_lto_debug_sections (const char **name)
+static char *
+handle_lto_debug_sections (const char *name)
{
+ char *newname = XCNEWVEC (char, strlen (name) + 1);
+
/* ??? So we can't use .gnu.lto_ prefixed sections as the assembler
complains about bogus section flags. Which means we need to arrange
for that to be fixed or .gnu.debuglto_ marked as SHF_EXCLUDE (to make
fat lto object tooling work for the fat part). */
- /* ??? For now this handles both .gnu.lto_ and .gnu.debuglto_ prefixed
- sections. */
- /* Copy LTO debug sections and rename them to their non-LTO name. */
- if (strncmp (*name, ".gnu.debuglto_", sizeof (".gnu.debuglto_") - 1) == 0)
+ /* Also include corresponding reloc sections. */
+ if (strncmp (name, ".rela", sizeof (".rela") - 1) == 0)
{
- *name = *name + sizeof (".gnu.debuglto_") - 1;
- return 1;
+ strncpy (newname, name, sizeof (".rela") - 1);
+ name += sizeof (".rela") - 1;
}
- else if (strncmp (*name, ".gnu.lto_.debug_", sizeof (".gnu.lto_.debug_") -1) == 0)
+ else if (strncmp (name, ".rel", sizeof (".rel") - 1) == 0)
{
- *name = *name + sizeof (".gnu.lto_") - 1;
- return 1;
+ strncpy (newname, name, sizeof (".rel") - 1);
+ name += sizeof (".rel") - 1;
}
+ /* ??? For now this handles both .gnu.lto_ and .gnu.debuglto_ prefixed
+ sections. */
+ /* Copy LTO debug sections and rename them to their non-LTO name. */
+ if (strncmp (name, ".gnu.debuglto_", sizeof (".gnu.debuglto_") - 1) == 0)
+ return strcat (newname, name + sizeof (".gnu.debuglto_") - 1);
+ else if (strncmp (name, ".gnu.lto_.debug_",
+ sizeof (".gnu.lto_.debug_") -1) == 0)
+ return strcat (newname, name + sizeof (".gnu.lto_") - 1);
/* Copy over .note.GNU-stack section under the same name if present. */
- else if (strcmp (*name, ".note.GNU-stack") == 0)
- return 1;
- return 0;
+ else if (strcmp (name, ".note.GNU-stack") == 0)
+ return strcpy (newname, name);
+ return NULL;
}
/* Copy LTO debug sections. */