Don't change the default symbol for relocatable link

We should change the default symbol for the versioned symbol only when
not performing a relocatable link.

bfd/

	PR ld/18735
	* elflink.c (_bfd_elf_add_default_symbol): Add the default
	symbol if not performing a relocatable link.
	(elf_link_add_object_symbols): Adjust the default symbol if
	not performing a relocatable link.

ld/testsuite/

	PR ld/18735
	* ld-elf/pr18735.d: New file.
	* ld-elf/pr18735.s: Likewise.
This commit is contained in:
H.J. Lu
2015-07-30 03:27:44 -07:00
parent 13be649613
commit c6e8a9a802
5 changed files with 52 additions and 9 deletions

View File

@ -1,3 +1,11 @@
2015-07-30 H.J. Lu <hongjiu.lu@intel.com>
PR ld/18735
* elflink.c (_bfd_elf_add_default_symbol): Add the default
symbol if not performing a relocatable link.
(elf_link_add_object_symbols): Adjust the default symbol if
not performing a relocatable link.
2015-07-29 H.J. Lu <hongjiu.lu@intel.com>
* elflink.c (elf_link_add_object_symbols): Remove

View File

@ -1655,12 +1655,17 @@ _bfd_elf_add_default_symbol (bfd *abfd,
if (! override)
{
bh = &hi->root;
if (! (_bfd_generic_link_add_one_symbol
(info, abfd, shortname, BSF_INDIRECT, bfd_ind_section_ptr,
0, name, FALSE, collect, &bh)))
return FALSE;
hi = (struct elf_link_hash_entry *) bh;
/* Add the default symbol if not performing a relocatable link. */
if (! info->relocatable)
{
bh = &hi->root;
if (! (_bfd_generic_link_add_one_symbol
(info, abfd, shortname, BSF_INDIRECT,
bfd_ind_section_ptr,
0, name, FALSE, collect, &bh)))
return FALSE;
hi = (struct elf_link_hash_entry *) bh;
}
}
else
{
@ -4609,9 +4614,10 @@ error_free_dyn:
old_tab = NULL;
}
/* Now that all the symbols from this input file are created, handle
.symver foo, foo@BAR such that any relocs against foo become foo@BAR. */
if (nondeflt_vers != NULL)
/* Now that all the symbols from this input file are created, if
not performing a relocatable link, handle .symver foo, foo@BAR
such that any relocs against foo become foo@BAR. */
if (!info->relocatable && nondeflt_vers != NULL)
{
bfd_size_type cnt, symidx;

View File

@ -1,3 +1,9 @@
2015-07-30 H.J. Lu <hongjiu.lu@intel.com>
PR ld/18735
* ld-elf/pr18735.d: New file.
* ld-elf/pr18735.s: Likewise.
2015-07-29 H.J. Lu <hongjiu.lu@intel.com>
* ld-elf/pr18718.c (bar): Use noclone attribute only for GCC

View File

@ -0,0 +1,10 @@
#ld: -r
#readelf: -s
Symbol table '.symtab' contains .* entries:
#...
[ ]*[0-9]+: [0-9a-fA-F]* +1 +OBJECT +GLOBAL +DEFAULT +[0-9]+ +foo@FOO
[ ]*[0-9]+: [0-9a-fA-F]* +1 +OBJECT +GLOBAL +DEFAULT +[0-9]+ +bar@@FOO
[ ]*[0-9]+: [0-9a-fA-F]* +1 +OBJECT +GLOBAL +DEFAULT +[0-9]+ +foo
[ ]*[0-9]+: [0-9a-fA-F]* +1 +OBJECT +GLOBAL +DEFAULT +[0-9]+ +bar
#pass

View File

@ -0,0 +1,13 @@
.data
.symver foo, foo@FOO
.symver bar, bar@@FOO
.globl foo
.type foo, %object
foo:
.byte 0
.size foo, .-foo
.globl bar
.type bar, %object
bar:
.byte 0
.size bar, .-bar