mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-18 14:53:32 +08:00
fe33d2fa46
Alan Modra <amodra@gmail.com> bfd/ * elf32-arm.c (a8_erratum_fix): Add st_type field to record the destination mode of the a8 stub. (elf32_arm_link_hash_table): Add top_id field. (elf32_arm_link_hash_table_create): Initialize top_id. (arm_type_of_stub): Update prototype, st_type can now be updated by this function. Actual destination address in case of PLT is computed here, to help factorizing code. (elf32_arm_stub_name): Update prototype, use stub_type additional parameter to build stub name. (elf32_arm_get_stub_entry): Update prototype, use stub_type additional parameter to build stub entry. (arm_build_one_stub): Use bfd_put_16/bfd_put_32 instead of put_thumb_insn/put_arm_insn as BE8 encoding is now handled later. Call elf32_arm_final_link_relocate to process all in-stub relocations. (elf32_arm_setup_section_lists): Update top_id. (cortex_a8_erratum_scan): Record stub destination mode. (elf32_arm_size_stubs): Update call to arm_type_of_stub according to new prototype. (elf32_arm_final_link_relocate): Enable processing of in-stub REL32 relocations. Rely on arm_type_of_stub to detect if a stub is needed, enabling code factorization. (elf32_arm_final_link): Process stub sections. (elf32_arm_output_map_sym): Add entry to code/data map. ld/testsuite/ * ld-arm/arm-elf.exp: Change .text start address for farcall-thumb-arm tests. Add v4t variant for farcall-mixed-lib test. * ld-arm/farcall-mixed-lib-v4t.d: New test. * ld-arm/farcall-mixed-lib1.s: Don't force armv5t. * ld-arm/farcall-mixed-lib2.s: Likewise. * ld-arm/arm-call.d: Update expected results. * ld-arm/cortex-a8-far.d: Likewise. * ld-arm/farcall-group-size2.d: Likewise. * ld-arm/farcall-group.d: Likewise. * ld-arm/farcall-mix.d: Likewise. * ld-arm/farcall-mix2.d: Likewise. * ld-arm/farcall-mixed-app-v5.d: Likewise. * ld-arm/farcall-mixed-app.d: Likewise. * ld-arm/farcall-mixed-lib.d: Likewise. * ld-arm/farcall-thumb-arm.d: Likewise. * ld-arm/farcall-thumb-arm-blx.d: Likewise. * ld-arm/farcall-thumb-arm-pic-veneer.d: Likewise. * ld-arm/farcall-thumb-arm-blx-pic-veneer.d: Likewise. * ld-arm/farcall-thumb-arm.s: Update test. Add a new call to potentially generate different types of stubs.
35 lines
637 B
ArmAsm
35 lines
637 B
ArmAsm
@ Create a large shared library so that calls through PLT to an undef
|
|
@ symbol require insertion of a long branch stub.
|
|
@ Check also calls to an undef weak symbol.
|
|
|
|
.text
|
|
|
|
.p2align 4
|
|
.globl lib_func1
|
|
.type lib_func1, %function
|
|
lib_func1:
|
|
mov ip, sp
|
|
stmdb sp!, {r11, ip, lr, pc}
|
|
bl app_func
|
|
.weak app_func_weak
|
|
bl app_func_weak
|
|
bl lib_func3
|
|
bl lib_func4
|
|
ldmia sp, {r11, sp, lr}
|
|
bx lr
|
|
.size lib_func1, . - lib_func1
|
|
|
|
.space 0x1000000
|
|
.p2align 4
|
|
.globl lib_func2
|
|
.type lib_func2, %function
|
|
.thumb_func
|
|
.code 16
|
|
lib_func2:
|
|
bl app_func
|
|
bl app_func_weak
|
|
bl lib_func3
|
|
bl lib_func4
|
|
bx lr
|
|
.size lib_func2, . - lib_func2
|