Properly handle common symbol and weak function
authorH.J. Lu <hjl.tools@gmail.com>
Wed, 19 Sep 2012 00:53:30 +0000 (00:53 +0000)
committerH.J. Lu <hjl.tools@gmail.com>
Wed, 19 Sep 2012 00:53:30 +0000 (00:53 +0000)
commit37a9e49a286b6c0b9e34387921b90c0ffa731516
tree065d205cdcf4f3fd4e8b37d51a479eebde2e6a7f
parent91b96a45e3265661c6f686ae9050100b8df2794f
Properly handle common symbol and weak function

bfd/

PR ld/14591
* elf-bfd.h (_bfd_elf_merge_symbol): Add an argument to return
if the old symbol is weak.

* elf32-sh-symbian.c (sh_symbian_relocate_section): Update
_bfd_elf_merge_symbol call.

* elflink.c (_bfd_elf_merge_symbol): Add an argument to return
if the old symbol is weak.
(_bfd_elf_add_default_symbol): Update _bfd_elf_merge_symbol
call.
(elf_link_add_object_symbols): Don't update symbol type from a
weak definition.  Update symbol type from a common symbol when
overriding a weak symbol.

ld/testsuite/

PR ld/14591
* ld-elf/comm-data.exp (run_ld_link_tests): Add comm-data3a and
comm-data3b tests.

* ld-ifunc/ifunc.exp (run_ld_link_exec_tests): New.

* ld-elf/comm-data3.sd: New file.
* ld-elf/comm-data3a.s: Likewise.
* ld-elf/comm-data3b.s: Likewise.
* ld-ifunc/ifunc-17a-i386.d: Likewise.
* ld-ifunc/ifunc-17a-x86-64.d: Likewise.
* ld-ifunc/ifunc-17a.s: Likewise.
* ld-ifunc/ifunc-17b-i386.d: Likewise.
* ld-ifunc/ifunc-17b-x86-64.d: Likewise.
* ld-ifunc/ifunc-17b.s: Likewise.
* ld-ifunc/ifunc-common-1.out: Likewise.
* ld-ifunc/ifunc-common-1a.c: Likewise.
* ld-ifunc/ifunc-common-1b.c: Likewise.
19 files changed:
bfd/ChangeLog
bfd/elf-bfd.h
bfd/elf32-sh-symbian.c
bfd/elflink.c
ld/testsuite/ChangeLog
ld/testsuite/ld-elf/comm-data.exp
ld/testsuite/ld-elf/comm-data3.sd [new file with mode: 0644]
ld/testsuite/ld-elf/comm-data3a.s [new file with mode: 0644]
ld/testsuite/ld-elf/comm-data3b.s [new file with mode: 0644]
ld/testsuite/ld-ifunc/ifunc-17a-i386.d [new file with mode: 0644]
ld/testsuite/ld-ifunc/ifunc-17a-x86-64.d [new file with mode: 0644]
ld/testsuite/ld-ifunc/ifunc-17a.s [new file with mode: 0644]
ld/testsuite/ld-ifunc/ifunc-17b-i386.d [new file with mode: 0644]
ld/testsuite/ld-ifunc/ifunc-17b-x86-64.d [new file with mode: 0644]
ld/testsuite/ld-ifunc/ifunc-17b.s [new file with mode: 0644]
ld/testsuite/ld-ifunc/ifunc-common-1.out [new file with mode: 0644]
ld/testsuite/ld-ifunc/ifunc-common-1a.c [new file with mode: 0644]
ld/testsuite/ld-ifunc/ifunc-common-1b.c [new file with mode: 0644]
ld/testsuite/ld-ifunc/ifunc.exp