This is the mail archive of the binutils-cvs@sourceware.org mailing list for the binutils 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] ELF: Pass bfd_link_info to merge_gnu_properties


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

commit 5c3ce2bc8adea307917d3bfeef53114795764db6
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Mon Jun 12 07:37:15 2017 -0700

    ELF: Pass bfd_link_info to merge_gnu_properties
    
    Pass struct bfd_link_info * to merge_gnu_properties to give backend
    control of how GNU properties are merged based on linker command line
    options.
    
    	* elf-bfd.h (elf_backend_data): Add struct bfd_link_info *
    	to merge_gnu_properties.
    	* elf-properties.c (elf_merge_gnu_properties): Add struct
    	bfd_link_info * and pass it to merge_gnu_properties.
    	(elf_merge_gnu_property_list): Add struct bfd_link_info *
    	and pass it to elf_merge_gnu_properties.
    	(_bfd_elf_link_setup_gnu_properties): Pass info to
    	elf_merge_gnu_property_list.
    	* elf32-i386.c (elf_i386_merge_gnu_properties): Add struct
    	bfd_link_info *.
    	* elf64-x86-64.c (elf_x86_64_merge_gnu_properties): Likewise.

Diff:
---
 bfd/ChangeLog        | 14 ++++++++++++++
 bfd/elf-bfd.h        |  4 ++--
 bfd/elf-properties.c | 15 ++++++++-------
 bfd/elf32-i386.c     |  3 ++-
 bfd/elf64-x86-64.c   |  3 ++-
 5 files changed, 28 insertions(+), 11 deletions(-)

diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index a0c2681..daea173 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,17 @@
+2017-06-12  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* elf-bfd.h (elf_backend_data): Add struct bfd_link_info *
+	to merge_gnu_properties.
+	* elf-properties.c (elf_merge_gnu_properties): Add struct
+	bfd_link_info * and pass it to merge_gnu_properties.
+	(elf_merge_gnu_property_list): Add struct bfd_link_info *
+	and pass it to elf_merge_gnu_properties.
+	(_bfd_elf_link_setup_gnu_properties): Pass info to
+	elf_merge_gnu_property_list.
+	* elf32-i386.c (elf_i386_merge_gnu_properties): Add struct
+	bfd_link_info *.
+	* elf64-x86-64.c (elf_x86_64_merge_gnu_properties): Likewise.
+
 2017-06-11  Joe Zbiciak  <joe.zbiciak@leftturnonly.info>
 
 	PR 21564
diff --git a/bfd/elf-bfd.h b/bfd/elf-bfd.h
index 820bc98..567b63a 100644
--- a/bfd/elf-bfd.h
+++ b/bfd/elf-bfd.h
@@ -1437,8 +1437,8 @@ struct elf_backend_data
 						  unsigned int);
 
   /* Merge GNU properties.  Return TRUE if property is updated.  */
-  bfd_boolean (*merge_gnu_properties) (bfd *, elf_property *,
-				       elf_property *);
+  bfd_boolean (*merge_gnu_properties) (struct bfd_link_info *, bfd *,
+				       elf_property *, elf_property *);
 
   /* Set up GNU properties.  */
   bfd *(*setup_gnu_properties) (struct bfd_link_info *);
diff --git a/bfd/elf-properties.c b/bfd/elf-properties.c
index fda8875..2d054dd 100644
--- a/bfd/elf-properties.c
+++ b/bfd/elf-properties.c
@@ -197,8 +197,8 @@ next:
    with ABFD.  */
 
 static bfd_boolean
