[binutils-gdb] Check the DYNAMIC bit for input shared objects

H.J.Lu hjl@sourceware.org
Tue Jun 20 03:33:00 GMT 2017


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

commit abfa390dac6ffcfc6de9659c0b78cfe524347450
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Mon Jun 19 20:30:20 2017 -0700

    Check the DYNAMIC bit for input shared objects
    
    Since the BFD section count may not be cleared for shared objects during
    linking, we should check the DYNAMIC bit for input shared objects.
    
    bfd/
    
    	PR ld/21626
    	* elf-properties.c (_bfd_elf_link_setup_gnu_properties): Check
    	the DYNAMIC bit instead of bfd_count_sections.
    
    ld/
    
    	PR ld/21626
    	* testsuite/ld-i386/i386.exp: Run ld/21626 tests.
    	* testsuite/ld-x86-64/x86-64.exp: Likewise.

Diff:
---
 bfd/ChangeLog                     |  6 ++++++
 bfd/elf-properties.c              |  4 ++--
 ld/ChangeLog                      |  6 ++++++
 ld/testsuite/ld-i386/i386.exp     | 18 ++++++++++++++++++
 ld/testsuite/ld-x86-64/x86-64.exp | 18 ++++++++++++++++++
 5 files changed, 50 insertions(+), 2 deletions(-)

diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 5177bc7..770fdf1 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,9 @@
+2017-06-19  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR ld/21626
+	* elf-properties.c (_bfd_elf_link_setup_gnu_properties): Check
+	the DYNAMIC bit instead of bfd_count_sections.
+
 2017-06-19  Nick Clifton  <nickc@redhat.com>
 
 	PR binutils/21618
diff --git a/bfd/elf-properties.c b/bfd/elf-properties.c
index 2d054dd..13d620d 100644
--- a/bfd/elf-properties.c
+++ b/bfd/elf-properties.c
@@ -318,7 +318,7 @@ _bfd_elf_link_setup_gnu_properties (struct bfd_link_info *info)
   /* Find the first relocatable ELF input with GNU properties.  */
   for (abfd = info->input_bfds; abfd != NULL; abfd = abfd->link.next)
     if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
-	&& bfd_count_sections (abfd) != 0
+	&& (abfd->flags & DYNAMIC) == 0
 	&& elf_properties (abfd) != NULL)
       {
 	has_properties = TRUE;
@@ -342,7 +342,7 @@ _bfd_elf_link_setup_gnu_properties (struct bfd_link_info *info)
 
   /* Merge .note.gnu.property sections.  */
   for (abfd = info->input_bfds; abfd != NULL; abfd = abfd->link.next)
-    if (abfd != first_pbfd && bfd_count_sections (abfd) != 0)
+    if (abfd != first_pbfd && (abfd->flags & DYNAMIC) == 0)
       {
 	elf_property_list *null_ptr = NULL;
 	elf_property_list **listp = &null_ptr;
diff --git a/ld/ChangeLog b/ld/ChangeLog
index b16551f..417c464 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,9 @@
+2017-06-19  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR ld/21626
+	* testsuite/ld-i386/i386.exp: Run ld/21626 tests.
+	* testsuite/ld-x86-64/x86-64.exp: Likewise.
+
 2017-06-18  Alan Modra  <amodra@gmail.com>
 
 	* testsuite/lib/ld-lib.exp (is_underscore_target): New.
diff --git a/ld/testsuite/ld-i386/i386.exp b/ld/testsuite/ld-i386/i386.exp
index a92bd91..2e3c224 100644
--- a/ld/testsuite/ld-i386/i386.exp
+++ b/ld/testsuite/ld-i386/i386.exp
@@ -1182,6 +1182,24 @@ run_ld_link_tests [list \
 	{{objdump -dwr plt-pic2.dd}} \
 	"plt-pic2.so" \
     ] \
+    [list \
+	"Build pr21626.so" \
+	"-shared -melf_i386" \
+	"" \
+	"--32" \
+	{property-x86-3.s} \
+	"" \
+	"pr21626.so" \
+    ] \
+    [list \
+	"Build pr21626" \
+	"-melf_i386 tmpdir/pr21626.so" \
+	"" \
+	"--32" \
+	{start.s foo.s} \
+	"" \
+	"pr21626" \
+    ] \
 ]
 
 # Linux only tests
diff --git a/ld/testsuite/ld-x86-64/x86-64.exp b/ld/testsuite/ld-x86-64/x86-64.exp
index 079c161..48d8ad2 100644
--- a/ld/testsuite/ld-x86-64/x86-64.exp
+++ b/ld/testsuite/ld-x86-64/x86-64.exp
@@ -1368,6 +1368,24 @@ run_ld_link_tests [list \
 	{{readelf -SW plt2.rd} {objdump -dwr plt2.dd}} \
 	"plt2" \
     ] \
+    [list \
+	"Build pr21626.so" \
+	"-shared -melf_x86_64" \
+	"" \
+	"--64 -defsym __64_bit__=1" \
+	{property-x86-3.s} \
+	"" \
+	"pr21626.so" \
+    ] \
+    [list \
+	"Build pr21626" \
+	"-melf_x86_64 tmpdir/pr21626.so" \
+	"" \
+	"--64" \
+	{start.s foo.s} \
+	"" \
+	"pr21626" \
+    ] \
 ]
 
 # Linux only tests



More information about the Binutils-cvs mailing list