bfd/
* elf32-arm.c (elf32_arm_final_link_relocate): Set sym_flags for the mode of target PLT entries. (allocate_dynrelocs): Only adjust symbol type if setting its value. ld/testsuite/ * ld-arm/farcall-mixed-lib.d: Update.
This commit is contained in:
parent
397dbc8b2b
commit
67d74e430e
|
@ -1,3 +1,10 @@
|
||||||
|
2009-09-09 Daniel Jacobowitz <dan@codesourcery.com>
|
||||||
|
|
||||||
|
* elf32-arm.c (elf32_arm_final_link_relocate): Set sym_flags
|
||||||
|
for the mode of target PLT entries.
|
||||||
|
(allocate_dynrelocs): Only adjust symbol type if setting its
|
||||||
|
value.
|
||||||
|
|
||||||
2009-09-09 Paolo Bonzini <bonzini@gnu.org>
|
2009-09-09 Paolo Bonzini <bonzini@gnu.org>
|
||||||
|
|
||||||
* configure: Regnerate.
|
* configure: Regnerate.
|
||||||
|
|
|
@ -7036,6 +7036,9 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto,
|
||||||
+ splt->output_offset
|
+ splt->output_offset
|
||||||
+ h->plt.offset);
|
+ h->plt.offset);
|
||||||
*unresolved_reloc_p = FALSE;
|
*unresolved_reloc_p = FALSE;
|
||||||
|
/* The PLT entry is in ARM mode, regardless of the
|
||||||
|
target function. */
|
||||||
|
sym_flags = STT_FUNC;
|
||||||
}
|
}
|
||||||
|
|
||||||
from = (input_section->output_section->vma
|
from = (input_section->output_section->vma
|
||||||
|
@ -7452,10 +7455,14 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto,
|
||||||
/* If the Thumb BLX instruction is available, convert the
|
/* If the Thumb BLX instruction is available, convert the
|
||||||
BL to a BLX instruction to call the ARM-mode PLT entry. */
|
BL to a BLX instruction to call the ARM-mode PLT entry. */
|
||||||
lower_insn = (lower_insn & ~0x1000) | 0x0800;
|
lower_insn = (lower_insn & ~0x1000) | 0x0800;
|
||||||
|
sym_flags = STT_FUNC;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
/* Target the Thumb stub before the ARM PLT entry. */
|
{
|
||||||
value -= PLT_THUMB_STUB_SIZE;
|
/* Target the Thumb stub before the ARM PLT entry. */
|
||||||
|
value -= PLT_THUMB_STUB_SIZE;
|
||||||
|
sym_flags = STT_ARM_TFUNC;
|
||||||
|
}
|
||||||
*unresolved_reloc_p = FALSE;
|
*unresolved_reloc_p = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11449,13 +11456,13 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf)
|
||||||
{
|
{
|
||||||
h->root.u.def.section = s;
|
h->root.u.def.section = s;
|
||||||
h->root.u.def.value = h->plt.offset;
|
h->root.u.def.value = h->plt.offset;
|
||||||
}
|
|
||||||
|
|
||||||
/* Make sure the function is not marked as Thumb, in case
|
/* Make sure the function is not marked as Thumb, in case
|
||||||
it is the target of an ABS32 relocation, which will
|
it is the target of an ABS32 relocation, which will
|
||||||
point to the PLT entry. */
|
point to the PLT entry. */
|
||||||
if (ELF_ST_TYPE (h->type) == STT_ARM_TFUNC)
|
if (ELF_ST_TYPE (h->type) == STT_ARM_TFUNC)
|
||||||
h->type = ELF_ST_INFO (ELF_ST_BIND (h->type), STT_FUNC);
|
h->type = ELF_ST_INFO (ELF_ST_BIND (h->type), STT_FUNC);
|
||||||
|
}
|
||||||
|
|
||||||
/* Make room for this entry. */
|
/* Make room for this entry. */
|
||||||
s->size += htab->plt_entry_size;
|
s->size += htab->plt_entry_size;
|
||||||
|
|
|
@ -1,3 +1,7 @@
|
||||||
|
2009-09-09 Daniel Jacobowitz <dan@codesourcery.com>
|
||||||
|
|
||||||
|
* ld-arm/farcall-mixed-lib.d: Update.
|
||||||
|
|
||||||
2009-09-09 Alan Modra <amodra@bigpond.net.au>
|
2009-09-09 Alan Modra <amodra@bigpond.net.au>
|
||||||
|
|
||||||
* ld-elf/sec64k.exp: For frv-linux use "aw" sections.
|
* ld-elf/sec64k.exp: For frv-linux use "aw" sections.
|
||||||
|
|
|
@ -39,9 +39,9 @@ Disassembly of section .text:
|
||||||
|
|
||||||
.* <lib_func2>:
|
.* <lib_func2>:
|
||||||
.*: f000 e80e blx 1000350 <__app_func_from_thumb>
|
.*: f000 e80e blx 1000350 <__app_func_from_thumb>
|
||||||
.*: f000 e818 blx 1000368 <__app_func_weak_from_thumb>
|
.*: f000 e81a blx 100036c <__app_func_weak_from_thumb>
|
||||||
.*: f000 e810 blx 100035c <__lib_func3_from_thumb>
|
.*: f000 e810 blx 100035c <__lib_func3_veneer>
|
||||||
.*: f000 e81a blx 1000374 <__lib_func4_from_thumb>
|
.*: f000 e81c blx 1000378 <__lib_func4_from_thumb>
|
||||||
.*: 4770 bx lr
|
.*: 4770 bx lr
|
||||||
.*: 46c0 nop ; \(mov r8, r8\)
|
.*: 46c0 nop ; \(mov r8, r8\)
|
||||||
.*: 46c0 nop ; \(mov r8, r8\)
|
.*: 46c0 nop ; \(mov r8, r8\)
|
||||||
|
@ -56,20 +56,21 @@ Disassembly of section .text:
|
||||||
.*: e08ff00c add pc, pc, ip
|
.*: e08ff00c add pc, pc, ip
|
||||||
.*: feffff84 .word 0xfeffff84
|
.*: feffff84 .word 0xfeffff84
|
||||||
|
|
||||||
.* <__lib_func3_from_thumb>:
|
.* <__lib_func3_veneer>:
|
||||||
.*: e59fc000 ldr ip, \[pc, #0\] ; 1000364 <__lib_func3_from_thumb\+0x8>
|
.*: e59fc004 ldr ip, \[pc, #4\] ; 1000368 <__lib_func3_veneer\+0xc>
|
||||||
.*: e08ff00c add pc, pc, ip
|
.*: e08fc00c add ip, pc, ip
|
||||||
.*: feffff90 .word 0xfeffff90
|
.*: e12fff1c bx ip
|
||||||
|
.*: feffff91 .word 0xfeffff91
|
||||||
|
|
||||||
.* <__app_func_weak_from_thumb>:
|
.* <__app_func_weak_from_thumb>:
|
||||||
.*: e59fc000 ldr ip, \[pc, #0\] ; 1000370 <__app_func_weak_from_thumb\+0x8>
|
.*: e59fc000 ldr ip, \[pc, #0\] ; 1000374 <__app_func_weak_from_thumb\+0x8>
|
||||||
.*: e08ff00c add pc, pc, ip
|
.*: e08ff00c add pc, pc, ip
|
||||||
.*: feffff78 .word 0xfeffff78
|
.*: feffff74 .word 0xfeffff74
|
||||||
|
|
||||||
.* <__lib_func4_from_thumb>:
|
.* <__lib_func4_from_thumb>:
|
||||||
.*: e59fc000 ldr ip, \[pc, #0\] ; 100037c <__lib_func4_from_thumb\+0x8>
|
.*: e59fc000 ldr ip, \[pc, #0\] ; 1000380 <__lib_func4_from_thumb\+0x8>
|
||||||
.*: e08ff00c add pc, pc, ip
|
.*: e08ff00c add pc, pc, ip
|
||||||
.*: feffff84 .word 0xfeffff84
|
.*: feffff80 .word 0xfeffff80
|
||||||
...
|
...
|
||||||
|
|
||||||
.* <lib_func3>:
|
.* <lib_func3>:
|
||||||
|
|
Loading…
Reference in New Issue