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.
123 lines
3.8 KiB
Makefile
123 lines
3.8 KiB
Makefile
tmpdir/farcall-mixed-lib.so: file format elf32-(little|big)arm
|
|
architecture: arm, flags 0x00000150:
|
|
HAS_SYMS, DYNAMIC, D_PAGED
|
|
start address 0x.*
|
|
|
|
Disassembly of section .plt:
|
|
|
|
.* <.plt>:
|
|
.*: e52de004 push {lr} ; \(str lr, \[sp, #-4\]!\)
|
|
.*: e59fe004 ldr lr, \[pc, #4\] ; .* <lib_func1-0x.*>
|
|
.*: e08fe00e add lr, pc, lr
|
|
.*: e5bef008 ldr pc, \[lr, #8\]!
|
|
.*: .* .word .*
|
|
.*: 4778 bx pc
|
|
.*: 46c0 nop ; \(mov r8, r8\)
|
|
.*: e28fc6.* add ip, pc, #.*
|
|
.*: e28cca.* add ip, ip, #.* ; 0x.*
|
|
.*: e5bcf.* ldr pc, \[ip, #.*\]! ; .*
|
|
.*: 4778 bx pc
|
|
.*: 46c0 nop ; \(mov r8, r8\)
|
|
.*: e28fc6.* add ip, pc, #.*
|
|
.*: e28cca.* add ip, ip, #.* ; 0x.*
|
|
.*: e5bcf.* ldr pc, \[ip, #.*\]! ; 0x.*
|
|
.*: 4778 bx pc
|
|
.*: 46c0 nop ; \(mov r8, r8\)
|
|
.*: e28fc6.* add ip, pc, #.*
|
|
.*: e28cca.* add ip, ip, #.* ; 0x.*
|
|
.*: e5bcf.* ldr pc, \[ip, #.*\]! ; 0x.*
|
|
.*: 4778 bx pc
|
|
.*: 46c0 nop ; \(mov r8, r8\)
|
|
.*: e28fc6.* add ip, pc, #.*
|
|
.*: e28cca.* add ip, ip, #.* ; 0x.*
|
|
.*: e5bcf.* ldr pc, \[ip, #.*\]! ; 0x.*
|
|
|
|
Disassembly of section .text:
|
|
|
|
.* <lib_func1>:
|
|
.*: e1a0c00d mov ip, sp
|
|
.*: e92dd800 push {fp, ip, lr, pc}
|
|
.*: ebffff.. bl .* <lib_func1-0x.*>
|
|
.*: ebffff.. bl .* <lib_func1-0x.*>
|
|
.*: ebffff.. bl .* <lib_func1-0x.*>
|
|
.*: ebffff.. bl .* <lib_func1-0x.*>
|
|
.*: e89d6800 ldm sp, {fp, sp, lr}
|
|
.*: e12fff1e bx lr
|
|
...
|
|
|
|
.* <__real_lib_func2>:
|
|
.*: f000 f80e bl 1000330 <__app_func_from_thumb>
|
|
.*: f000 f81c bl 1000350 <__app_func_weak_from_thumb>
|
|
.*: f000 f822 bl 1000360 <__lib_func3_from_thumb>
|
|
.*: f000 f810 bl 1000340 <__lib_func4_from_thumb>
|
|
.*: 4770 bx lr
|
|
.*: 46c0 nop ; \(mov r8, r8\)
|
|
.*: 46c0 nop ; \(mov r8, r8\)
|
|
.*: 46c0 nop ; \(mov r8, r8\)
|
|
.*: 46c0 nop ; \(mov r8, r8\)
|
|
.*: 46c0 nop ; \(mov r8, r8\)
|
|
.*: 46c0 nop ; \(mov r8, r8\)
|
|
.*: 46c0 nop ; \(mov r8, r8\)
|
|
|
|
.* <__app_func_from_thumb>:
|
|
.*: 4778 bx pc
|
|
.*: 46c0 nop ; \(mov r8, r8\)
|
|
.*: e59fc000 ldr ip, \[pc, #0\] ; 100033c <__app_func_from_thumb\+0xc>
|
|
.*: e08cf00f add pc, ip, pc
|
|
.*: feffff68 .word 0xfeffff68
|
|
|
|
.* <__lib_func4_from_thumb>:
|
|
.*: 4778 bx pc
|
|
.*: 46c0 nop ; \(mov r8, r8\)
|
|
.*: e59fc000 ldr ip, \[pc, #0\] ; 100034c <__lib_func4_from_thumb\+0xc>
|
|
.*: e08cf00f add pc, ip, pc
|
|
.*: feffff88 .word 0xfeffff88
|
|
|
|
.* <__app_func_weak_from_thumb>:
|
|
.*: 4778 bx pc
|
|
.*: 46c0 nop ; \(mov r8, r8\)
|
|
.*: e59fc000 ldr ip, \[pc, #0\] ; 100035c <__app_func_weak_from_thumb\+0xc>
|
|
.*: e08cf00f add pc, ip, pc
|
|
.*: feffff58 .word 0xfeffff58
|
|
|
|
.* <__lib_func3_from_thumb>:
|
|
.*: 4778 bx pc
|
|
.*: 46c0 nop ; \(mov r8, r8\)
|
|
.*: e59fc000 ldr ip, \[pc, #0\] ; 100036c <__lib_func3_from_thumb\+0xc>
|
|
.*: e08cf00f add pc, ip, pc
|
|
.*: feffff58 .word 0xfeffff58
|
|
...
|
|
|
|
.* <__real_lib_func3>:
|
|
.*: f000 f806 bl 2000380 <__app_func_from_thumb>
|
|
.*: f000 f80c bl 2000390 <__app_func_weak_from_thumb>
|
|
.*: 4770 bx lr
|
|
.*: 46c0 nop ; \(mov r8, r8\)
|
|
.*: 46c0 nop ; \(mov r8, r8\)
|
|
.*: 46c0 nop ; \(mov r8, r8\)
|
|
|
|
.* <__app_func_from_thumb>:
|
|
.*: 4778 bx pc
|
|
.*: 46c0 nop ; \(mov r8, r8\)
|
|
.*: e59fc000 ldr ip, \[pc, #0\] ; 200038c <__app_func_from_thumb\+0xc>
|
|
.*: e08cf00f add pc, ip, pc
|
|
.*: fdffff18 .word 0xfdffff18
|
|
|
|
.* <__app_func_weak_from_thumb>:
|
|
.*: 4778 bx pc
|
|
.*: 46c0 nop ; \(mov r8, r8\)
|
|
.*: e59fc000 ldr ip, \[pc, #0\] ; 200039c <__app_func_weak_from_thumb\+0xc>
|
|
.*: e08cf00f add pc, ip, pc
|
|
.*: fdffff18 .word 0xfdffff18
|
|
|
|
.* <lib_func3>:
|
|
.*: e59fc004 ldr ip, \[pc, #4\] ; 20003ac <lib_func3\+0xc>
|
|
.*: e08cc00f add ip, ip, pc
|
|
.*: e12fff1c bx ip
|
|
.*: ffffffc5 .word 0xffffffc5
|
|
|
|
.* <lib_func2>:
|
|
.*: e59fc004 ldr ip, \[pc, #4\] ; 20003bc <lib_func2\+0xc>
|
|
.*: e08cc00f add ip, ip, pc
|
|
.*: e12fff1c bx ip
|
|
.*: feffff55 .word 0xfeffff55
|