aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bfd/ChangeLog8
-rw-r--r--bfd/elflink.c24
-rw-r--r--ld/testsuite/ChangeLog6
-rw-r--r--ld/testsuite/ld-elf/pr18735.d10
-rw-r--r--ld/testsuite/ld-elf/pr18735.s13
5 files changed, 52 insertions, 9 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index e3339d0..e9776bf 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -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
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/ChangeLog b/ld/testsuite/ChangeLog
index 267361f..c35d4a7 100644
--- a/ld/testsuite/ChangeLog
+++ b/ld/testsuite/ChangeLog
@@ -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
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