+2014-07-08 Alan Modra <amodra@gmail.com>
+
+ * 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.
+
2014-07-08 Jiong Wang <jiong.wang@arm.com>
* elfnn-aarch64.c (elf_backend_rela_normal): Set to 1.
/* Indicate that we are only retrieving symbol values from this section. */
void (*_bfd_link_just_syms) (asection *, struct bfd_link_info *);
- /* Copy the symbol type of a linker hash table entry. */
+ /* Copy the symbol type and other attributes for a linker script
+ assignment of one symbol to another. */
#define bfd_copy_link_hash_symbol_type(b, t, f) \
BFD_SEND (b, _bfd_copy_link_hash_symbol_type, (b, t, f))
void (*_bfd_copy_link_hash_symbol_type)
return reloc_sec;
}
-/* Copy the ELF symbol type associated with a linker hash entry. */
+/* Copy the ELF symbol type and other attributes for a linker script
+ assignment from HSRC to HDEST. Generally this should be treated as
+ if we found a strong non-dynamic definition for HDEST (except that
+ ld ignores multiple definition errors). */
void
-_bfd_elf_copy_link_hash_symbol_type (bfd *abfd ATTRIBUTE_UNUSED,
- struct bfd_link_hash_entry * hdest,
- struct bfd_link_hash_entry * hsrc)
+_bfd_elf_copy_link_hash_symbol_type (bfd *abfd,
+ struct bfd_link_hash_entry *hdest,
+ struct bfd_link_hash_entry *hsrc)
{
- struct elf_link_hash_entry *ehdest = (struct elf_link_hash_entry *)hdest;
- struct elf_link_hash_entry *ehsrc = (struct elf_link_hash_entry *)hsrc;
+ struct elf_link_hash_entry *ehdest = (struct elf_link_hash_entry *) hdest;
+ struct elf_link_hash_entry *ehsrc = (struct elf_link_hash_entry *) hsrc;
+ Elf_Internal_Sym isym;
ehdest->type = ehsrc->type;
ehdest->target_internal = ehsrc->target_internal;
+
+ isym.st_other = ehsrc->other;
+ elf_merge_st_other (abfd, ehdest, &isym, TRUE, FALSE);
}
/* Append a RELA relocation REL to section S in BFD. */
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)
{
}
. {* Indicate that we are only retrieving symbol values from this section. *}
. void (*_bfd_link_just_syms) (asection *, struct bfd_link_info *);
.
-. {* Copy the symbol type of a linker hash table entry. *}
+. {* Copy the symbol type and other attributes for a linker script
+. assignment of one symbol to another. *}
.#define bfd_copy_link_hash_symbol_type(b, t, f) \
. BFD_SEND (b, _bfd_copy_link_hash_symbol_type, (b, t, f))
. void (*_bfd_copy_link_hash_symbol_type)
* ld-aarch64/emit-relocs-local-addend.d: New testcase.
* ld-aarch64/local-addend-r.d: Likewise.
+2014-07-08 Alan Modra <amodra@gmail.com>
+
+ * ld-powerpc/defsym.s, * ld-powerpc/defsym.d: New test.
+ * ld-powerpc/powerpc.exp: Run it.
+
2014-07-08 Alan Modra <amodra@gmail.com>
PR 17112
--- /dev/null
+#source: defsym.s
+#as: -a64
+#ld: -melf64ppc --defsym bar=foo
+#objdump: -Dr
+
+.*: file format elf64-powerpc.*
+
+Disassembly of section \.text:
+
+0+100000b0 <_start>:
+ 100000b0: (15 00 00 48|48 00 00 15) bl 100000c4 <(foo|bar)\+0x8>
+ 100000b4: (11 00 00 48|48 00 00 11) bl 100000c4 <(foo|bar)\+0x8>
+ 100000b8: (00 00 00 60|60 00 00 00) nop
+
+0+100000bc <(foo|bar)>:
+ 100000bc: (02 10 40 3c|3c 40 10 02) lis r2,4098
+ 100000c0: (c8 80 42 38|38 42 80 c8) addi r2,r2,-32568
+ 100000c4: (20 00 80 4e|4e 80 00 20) blr
+
+Disassembly of section \.data:
+
+0+100100c8 .*:
+ 100100c8: (bc 00 00 10|00 00 00 00) .*
+ 100100cc: (00 00 00 00|10 00 00 bc) .*
+ 100100d0: (bc 00 00 10|00 00 00 00) .*
+ 100100d4: (00 00 00 00|10 00 00 bc) .*
--- /dev/null
+ .text
+ .globl _start
+_start:
+ bl foo
+ bl bar
+ nop
+
+ .globl foo
+ .type foo,@function
+foo:
+ addis 2,12,.TOC.-foo@ha
+ addi 2,2,.TOC.-foo@l
+ .localentry foo,.-foo
+ blr
+ .size foo,.-foo
+
+ .data
+ .dc.a foo
+ .dc.a bar
run_dump_test "ambiguousv1b"
run_dump_test "ambiguousv2"
run_dump_test "ambiguousv2b"
+ run_dump_test "defsym"
}
if { [istarget "powerpc*-eabi*"] } {