From 7ce4ce10cd0a6f332dd473bd4726f1a1adefda0e Mon Sep 17 00:00:00 2001 From: Jan Hubicka Date: Wed, 30 May 2018 17:26:26 +0200 Subject: [PATCH] simple-object.h (simple_object_copy_lto_debug_sections): Add rename parameter. * simple-object.h (simple_object_copy_lto_debug_sections): Add rename parameter. * 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. From-SVN: r260956 --- libiberty/ChangeLog | 9 ++++++++ libiberty/simple-object.c | 45 +++++++++++++++++++++++++++++---------- 2 files changed, 43 insertions(+), 11 deletions(-) diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog index 19c62699c07..be3c6eea6dc 100644 --- a/libiberty/ChangeLog +++ b/libiberty/ChangeLog @@ -1,3 +1,12 @@ +2018-05-30 Jan Hubicka + + * simple-object.h (simple_object_copy_lto_debug_sections): Add rename + parameter. + * 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 * splay-tree.c (splay_tree_compare_strings, diff --git a/libiberty/simple-object.c b/libiberty/simple-object.c index 42aa6ac4e60..82a8cff9644 100644 --- a/libiberty/simple-object.c +++ b/libiberty/simple-object.c @@ -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. - 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 * -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 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. */ 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; } 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; } /* ??? 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); + return rename ? strcat (newname, name + sizeof (".gnu.debuglto_") - 1) : newname; else if (strncmp (name, ".gnu.lto_.debug_", 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. */ else if (strcmp (name, ".note.GNU-stack") == 0) return strcpy (newname, name); @@ -289,14 +294,31 @@ handle_lto_debug_sections (const char *name) COMDAT sections in objects produced by GCC. */ else if (strcmp (name, ".comment") == 0) return strcpy (newname, name); + free (newname); 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. */ const char * 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; simple_object_write *dest_sobj; @@ -317,9 +339,10 @@ simple_object_copy_lto_debug_sections (simple_object_read *sobj, if (! dest_sobj) return errmsg; - errmsg = sobj->functions->copy_lto_debug_sections (sobj, dest_sobj, - handle_lto_debug_sections, - err); + errmsg = sobj->functions->copy_lto_debug_sections + (sobj, dest_sobj, + rename ? handle_lto_debug_sections_rename + : handle_lto_debug_sections_norename, err); if (errmsg) { simple_object_release_write (dest_sobj); -- 2.30.2