Put soname in the version definition section
commit 902e9fc76a
Author: Maciej W. Rozycki <macro@imgtec.com>
Date: Tue Feb 21 01:46:42 2017 +0000
PR ld/20828: Move symbol version processing ahead of GC symbol sweep
breaks version definition with --version-script --soname. This patch
fixes it by getting 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.
This commit is contained in:
parent
305d16a9be
commit
e6699019c4
8 changed files with 64 additions and 12 deletions
|
@ -1,3 +1,9 @@
|
||||||
|
2017-04-17 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
|
PR ld/21389
|
||||||
|
* elflink.c (bfd_elf_size_dynamic_sections): Get soname index
|
||||||
|
before generating the version definition section.
|
||||||
|
|
||||||
2017-04-17 Alan Modra <amodra@gmail.com>
|
2017-04-17 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
* elflink.c (_bfd_elf_merge_symbol): Undo dynamic linking
|
* elflink.c (_bfd_elf_merge_symbol): Undo dynamic linking
|
||||||
|
|
|
@ -5948,14 +5948,11 @@ bfd_elf_size_dynamic_sections (bfd *output_bfd,
|
||||||
struct bfd_link_info *info,
|
struct bfd_link_info *info,
|
||||||
asection **sinterpptr)
|
asection **sinterpptr)
|
||||||
{
|
{
|
||||||
size_t soname_indx;
|
|
||||||
bfd *dynobj;
|
bfd *dynobj;
|
||||||
const struct elf_backend_data *bed;
|
const struct elf_backend_data *bed;
|
||||||
|
|
||||||
*sinterpptr = NULL;
|
*sinterpptr = NULL;
|
||||||
|
|
||||||
soname_indx = (size_t) -1;
|
|
||||||
|
|
||||||
if (!is_elf_hash_table (info->hash))
|
if (!is_elf_hash_table (info->hash))
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
|
@ -5970,6 +5967,7 @@ bfd_elf_size_dynamic_sections (bfd *output_bfd,
|
||||||
struct elf_info_failed eif;
|
struct elf_info_failed eif;
|
||||||
bfd_boolean all_defined;
|
bfd_boolean all_defined;
|
||||||
asection *s;
|
asection *s;
|
||||||
|
size_t soname_indx;
|
||||||
|
|
||||||
eif.info = info;
|
eif.info = info;
|
||||||
eif.failed = FALSE;
|
eif.failed = FALSE;
|
||||||
|
@ -5986,6 +5984,17 @@ bfd_elf_size_dynamic_sections (bfd *output_bfd,
|
||||||
return FALSE;
|
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. */
|
/* Make all global versions with definition. */
|
||||||
for (t = info->version_info; t != NULL; t = t->next)
|
for (t = info->version_info; t != NULL; t = t->next)
|
||||||
for (d = t->globals.list; d != NULL; d = d->next)
|
for (d = t->globals.list; d != NULL; d = d->next)
|
||||||
|
@ -6494,15 +6503,6 @@ bfd_elf_size_dynamic_sections (bfd *output_bfd,
|
||||||
*sinterpptr = bfd_get_linker_section (dynobj, ".interp");
|
*sinterpptr = bfd_get_linker_section (dynobj, ".interp");
|
||||||
BFD_ASSERT (*sinterpptr != NULL || !bfd_link_executable (info) || info->nointerp);
|
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 (info->symbolic)
|
||||||
{
|
{
|
||||||
if (!_bfd_elf_add_dynamic_entry (info, DT_SYMBOLIC, 0))
|
if (!_bfd_elf_add_dynamic_entry (info, DT_SYMBOLIC, 0))
|
||||||
|
|
|
@ -1,3 +1,12 @@
|
||||||
|
2017-04-17 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
2017-04-17 Alan Modra <amodra@gmail.com>
|
2017-04-17 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
* testsuite/ld-elf/indirect5a.c,
|
* testsuite/ld-elf/indirect5a.c,
|
||||||
|
|
6
ld/testsuite/ld-elf/pr21389.map
Normal file
6
ld/testsuite/ld-elf/pr21389.map
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
FOO {
|
||||||
|
global:
|
||||||
|
foo;
|
||||||
|
local:
|
||||||
|
*;
|
||||||
|
};
|
5
ld/testsuite/ld-elf/pr21389.s
Normal file
5
ld/testsuite/ld-elf/pr21389.s
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
.globl foo
|
||||||
|
.type foo,%object
|
||||||
|
.data
|
||||||
|
foo:
|
||||||
|
.long 0
|
10
ld/testsuite/ld-elf/pr21389a.d
Normal file
10
ld/testsuite/ld-elf/pr21389a.d
Normal file
|
@ -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
|
8
ld/testsuite/ld-elf/pr21389b.d
Normal file
8
ld/testsuite/ld-elf/pr21389b.d
Normal file
|
@ -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
|
8
ld/testsuite/ld-elf/pr21389c.d
Normal file
8
ld/testsuite/ld-elf/pr21389c.d
Normal file
|
@ -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
|
Loading…
Add table
Add a link
Reference in a new issue