diff options
author | Alan Modra <amodra@gmail.com> | 2014-07-08 15:24:06 +0930 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2014-07-08 19:42:03 +0930 |
commit | bffebb6ba5b4ddbca7353626d682f9f974584dbf (patch) | |
tree | 093877e73fca460e1b1f378024e210b46ddc1f00 /bfd/linker.c | |
parent | 161ac41e03a819bc34e8c70a3fd1bc26f43858a2 (diff) | |
download | gdb-bffebb6ba5b4ddbca7353626d682f9f974584dbf.zip gdb-bffebb6ba5b4ddbca7353626d682f9f974584dbf.tar.gz gdb-bffebb6ba5b4ddbca7353626d682f9f974584dbf.tar.bz2 |
Copy st_other for linker script symbol assignments
This fixes a problem seen on powerpc64le ELFv2 when creating a
function symbol alias with ld --defsym. st_other needs to be copied
from the source symbol to the alias in order to set up the local entry
offset for the alias. I decided to make this change in the generic
ELF code rather than in elf64-ppc.c since it looks like other targets
that use st_other bits might benefit too.
bfd/
* elflink.c (_bfd_elf_copy_link_hash_symbol_type): Copy st_other
bits from source to dest.
* linker.c (_bfd_generic_copy_link_hash_symbol_type): Update comment.
* targets.c (struct bfd_target <_bfd_copy_link_hash_symbol_type>):
Likewise.
* bfd-in2.h: Regenerate.
ld/testsuite/
* ld-powerpc/defsym.s, * ld-powerpc/defsym.d: New test.
* ld-powerpc/powerpc.exp: Run it.
Diffstat (limited to 'bfd/linker.c')
-rw-r--r-- | bfd/linker.c | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/bfd/linker.c b/bfd/linker.c index 483a0d4..f6ae4e2 100644 --- a/bfd/linker.c +++ b/bfd/linker.c @@ -861,14 +861,13 @@ _bfd_generic_link_just_syms (asection *sec, sec->output_offset = sec->vma; } -/* Copy the type of a symbol assiciated with a linker hast table entry. - Override this so that symbols created in linker scripts get their - type from the RHS of the assignment. +/* Copy the symbol type and other attributes for a linker script + assignment from HSRC to HDEST. The default implementation does nothing. */ void _bfd_generic_copy_link_hash_symbol_type (bfd *abfd ATTRIBUTE_UNUSED, - struct bfd_link_hash_entry * hdest ATTRIBUTE_UNUSED, - struct bfd_link_hash_entry * hsrc ATTRIBUTE_UNUSED) + struct bfd_link_hash_entry *hdest ATTRIBUTE_UNUSED, + struct bfd_link_hash_entry *hsrc ATTRIBUTE_UNUSED) { } |