From abfa390dac6ffcfc6de9659c0b78cfe524347450 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Mon, 19 Jun 2017 20:30:20 -0700 Subject: [PATCH] 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. --- 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 5177bc749dc..770fdf16a28 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,9 @@ +2017-06-19 H.J. Lu + + 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 PR binutils/21618 diff --git a/bfd/elf-properties.c b/bfd/elf-properties.c index 2d054dd8b45..13d620d9c47 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 b16551f98e8..417c464b4ef 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,9 @@ +2017-06-19 H.J. Lu + + 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 * 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 a92bd91072a..2e3c2249f51 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 079c161a6f4..48d8ad2c675 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 -- 2.47.3