This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
[PATCH] PR ld/18735: Don't change the default symbol for relocatable link
- From: "H.J. Lu" <hongjiu dot lu at intel dot com>
- To: binutils at sourceware dot org
- Date: Wed, 29 Jul 2015 09:57:51 -0700
- Subject: [PATCH] PR ld/18735: Don't change the default symbol for relocatable link
- Authentication-results: sourceware.org; auth=none
- Reply-to: "H.J. Lu" <hjl dot tools at gmail dot com>
We should change the default symbol for the versioned symbol only when
not performing a relocatable link.
OK for master?
H.J.
---
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.
---
bfd/elflink.c | 24 +++++++++++++++---------
ld/testsuite/ld-elf/pr18735.d | 10 ++++++++++
ld/testsuite/ld-elf/pr18735.s | 13 +++++++++++++
3 files changed, 38 insertions(+), 9 deletions(-)
create mode 100644 ld/testsuite/ld-elf/pr18735.d
create mode 100644 ld/testsuite/ld-elf/pr18735.s
diff --git a/bfd/elflink.c b/bfd/elflink.c
index fc1fd08..846f35e 100644
--- a/bfd/elflink.c
+++ b/bfd/elflink.c
@@ -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;
diff --git a/ld/testsuite/ld-elf/pr18735.d b/ld/testsuite/ld-elf/pr18735.d
new file mode 100644
index 0000000..8ec0938
--- /dev/null
+++ b/ld/testsuite/ld-elf/pr18735.d
@@ -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
diff --git a/ld/testsuite/ld-elf/pr18735.s b/ld/testsuite/ld-elf/pr18735.s
new file mode 100644
index 0000000..aae609d
--- /dev/null
+++ b/ld/testsuite/ld-elf/pr18735.s
@@ -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
--
2.4.3