From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 75616 invoked by alias); 14 Apr 2017 21:47:52 -0000 Mailing-List: contact binutils-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: binutils-owner@sourceware.org Received: (qmail 75574 invoked by uid 89); 14 Apr 2017 21:47:51 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.9 required=5.0 tests=BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,KAM_LAZY_DOMAIN_SECURITY,NO_DNS_FOR_FROM,RP_MATCHES_RCVD autolearn=ham version=3.3.2 spammy=UD:info X-HELO: mga07.intel.com Received: from mga07.intel.com (HELO mga07.intel.com) (134.134.136.100) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 14 Apr 2017 21:47:49 +0000 Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga105.jf.intel.com with ESMTP; 14 Apr 2017 14:47:41 -0700 X-ExtLoop1: 1 Received: from gnu-6.sc.intel.com ([172.25.70.218]) by orsmga004.jf.intel.com with ESMTP; 14 Apr 2017 14:47:40 -0700 Received: by gnu-6.sc.intel.com (Postfix, from userid 1000) id 6EC5E2004BF; Fri, 14 Apr 2017 14:47:40 -0700 (PDT) Date: Fri, 14 Apr 2017 21:47:00 -0000 From: "H.J. Lu" To: binutils@sourceware.org Subject: Re: [PATCH] PR ld/21389: Put soname in the version definition section Message-ID: <20170414214740.GA18613@intel.com> Reply-To: "H.J. Lu" References: <20170414201951.GA15854@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20170414201951.GA15854@intel.com> User-Agent: Mutt/1.8.0 (2017-02-23) X-SW-Source: 2017-04/txt/msg00146.txt.bz2 On Fri, Apr 14, 2017 at 01:19:51PM -0700, H.J. Lu wrote: > Get soname index before generating the version definition section. > > OK for master and 2.28 branch? > > H.J. > --- > bfd/ > > PR ld/21389 > * elflink.c (bfd_elf_size_dynamic_sections): Get soname index > before generating the version definition section. > Updated patch to fix missing SONAME. H.J. -- Get soname index before generating the version definition section. bfd/ PR ld/21389 * elflink.c (bfd_elf_size_dynamic_sections): Get soname index before generating the version definition section. ld/ PR ld/21389 * testsuite/ld-elf/pr21389.map: New file. * testsuite/ld-elf/pr21389.s: Likewise. * testsuite/ld-elf/pr21389a.d: Likewise. * testsuite/ld-elf/pr21389b.d: Likewise. * testsuite/ld-elf/pr21389c.d: Likewise. --- bfd/elflink.c | 24 ++++++++++++------------ ld/testsuite/ld-elf/pr21389.map | 6 ++++++ ld/testsuite/ld-elf/pr21389.s | 5 +++++ ld/testsuite/ld-elf/pr21389a.d | 10 ++++++++++ ld/testsuite/ld-elf/pr21389b.d | 8 ++++++++ ld/testsuite/ld-elf/pr21389c.d | 8 ++++++++ 6 files changed, 49 insertions(+), 12 deletions(-) create mode 100644 ld/testsuite/ld-elf/pr21389.map create mode 100644 ld/testsuite/ld-elf/pr21389.s create mode 100644 ld/testsuite/ld-elf/pr21389a.d create mode 100644 ld/testsuite/ld-elf/pr21389b.d create mode 100644 ld/testsuite/ld-elf/pr21389c.d diff --git a/bfd/elflink.c b/bfd/elflink.c index dfcc51e..ad2e4e6 100644 --- a/bfd/elflink.c +++ b/bfd/elflink.c @@ -5921,14 +5921,11 @@ bfd_elf_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info, asection **sinterpptr) { - size_t soname_indx; bfd *dynobj; const struct elf_backend_data *bed; *sinterpptr = NULL; - soname_indx = (size_t) -1; - if (!is_elf_hash_table (info->hash)) return TRUE; @@ -5943,6 +5940,7 @@ bfd_elf_size_dynamic_sections (bfd *output_bfd, struct elf_info_failed eif; bfd_boolean all_defined; asection *s; + size_t soname_indx; eif.info = info; eif.failed = FALSE; @@ -5959,6 +5957,17 @@ bfd_elf_size_dynamic_sections (bfd *output_bfd, return FALSE; } + if (soname != NULL) + { + soname_indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr, + soname, TRUE); + if (soname_indx == (size_t) -1 + || !_bfd_elf_add_dynamic_entry (info, DT_SONAME, soname_indx)) + return FALSE; + } + else + soname_indx = (size_t) -1; + /* Make all global versions with definition. */ for (t = info->version_info; t != NULL; t = t->next) for (d = t->globals.list; d != NULL; d = d->next) @@ -6467,15 +6476,6 @@ bfd_elf_size_dynamic_sections (bfd *output_bfd, *sinterpptr = bfd_get_linker_section (dynobj, ".interp"); BFD_ASSERT (*sinterpptr != NULL || !bfd_link_executable (info) || info->nointerp); - if (soname != NULL) - { - soname_indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr, - soname, TRUE); - if (soname_indx == (size_t) -1 - || !_bfd_elf_add_dynamic_entry (info, DT_SONAME, soname_indx)) - return FALSE; - } - if (info->symbolic) { if (!_bfd_elf_add_dynamic_entry (info, DT_SYMBOLIC, 0)) diff --git a/ld/testsuite/ld-elf/pr21389.map b/ld/testsuite/ld-elf/pr21389.map new file mode 100644 index 0000000..88c8c28 --- /dev/null +++ b/ld/testsuite/ld-elf/pr21389.map @@ -0,0 +1,6 @@ +FOO { +global: + foo; +local: + *; +}; diff --git a/ld/testsuite/ld-elf/pr21389.s b/ld/testsuite/ld-elf/pr21389.s new file mode 100644 index 0000000..a943cc6 --- /dev/null +++ b/ld/testsuite/ld-elf/pr21389.s @@ -0,0 +1,5 @@ + .globl foo + .type foo,%object + .data +foo: + .long 0 diff --git a/ld/testsuite/ld-elf/pr21389a.d b/ld/testsuite/ld-elf/pr21389a.d new file mode 100644 index 0000000..2dcd175 --- /dev/null +++ b/ld/testsuite/ld-elf/pr21389a.d @@ -0,0 +1,10 @@ +#source: pr21389.s +#ld: -shared --version-script pr21389.map -soname=pr21389.so +#objdump: -p +#target: *-*-linux* *-*-gnu* + +#... +Version definitions: +1 0x01 0x[0-9a-f]* pr21389.so +2 0x00 0x[0-9a-f]* FOO +#pass diff --git a/ld/testsuite/ld-elf/pr21389b.d b/ld/testsuite/ld-elf/pr21389b.d new file mode 100644 index 0000000..8dbc34b --- /dev/null +++ b/ld/testsuite/ld-elf/pr21389b.d @@ -0,0 +1,8 @@ +#source: pr21389.s +#ld: -shared --version-script pr21389.map -soname=pr21389.so +#readelf: -d +#target: *-*-linux* *-*-gnu* + +#... + 0x[0-9a-f]* \(SONAME\) +Library soname: \[pr21389.so\] +#pass diff --git a/ld/testsuite/ld-elf/pr21389c.d b/ld/testsuite/ld-elf/pr21389c.d new file mode 100644 index 0000000..76ac37b --- /dev/null +++ b/ld/testsuite/ld-elf/pr21389c.d @@ -0,0 +1,8 @@ +#source: pr21389.s +#ld: -shared -soname=pr21389.so +#readelf: -d +#target: *-*-linux* *-*-gnu* + +#... + 0x[0-9a-f]* \(SONAME\) +Library soname: \[pr21389.so\] +#pass -- 2.9.3