diff options
-rw-r--r-- | bfd/ChangeLog | 8 | ||||
-rw-r--r-- | bfd/elflink.c | 24 | ||||
-rw-r--r-- | ld/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | ld/testsuite/ld-elf/pr18735.d | 10 | ||||
-rw-r--r-- | ld/testsuite/ld-elf/pr18735.s | 13 |
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 |