-elf_merge_gnu_properties (bfd *abfd, elf_property *aprop,
-			  elf_property *bprop)
+elf_merge_gnu_properties (struct bfd_link_info *info, bfd *abfd,
+			  elf_property *aprop, elf_property *bprop)
 {
   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
   unsigned int pr_type = aprop != NULL ? aprop->pr_type : bprop->pr_type;
@@ -206,7 +206,7 @@ elf_merge_gnu_properties (bfd *abfd, elf_property *aprop,
   if (bed->merge_gnu_properties != NULL
       && pr_type >= GNU_PROPERTY_LOPROC
       && pr_type < GNU_PROPERTY_LOUSER)
-    return bed->merge_gnu_properties (abfd, aprop, bprop);
+    return bed->merge_gnu_properties (info, abfd, aprop, bprop);
 
   switch (pr_type)
     {
@@ -263,7 +263,8 @@ elf_find_and_remove_property (elf_property_list **listp,
 /* Merge GNU property list *LISTP with ABFD.  */
 
 static void
-elf_merge_gnu_property_list (bfd *abfd, elf_property_list **listp)
+elf_merge_gnu_property_list (struct bfd_link_info *info, bfd *abfd,
+			     elf_property_list **listp)
 {
   elf_property_list *p, **lastp;
   elf_property *pr;
@@ -275,7 +276,7 @@ elf_merge_gnu_property_list (bfd *abfd, elf_property_list **listp)
       pr = elf_find_and_remove_property (listp, p->property.pr_type);
       /* Pass NULL to elf_merge_gnu_properties for the property which
 	 isn't on *LISTP.  */
-      elf_merge_gnu_properties (abfd, &p->property, pr);
+      elf_merge_gnu_properties (info, abfd, &p->property, pr);
       if (p->property.pr_kind == property_remove)
 	{
 	  /* Remove this property.  */
@@ -287,7 +288,7 @@ elf_merge_gnu_property_list (bfd *abfd, elf_property_list **listp)
 
   /* Merge the remaining properties on *LISTP with ABFD.  */
   for (p = *listp; p != NULL; p = p->next)
-    if (elf_merge_gnu_properties (abfd, NULL, &p->property))
+    if (elf_merge_gnu_properties (info, abfd, NULL, &p->property))
       {
 	pr = _bfd_elf_get_property (abfd, p->property.pr_type,
 				    p->property.pr_datasz);
@@ -365,7 +366,7 @@ _bfd_elf_link_setup_gnu_properties (struct bfd_link_info *info)
 	   when all properties are from ELF objects with different
 	   machine code or class.  */
 	if (first_pbfd != NULL)
-	  elf_merge_gnu_property_list (first_pbfd, listp);
+	  elf_merge_gnu_property_list (info, first_pbfd, listp);
 
 	if (list != NULL)
 	  {
diff --git a/bfd/elf32-i386.c b/bfd/elf32-i386.c
index e447e3d..f9142a9 100644
--- a/bfd/elf32-i386.c
+++ b/bfd/elf32-i386.c
@@ -6388,7 +6388,8 @@ elf_i386_parse_gnu_properties (bfd *abfd, unsigned int type,
    should be merged with ABFD.  */
 
 static bfd_boolean
-elf_i386_merge_gnu_properties (bfd *abfd ATTRIBUTE_UNUSED,
+elf_i386_merge_gnu_properties (struct bfd_link_info *info ATTRIBUTE_UNUSED,
+			       bfd *abfd ATTRIBUTE_UNUSED,
 			       elf_property *aprop,
 			       elf_property *bprop)
 {
diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c
index c94d7ff..5306019 100644
--- a/bfd/elf64-x86-64.c
+++ b/bfd/elf64-x86-64.c
@@ -7035,7 +7035,8 @@ elf_x86_64_parse_gnu_properties (bfd *abfd, unsigned int type,
    should be merged with ABFD.  */
 
 static bfd_boolean
-elf_x86_64_merge_gnu_properties (bfd *abfd ATTRIBUTE_UNUSED,
+elf_x86_64_merge_gnu_properties (struct bfd_link_info *info ATTRIBUTE_UNUSED,
+				 bfd *abfd ATTRIBUTE_UNUSED,
 				 elf_property *aprop,
 				 elf_property *bprop)
 {


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