This is the mail archive of the gdb-cvs@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] libiberty: Sync with GCC


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=978588dc5854b02dc24e0eed18741415176753d8

commit 978588dc5854b02dc24e0eed18741415176753d8
Author: Simon Marchi <simon.marchi@ericsson.com>
Date:   Fri Jun 15 23:07:42 2018 -0400

    libiberty: Sync with GCC
    
    Also sync include/simple-object.h, which goes together with the change
    in libiberty.

Diff:
---
 include/simple-object.h   |  5 ++++-
 libiberty/ChangeLog       |  7 +++++++
 libiberty/simple-object.c | 45 ++++++++++++++++++++++++++++++++++-----------
 3 files changed, 45 insertions(+), 12 deletions(-)

diff --git a/include/simple-object.h b/include/simple-object.h
index db72f86..496d8cc 100644
--- a/include/simple-object.h
+++ b/include/simple-object.h
@@ -198,12 +198,15 @@ extern void
 simple_object_release_write (simple_object_write *);
 
 /* 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.  */
 
 extern const char *
 simple_object_copy_lto_debug_sections (simple_object_read *src_object,
 				       const char *dest,
-				       int *err);
+				       int *err, int rename);
 
 #ifdef __cplusplus
 }
diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog
index 19c6269..578da58 100644
--- a/libiberty/ChangeLog
+++ b/libiberty/ChangeLog
@@ -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>
 
 	* splay-tree.c (splay_tree_compare_strings,
diff --git a/libiberty/simple-object.c b/libiberty/simple-object.c
index 42aa6ac..82a8cff 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);


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]