diff options
Diffstat (limited to 'ld')
72 files changed, 7285 insertions, 45 deletions
diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index d253267..1e145cd 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,5 +1,35 @@ 2011-03-14 Richard Sandiford <richard.sandiford@linaro.org> + * ld-arm/ifunc-1.s, ld-arm/ifunc-1.dd, ld-arm/ifunc-1.gd, + ld-arm/ifunc-1.rd, ld-arm/ifunc-2.s, ld-arm/ifunc-2.dd, + ld-arm/ifunc-2.gd, ld-arm/ifunc-2.rd, ld-arm/ifunc-3.s, + ld-arm/ifunc-3.dd, ld-arm/ifunc-3.gd, ld-arm/ifunc-3.rd, + ld-arm/ifunc-4.s, ld-arm/ifunc-4.dd, ld-arm/ifunc-4.gd, + ld-arm/ifunc-4.rd, ld-arm/ifunc-5.s, ld-arm/ifunc-5.dd, + ld-arm/ifunc-5.gd, ld-arm/ifunc-5.rd, ld-arm/ifunc-6.s, + ld-arm/ifunc-6.dd, ld-arm/ifunc-6.gd, ld-arm/ifunc-6.rd, + ld-arm/ifunc-7.s, ld-arm/ifunc-7.dd, ld-arm/ifunc-7.gd, + ld-arm/ifunc-7.rd, ld-arm/ifunc-8.s, ld-arm/ifunc-8.dd, + ld-arm/ifunc-8.gd, ld-arm/ifunc-8.rd, ld-arm/ifunc-9.s, + ld-arm/ifunc-9.dd, ld-arm/ifunc-9.gd, ld-arm/ifunc-9.rd, + ld-arm/ifunc-10.s, ld-arm/ifunc-10.dd, ld-arm/ifunc-10.gd, + ld-arm/ifunc-10.rd, ld-arm/ifunc-11.s, ld-arm/ifunc-11.dd, + ld-arm/ifunc-11.gd, ld-arm/ifunc-11.rd, ld-arm/ifunc-12.s, + ld-arm/ifunc-12.dd, ld-arm/ifunc-12.gd, ld-arm/ifunc-12.rd, + ld-arm/ifunc-13.s, ld-arm/ifunc-13.dd, ld-arm/ifunc-13.gd, + ld-arm/ifunc-13.rd, ld-arm/ifunc-14.s, ld-arm/ifunc-14.dd, + ld-arm/ifunc-14.gd, ld-arm/ifunc-14.rd, ld-arm/ifunc-15.s, + ld-arm/ifunc-15.dd, ld-arm/ifunc-15.gd, ld-arm/ifunc-15.rd, + ld-arm/ifunc-16.s, ld-arm/ifunc-16.dd, ld-arm/ifunc-16.gd, + ld-arm/ifunc-16.rd, ld-arm/ifunc-dynamic.ld, + ld-arm/ifunc-static.ld: New tests. + * ld-arm/farcall-group.d, ld-arm/farcall-group-size2.d, + ld-arm/farcall-mixed-lib-v4t.d, ld-arm/farcall-mixed-lib.d: Update + for new stub hashes. + * ld-arm/arm-elf.exp: Run them. + +2011-03-14 Richard Sandiford <richard.sandiford@linaro.org> + * ld-arm/arm-lib-plt-2a.s, ld-arm/arm-lib-plt-2b.s, ld-arm/arm-lib-plt-2.dd, ld-arm/arm-lib-plt-2.rd: New tests. * ld-arm/arm-elf.exp: Run them. diff --git a/ld/testsuite/ld-arm/arm-elf.exp b/ld/testsuite/ld-arm/arm-elf.exp index 11ee575..5b50da5 100644 --- a/ld/testsuite/ld-arm/arm-elf.exp +++ b/ld/testsuite/ld-arm/arm-elf.exp @@ -311,6 +311,88 @@ set armelftests { "" {exec-got-1b.s} {{readelf --relocs exec-got-1.d}} "exec-got-1"} + {"IFUNC test 1" "-T ifunc-static.ld" "" {ifunc-1.s} + {{objdump -d ifunc-1.dd} + {objdump {-s -j.data -j.got} ifunc-1.gd} + {readelf -dr ifunc-1.rd}} + "ifunc-1"} + {"IFUNC test 2" "-T ifunc-static.ld" "" {ifunc-2.s} + {{objdump -d ifunc-2.dd} + {objdump {-s -j.data -j.got} ifunc-2.gd} + {readelf -dr ifunc-2.rd}} + "ifunc-2"} + {"IFUNC test 3" "-T ifunc-dynamic.ld -shared" "" {ifunc-3.s} + {{objdump -d ifunc-3.dd} + {objdump {-s -j.data -j.got} ifunc-3.gd} + {readelf -r ifunc-3.rd}} + "ifunc-3.so"} + {"IFUNC test 4" "-T ifunc-dynamic.ld -shared" "" {ifunc-4.s} + {{objdump -d ifunc-4.dd} + {objdump {-s -j.data -j.got} ifunc-4.gd} + {readelf -r ifunc-4.rd}} + "ifunc-4.so"} + {"IFUNC test 5" "-T ifunc-static.ld" "" {ifunc-5.s} + {{objdump -d ifunc-5.dd} + {objdump {-s -j.data -j.got} ifunc-5.gd} + {readelf -dr ifunc-5.rd}} + "ifunc-5"} + {"IFUNC test 6" "-T ifunc-static.ld" "" {ifunc-6.s} + {{objdump -d ifunc-6.dd} + {objdump {-s -j.data -j.got} ifunc-6.gd} + {readelf -dr ifunc-6.rd}} + "ifunc-6"} + {"IFUNC test 7" "-T ifunc-dynamic.ld tmpdir/ifunc-3.so -shared" + "" {ifunc-7.s} + {{objdump -d ifunc-7.dd} + {objdump {-s -j.data -j.got} ifunc-7.gd} + {readelf -r ifunc-7.rd}} + "ifunc-7.so"} + {"IFUNC test 8" "-T ifunc-dynamic.ld tmpdir/ifunc-4.so -shared" + "" {ifunc-8.s} + {{objdump -d ifunc-8.dd} + {objdump {-s -j.data -j.got} ifunc-8.gd} + {readelf -r ifunc-8.rd}} + "ifunc-8.so"} + {"IFUNC test 9" "-T ifunc-dynamic.ld tmpdir/ifunc-3.so" "" {ifunc-9.s} + {{objdump -d ifunc-9.dd} + {objdump {-s -j.data -j.got} ifunc-9.gd} + {readelf -r ifunc-9.rd}} + "ifunc-9"} + {"IFUNC test 10" "-T ifunc-dynamic.ld tmpdir/ifunc-4.so" "" {ifunc-10.s} + {{objdump -d ifunc-10.dd} + {objdump {-s -j.data -j.got} ifunc-10.gd} + {readelf -r ifunc-10.rd}} + "ifunc-10"} + {"IFUNC test 11" "-T ifunc-static.ld" "" {ifunc-11.s} + {{objdump -d ifunc-11.dd} + {objdump {-s -j.data -j.got} ifunc-11.gd} + {readelf -dr ifunc-11.rd}} + "ifunc-11"} + {"IFUNC test 12" "-T ifunc-dynamic.ld -shared" "" {ifunc-12.s} + {{objdump -d ifunc-12.dd} + {objdump {-s -j.data -j.got} ifunc-12.gd} + {readelf -r ifunc-12.rd}} + "ifunc-12.so"} + {"IFUNC test 13" "-T ifunc-dynamic.ld tmpdir/ifunc-12.so" "" {ifunc-13.s} + {{objdump -d ifunc-13.dd} + {objdump {-s -j.data -j.got} ifunc-13.gd} + {readelf -r ifunc-13.rd}} + "ifunc-13"} + {"IFUNC test 14" "-T ifunc-dynamic.ld tmpdir/ifunc-12.so" "" {ifunc-14.s} + {{objdump -d ifunc-14.dd} + {objdump {-s -j.data -j.got} ifunc-14.gd} + {readelf -r ifunc-14.rd}} + "ifunc-14"} + {"IFUNC test 15" "-T ifunc-dynamic.ld tmpdir/ifunc-12.so" "" {ifunc-15.s} + {{objdump -d ifunc-15.dd} + {objdump {-s -j.data -j.got} ifunc-15.gd} + {readelf -r ifunc-15.rd}} + "ifunc-15"} + {"IFUNC test 16" "-T ifunc-dynamic.ld tmpdir/ifunc-12.so" "" {ifunc-16.s} + {{objdump -d ifunc-16.dd} + {objdump {-s -j.data -j.got} ifunc-16.gd} + {readelf -r ifunc-16.rd}} + "ifunc-16"} } run_ld_link_tests $armelftests diff --git a/ld/testsuite/ld-arm/farcall-group-size2.d b/ld/testsuite/ld-arm/farcall-group-size2.d index 8a35313..8b1f765 100644 --- a/ld/testsuite/ld-arm/farcall-group-size2.d +++ b/ld/testsuite/ld-arm/farcall-group-size2.d @@ -19,19 +19,19 @@ Disassembly of section .text: 00001020 <myfunc>: 1020: eb000008 bl 1048 <__bar3_veneer> - 1024: eb000001 bl 1030 <__bar4_from_arm> - 1028: eb000003 bl 103c <__bar5_from_arm> + 1024: eb000004 bl 103c <__bar4_from_arm> + 1028: eb000000 bl 1030 <__bar5_from_arm> 102c: 00000000 andeq r0, r0, r0 -00001030 <__bar4_from_arm>: - 1030: e59fc000 ldr ip, \[pc, #0\] ; 1038 <__bar4_from_arm\+0x8> +00001030 <__bar5_from_arm>: + 1030: e59fc000 ldr ip, \[pc, #0\] ; 1038 <__bar5_from_arm\+0x8> 1034: e12fff1c bx ip - 1038: 0200302d .word 0x0200302d + 1038: 0200302f .word 0x0200302f -0000103c <__bar5_from_arm>: - 103c: e59fc000 ldr ip, \[pc, #0\] ; 1044 <__bar5_from_arm\+0x8> +0000103c <__bar4_from_arm>: + 103c: e59fc000 ldr ip, \[pc, #0\] ; 1044 <__bar4_from_arm\+0x8> 1040: e12fff1c bx ip - 1044: 0200302f .word 0x0200302f + 1044: 0200302d .word 0x0200302d 00001048 <__bar3_veneer>: 1048: e51ff004 ldr pc, \[pc, #-4\] ; 104c <__bar3_veneer\+0x4> diff --git a/ld/testsuite/ld-arm/farcall-group.d b/ld/testsuite/ld-arm/farcall-group.d index a72c14ff..f20b785 100644 --- a/ld/testsuite/ld-arm/farcall-group.d +++ b/ld/testsuite/ld-arm/farcall-group.d @@ -4,37 +4,37 @@ Disassembly of section .text: 00001000 <_start>: - 1000: eb000009 bl 102c <__bar_from_arm> - 1004: eb000006 bl 1024 <__bar2_veneer> + 1000: eb00000c bl 1038 <__bar_from_arm> + 1004: eb00000e bl 1044 <__bar2_veneer> 00001008 <myfunc>: - 1008: eb00000d bl 1044 <__bar3_veneer> - 100c: eb000001 bl 1018 <__bar4_from_arm> - 1010: eb000008 bl 1038 <__bar5_from_arm> + 1008: eb000008 bl 1030 <__bar3_veneer> + 100c: eb000004 bl 1024 <__bar4_from_arm> + 1010: eb000000 bl 1018 <__bar5_from_arm> 1014: 00000000 andeq r0, r0, r0 -00001018 <__bar4_from_arm>: - 1018: e59fc000 ldr ip, \[pc, #0\] ; 1020 <__bar4_from_arm\+0x8> +00001018 <__bar5_from_arm>: + 1018: e59fc000 ldr ip, \[pc, #0\] ; 1020 <__bar5_from_arm\+0x8> 101c: e12fff1c bx ip - 1020: 0200302d .word 0x0200302d + 1020: 0200302f .word 0x0200302f -00001024 <__bar2_veneer>: - 1024: e51ff004 ldr pc, \[pc, #-4\] ; 1028 <__bar2_veneer\+0x4> - 1028: 02003024 .word 0x02003024 +00001024 <__bar4_from_arm>: + 1024: e59fc000 ldr ip, \[pc, #0\] ; 102c <__bar4_from_arm\+0x8> + 1028: e12fff1c bx ip + 102c: 0200302d .word 0x0200302d -0000102c <__bar_from_arm>: - 102c: e59fc000 ldr ip, \[pc, #0\] ; 1034 <__bar_from_arm\+0x8> - 1030: e12fff1c bx ip - 1034: 02003021 .word 0x02003021 +00001030 <__bar3_veneer>: + 1030: e51ff004 ldr pc, \[pc, #-4\] ; 1034 <__bar3_veneer\+0x4> + 1034: 02003028 .word 0x02003028 -00001038 <__bar5_from_arm>: - 1038: e59fc000 ldr ip, \[pc, #0\] ; 1040 <__bar5_from_arm\+0x8> +00001038 <__bar_from_arm>: + 1038: e59fc000 ldr ip, \[pc, #0\] ; 1040 <__bar_from_arm\+0x8> 103c: e12fff1c bx ip - 1040: 0200302f .word 0x0200302f + 1040: 02003021 .word 0x02003021 -00001044 <__bar3_veneer>: - 1044: e51ff004 ldr pc, \[pc, #-4\] ; 1048 <__bar3_veneer\+0x4> - 1048: 02003028 .word 0x02003028 +00001044 <__bar2_veneer>: + 1044: e51ff004 ldr pc, \[pc, #-4\] ; 1048 <__bar2_veneer\+0x4> + 1048: 02003024 .word 0x02003024 ... Disassembly of section .foo: diff --git a/ld/testsuite/ld-arm/farcall-mixed-lib-v4t.d b/ld/testsuite/ld-arm/farcall-mixed-lib-v4t.d index b6729b2..0863e9d 100644 --- a/ld/testsuite/ld-arm/farcall-mixed-lib-v4t.d +++ b/ld/testsuite/ld-arm/farcall-mixed-lib-v4t.d @@ -89,26 +89,26 @@ Disassembly of section .text: ... .* <__real_lib_func3>: - .*: f000 f806 bl 2000380 <__app_func_from_thumb> - .*: f000 f80c bl 2000390 <__app_func_weak_from_thumb> + .*: f000 f80e bl 2000390 <__app_func_from_thumb> + .*: f000 f804 bl 2000380 <__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>: +.* <__app_func_weak_from_thumb>: .*: 4778 bx pc .*: 46c0 nop ; \(mov r8, r8\) - .*: e59fc000 ldr ip, \[pc, #0\] ; 200038c <__app_func_from_thumb\+0xc> + .*: e59fc000 ldr ip, \[pc, #0\] ; 200038c <__app_func_weak_from_thumb\+0xc> .*: e08cf00f add pc, ip, pc - .*: fdffff18 .word 0xfdffff18 + .*: fdffff28 .word 0xfdffff28 -.* <__app_func_weak_from_thumb>: +.* <__app_func_from_thumb>: .*: 4778 bx pc .*: 46c0 nop ; \(mov r8, r8\) - .*: e59fc000 ldr ip, \[pc, #0\] ; 200039c <__app_func_weak_from_thumb\+0xc> + .*: e59fc000 ldr ip, \[pc, #0\] ; 200039c <__app_func_from_thumb\+0xc> .*: e08cf00f add pc, ip, pc - .*: fdffff18 .word 0xfdffff18 + .*: fdffff08 .word 0xfdffff08 .* <lib_func3>: .*: e59fc004 ldr ip, \[pc, #4\] ; 20003ac <lib_func3\+0xc> diff --git a/ld/testsuite/ld-arm/farcall-mixed-lib.d b/ld/testsuite/ld-arm/farcall-mixed-lib.d index 9df3933..2b0b9ac 100644 --- a/ld/testsuite/ld-arm/farcall-mixed-lib.d +++ b/ld/testsuite/ld-arm/farcall-mixed-lib.d @@ -73,20 +73,20 @@ Disassembly of section .text: ... .* <lib_func3>: - .*: f000 e806 blx 2000370 <__app_func_from_thumb> - .*: f000 e80a blx 200037c <__app_func_weak_from_thumb> + .*: f000 e80c blx 200037c <__app_func_from_thumb> + .*: f000 e804 blx 2000370 <__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>: - .*: e59fc000 ldr ip, \[pc, #0\] ; 2000378 <__app_func_from_thumb\+0x8> +.* <__app_func_weak_from_thumb>: + .*: e59fc000 ldr ip, \[pc, #0\] ; 2000378 <__app_func_weak_from_thumb\+0x8> .*: e08ff00c add pc, pc, ip - .*: fdffff28 .word 0xfdffff28 + .*: fdffff34 .word 0xfdffff34 -.* <__app_func_weak_from_thumb>: - .*: e59fc000 ldr ip, \[pc, #0\] ; 2000384 <__app_func_weak_from_thumb\+0x8> +.* <__app_func_from_thumb>: + .*: e59fc000 ldr ip, \[pc, #0\] ; 2000384 <__app_func_from_thumb\+0x8> .*: e08ff00c add pc, pc, ip - .*: fdffff28 .word 0xfdffff28 + .*: fdffff1c .word 0xfdffff1c ... diff --git a/ld/testsuite/ld-arm/ifunc-1.dd b/ld/testsuite/ld-arm/ifunc-1.dd new file mode 100644 index 0000000..de6d813 --- /dev/null +++ b/ld/testsuite/ld-arm/ifunc-1.dd @@ -0,0 +1,139 @@ + +.* + + +Disassembly of section \.iplt: + +00009000 <f3-0xc>: +#------------------------------------------------------------------------------ +#------ f1's .iplt entry +#------------------------------------------------------------------------------ + 9000: e28fc600 add ip, pc, #0 + 9004: e28cca08 add ip, ip, #32768 ; 0x8000 + 9008: e5bcf004 ldr pc, \[ip, #4\]! + +0000900c <f3>: + 900c: e28fc600 add ip, pc, #0 + 9010: e28cca07 add ip, ip, #28672 ; 0x7000 + 9014: e5bcfffc ldr pc, \[ip, #4092\]! ; 0xffc + +00009018 <f2>: + 9018: e28fc600 add ip, pc, #0 + 901c: e28cca07 add ip, ip, #28672 ; 0x7000 + 9020: e5bcfff4 ldr pc, \[ip, #4084\]! ; 0xff4 + +Disassembly of section \.text: + +0000a000 <f1>: + a000: e1a0f00e mov pc, lr + a004: e1a0f00e mov pc, lr + a008: e1a0f00e mov pc, lr + +0000a00c <_start>: + a00c: eb0017fb bl 10000 <foo> + a010: e59f400c ldr r4, \[pc, #12\] ; a024 <_start\+0x18> + a014: e59f400c ldr r4, \[pc, #12\] ; a028 <_start\+0x1c> + a018: e59f400c ldr r4, \[pc, #12\] ; a02c <_start\+0x20> + a01c: e59f400c ldr r4, \[pc, #12\] ; a030 <_start\+0x24> + a020: e59f500c ldr r5, \[pc, #12\] ; a034 <_start\+0x28> +#------------------------------------------------------------------------------ +#------ foo +#------------------------------------------------------------------------------ + a024: 00010000 \.word 0x00010000 +#------------------------------------------------------------------------------ +#------ PC-relative offset of foo +#------------------------------------------------------------------------------ + a028: 00005fd8 \.word 0x00005fd8 +#------------------------------------------------------------------------------ +#------ GP-relative offset of foo +#------------------------------------------------------------------------------ + a02c: fffff000 \.word 0xfffff000 +#------------------------------------------------------------------------------ +#------ .got offset for foo +#------------------------------------------------------------------------------ + a030: 00000020 \.word 0x00000020 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for foo +#------------------------------------------------------------------------------ + a034: 00006fe4 \.word 0x00006fe4 +#------------------------------------------------------------------------------ +#------ f1's .iplt entry +#------------------------------------------------------------------------------ + a038: ebfffbf0 bl 9000 <__irel_end\+0xfe8> + a03c: e59f400c ldr r4, \[pc, #12\] ; a050 <_start\+0x44> + a040: e59f400c ldr r4, \[pc, #12\] ; a054 <_start\+0x48> + a044: e59f400c ldr r4, \[pc, #12\] ; a058 <_start\+0x4c> + a048: e59f400c ldr r4, \[pc, #12\] ; a05c <_start\+0x50> + a04c: e59f500c ldr r5, \[pc, #12\] ; a060 <_start\+0x54> +#------------------------------------------------------------------------------ +#------ f1's .iplt entry +#------------------------------------------------------------------------------ + a050: 00009000 \.word 0x00009000 +#------------------------------------------------------------------------------ +#------ PC-relative offset of f1's .iplt entry +#------------------------------------------------------------------------------ + a054: ffffefac \.word 0xffffefac +#------------------------------------------------------------------------------ +#------ GP-relative offset of f1's .iplt entry +#------------------------------------------------------------------------------ + a058: ffff8000 \.word 0xffff8000 +#------------------------------------------------------------------------------ +#------ .got offset for f1's .iplt entry +#------------------------------------------------------------------------------ + a05c: 0000001c \.word 0x0000001c +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for f1's .iplt entry +#------------------------------------------------------------------------------ + a060: 00006fbc \.word 0x00006fbc + a064: ebfffbeb bl 9018 <f2> + a068: e59f400c ldr r4, \[pc, #12\] ; a07c <_start\+0x70> + a06c: e59f400c ldr r4, \[pc, #12\] ; a080 <_start\+0x74> + a070: e59f400c ldr r4, \[pc, #12\] ; a084 <_start\+0x78> + a074: e59f400c ldr r4, \[pc, #12\] ; a088 <_start\+0x7c> + a078: e59f500c ldr r5, \[pc, #12\] ; a08c <_start\+0x80> +#------------------------------------------------------------------------------ +#------ f2 +#------------------------------------------------------------------------------ + a07c: 00009018 \.word 0x00009018 +#------------------------------------------------------------------------------ +#------ PC-relative offset of f2 +#------------------------------------------------------------------------------ + a080: ffffef98 \.word 0xffffef98 +#------------------------------------------------------------------------------ +#------ GP-relative offset of f2 +#------------------------------------------------------------------------------ + a084: ffff8018 \.word 0xffff8018 +#------------------------------------------------------------------------------ +#------ .got offset for f2 +#------------------------------------------------------------------------------ + a088: 00000028 \.word 0x00000028 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for f2 +#------------------------------------------------------------------------------ + a08c: 00006f9c \.word 0x00006f9c + a090: ebfffbdd bl 900c <f3> + a094: e59f400c ldr r4, \[pc, #12\] ; a0a8 <_start\+0x9c> + a098: e59f400c ldr r4, \[pc, #12\] ; a0ac <_start\+0xa0> + a09c: e59f400c ldr r4, \[pc, #12\] ; a0b0 <_start\+0xa4> + a0a0: e59f400c ldr r4, \[pc, #12\] ; a0b4 <_start\+0xa8> + a0a4: e59f500c ldr r5, \[pc, #12\] ; a0b8 <_start\+0xac> +#------------------------------------------------------------------------------ +#------ f3 +#------------------------------------------------------------------------------ + a0a8: 0000900c \.word 0x0000900c +#------------------------------------------------------------------------------ +#------ PC-relative offset of f3 +#------------------------------------------------------------------------------ + a0ac: ffffef60 \.word 0xffffef60 +#------------------------------------------------------------------------------ +#------ GP-relative offset of f3 +#------------------------------------------------------------------------------ + a0b0: ffff800c \.word 0xffff800c +#------------------------------------------------------------------------------ +#------ .got offset for f3 +#------------------------------------------------------------------------------ + a0b4: 00000024 \.word 0x00000024 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for f3 +#------------------------------------------------------------------------------ + a0b8: 00006f6c \.word 0x00006f6c diff --git a/ld/testsuite/ld-arm/ifunc-1.gd b/ld/testsuite/ld-arm/ifunc-1.gd new file mode 100644 index 0000000..ff51d37 --- /dev/null +++ b/ld/testsuite/ld-arm/ifunc-1.gd @@ -0,0 +1,29 @@ + +.* + +Contents of section \.data: +#------------------------------------------------------------------------------ +#------ 00010000: foo +#------------------------------------------------------------------------------ + 10000 44332211 00800000 18800000 .* +Contents of section \.got: +#------------------------------------------------------------------------------ +#------ 00011000: .got.plt +#------ 00011004: reserved .got.plt entry +#------ 00011008: reserved .got.plt entry +#------ 0001100c: f1's .igot.plt entry [R_ARM_IRELATIVE] +#------------------------------------------------------------------------------ + 11000 00000000 00000000 00000000 00a00000 .* +#------------------------------------------------------------------------------ +#------ 00011010: f3's .igot.plt pointer to 0xa008 [R_ARM_IRELATIVE] +#------ 00011014: f2's .igot.plt pointer to 0xa004 [R_ARM_IRELATIVE] +#------ 00011018: .got entry for foo +#------ 0001101c: .got entry for f1's .iplt entry +#------------------------------------------------------------------------------ + 11010 08a00000 04a00000 00000100 00900000 .* +#------------------------------------------------------------------------------ +#------ 00011020: .got entry for foo +#------ 00011024: .got entry for f3 +#------ 00011028: .got entry for f2 +#------------------------------------------------------------------------------ + 11020 00000100 0c900000 18900000 .* diff --git a/ld/testsuite/ld-arm/ifunc-1.rd b/ld/testsuite/ld-arm/ifunc-1.rd new file mode 100644 index 0000000..75e6d70 --- /dev/null +++ b/ld/testsuite/ld-arm/ifunc-1.rd @@ -0,0 +1,8 @@ + +There is no dynamic section in this file\. + +Relocation section '\.rel\.dyn' at offset 0x8000 contains 3 entries: + Offset Info Type Sym\.Value Sym\. Name +0001100c ......a0 R_ARM_IRELATIVE +00011010 ......a0 R_ARM_IRELATIVE +00011014 ......a0 R_ARM_IRELATIVE diff --git a/ld/testsuite/ld-arm/ifunc-1.s b/ld/testsuite/ld-arm/ifunc-1.s new file mode 100644 index 0000000..7745c54 --- /dev/null +++ b/ld/testsuite/ld-arm/ifunc-1.s @@ -0,0 +1,48 @@ + .macro define,name + .type \name,%gnu_indirect_function +\name: + mov pc,lr + .size \name,.-\name + .endm + + .macro test_relocs,name + bl \name + ldr r4,1f + ldr r4,2f + ldr r4,3f + ldr r4,4f + ldr r5,5f +1: + .word \name +2: + .word \name-. +3: + .word \name(GOTOFF) +4: + .word \name(GOT) +5: + .word \name(GOT_PREL) + .endm + + .global f2 + + .global f3 + .hidden f3 + + define f1 + define f2 + define f3 + + .globl _start +_start: + test_relocs foo + test_relocs f1 + test_relocs f2 + test_relocs f3 + .size _start,.-_start + + .data +foo: + .word 0x11223344 + .word __irel_start + .word __irel_end diff --git a/ld/testsuite/ld-arm/ifunc-10.dd b/ld/testsuite/ld-arm/ifunc-10.dd new file mode 100644 index 0000000..5f876fb --- /dev/null +++ b/ld/testsuite/ld-arm/ifunc-10.dd @@ -0,0 +1,951 @@ + +.* + + +Disassembly of section \.plt: + +00009000 <\.plt>: + 9000: e52de004 push {lr} ; \(str lr, \[sp, #-4\]!\) + 9004: e59fe004 ldr lr, \[pc, #4\] ; 9010 <atf3-0x110> + 9008: e08fe00e add lr, pc, lr + 900c: e5bef008 ldr pc, \[lr, #8\]! +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got.plt +#------------------------------------------------------------------------------ + 9010: 00007ff0 \.word 0x00007ff0 +#------------------------------------------------------------------------------ +#------ thumb entry to atf2's .plt entry +#------------------------------------------------------------------------------ + 9014: 4778 bx pc + 9016: 46c0 nop ; \(mov r8, r8\) +#------------------------------------------------------------------------------ +#------ atf2's .plt entry +#------------------------------------------------------------------------------ + 9018: e28fc600 add ip, pc, #0 + 901c: e28cca07 add ip, ip, #28672 ; 0x7000 + 9020: e5bcffec ldr pc, \[ip, #4076\]! ; 0xfec +#------------------------------------------------------------------------------ +#------ aaf4's .plt entry +#------------------------------------------------------------------------------ + 9024: e28fc600 add ip, pc, #0 + 9028: e28cca07 add ip, ip, #28672 ; 0x7000 + 902c: e5bcffe4 ldr pc, \[ip, #4068\]! ; 0xfe4 +#------------------------------------------------------------------------------ +#------ thumb entry to ttf2's .plt entry +#------------------------------------------------------------------------------ + 9030: 4778 bx pc + 9032: 46c0 nop ; \(mov r8, r8\) +#------------------------------------------------------------------------------ +#------ ttf2's .plt entry +#------------------------------------------------------------------------------ + 9034: e28fc600 add ip, pc, #0 + 9038: e28cca07 add ip, ip, #28672 ; 0x7000 + 903c: e5bcffd8 ldr pc, \[ip, #4056\]! ; 0xfd8 +#------------------------------------------------------------------------------ +#------ thumb entry to tbf2's .plt entry +#------------------------------------------------------------------------------ + 9040: 4778 bx pc + 9042: 46c0 nop ; \(mov r8, r8\) +#------------------------------------------------------------------------------ +#------ tbf2's .plt entry +#------------------------------------------------------------------------------ + 9044: e28fc600 add ip, pc, #0 + 9048: e28cca07 add ip, ip, #28672 ; 0x7000 + 904c: e5bcffcc ldr pc, \[ip, #4044\]! ; 0xfcc +#------------------------------------------------------------------------------ +#------ taf2's .plt entry +#------------------------------------------------------------------------------ + 9050: e28fc600 add ip, pc, #0 + 9054: e28cca07 add ip, ip, #28672 ; 0x7000 + 9058: e5bcffc4 ldr pc, \[ip, #4036\]! ; 0xfc4 +#------------------------------------------------------------------------------ +#------ aaf2's .plt entry +#------------------------------------------------------------------------------ + 905c: e28fc600 add ip, pc, #0 + 9060: e28cca07 add ip, ip, #28672 ; 0x7000 + 9064: e5bcffbc ldr pc, \[ip, #4028\]! ; 0xfbc +#------------------------------------------------------------------------------ +#------ thumb entry to abf4's .plt entry +#------------------------------------------------------------------------------ + 9068: 4778 bx pc + 906a: 46c0 nop ; \(mov r8, r8\) +#------------------------------------------------------------------------------ +#------ abf4's .plt entry +#------------------------------------------------------------------------------ + 906c: e28fc600 add ip, pc, #0 + 9070: e28cca07 add ip, ip, #28672 ; 0x7000 + 9074: e5bcffb0 ldr pc, \[ip, #4016\]! ; 0xfb0 +#------------------------------------------------------------------------------ +#------ thumb entry to tbf4's .plt entry +#------------------------------------------------------------------------------ + 9078: 4778 bx pc + 907a: 46c0 nop ; \(mov r8, r8\) +#------------------------------------------------------------------------------ +#------ tbf4's .plt entry +#------------------------------------------------------------------------------ + 907c: e28fc600 add ip, pc, #0 + 9080: e28cca07 add ip, ip, #28672 ; 0x7000 + 9084: e5bcffa4 ldr pc, \[ip, #4004\]! ; 0xfa4 +#------------------------------------------------------------------------------ +#------ thumb entry to ttf4's .plt entry +#------------------------------------------------------------------------------ + 9088: 4778 bx pc + 908a: 46c0 nop ; \(mov r8, r8\) +#------------------------------------------------------------------------------ +#------ ttf4's .plt entry +#------------------------------------------------------------------------------ + 908c: e28fc600 add ip, pc, #0 + 9090: e28cca07 add ip, ip, #28672 ; 0x7000 + 9094: e5bcff98 ldr pc, \[ip, #3992\]! ; 0xf98 +#------------------------------------------------------------------------------ +#------ thumb entry to atf4's .plt entry +#------------------------------------------------------------------------------ + 9098: 4778 bx pc + 909a: 46c0 nop ; \(mov r8, r8\) +#------------------------------------------------------------------------------ +#------ atf4's .plt entry +#------------------------------------------------------------------------------ + 909c: e28fc600 add ip, pc, #0 + 90a0: e28cca07 add ip, ip, #28672 ; 0x7000 + 90a4: e5bcff8c ldr pc, \[ip, #3980\]! ; 0xf8c +#------------------------------------------------------------------------------ +#------ taf4's .plt entry +#------------------------------------------------------------------------------ + 90a8: e28fc600 add ip, pc, #0 + 90ac: e28cca07 add ip, ip, #28672 ; 0x7000 + 90b0: e5bcff84 ldr pc, \[ip, #3972\]! ; 0xf84 +#------------------------------------------------------------------------------ +#------ thumb entry to abf2's .plt entry +#------------------------------------------------------------------------------ + 90b4: 4778 bx pc + 90b6: 46c0 nop ; \(mov r8, r8\) +#------------------------------------------------------------------------------ +#------ abf2's .plt entry +#------------------------------------------------------------------------------ + 90b8: e28fc600 add ip, pc, #0 + 90bc: e28cca07 add ip, ip, #28672 ; 0x7000 + 90c0: e5bcff78 ldr pc, \[ip, #3960\]! ; 0xf78 + +Disassembly of section \.iplt: + +000090c4 <atf3-0x5c>: +#------------------------------------------------------------------------------ +#------ aaf1's .iplt entry +#------------------------------------------------------------------------------ + 90c4: e28fc600 add ip, pc, #0 + 90c8: e28cca07 add ip, ip, #28672 ; 0x7000 + 90cc: e5bcff70 ldr pc, \[ip, #3952\]! ; 0xf70 +#------------------------------------------------------------------------------ +#------ thumb entry to atf1's .iplt entry +#------------------------------------------------------------------------------ + 90d0: 4778 bx pc + 90d2: 46c0 nop ; \(mov r8, r8\) +#------------------------------------------------------------------------------ +#------ atf1's .iplt entry +#------------------------------------------------------------------------------ + 90d4: e28fc600 add ip, pc, #0 + 90d8: e28cca07 add ip, ip, #28672 ; 0x7000 + 90dc: e5bcff64 ldr pc, \[ip, #3940\]! ; 0xf64 +#------------------------------------------------------------------------------ +#------ thumb entry to abf1's .iplt entry +#------------------------------------------------------------------------------ + 90e0: 4778 bx pc + 90e2: 46c0 nop ; \(mov r8, r8\) +#------------------------------------------------------------------------------ +#------ abf1's .iplt entry +#------------------------------------------------------------------------------ + 90e4: e28fc600 add ip, pc, #0 + 90e8: e28cca07 add ip, ip, #28672 ; 0x7000 + 90ec: e5bcff58 ldr pc, \[ip, #3928\]! ; 0xf58 +#------------------------------------------------------------------------------ +#------ taf1's .iplt entry +#------------------------------------------------------------------------------ + 90f0: e28fc600 add ip, pc, #0 + 90f4: e28cca07 add ip, ip, #28672 ; 0x7000 + 90f8: e5bcff50 ldr pc, \[ip, #3920\]! ; 0xf50 +#------------------------------------------------------------------------------ +#------ thumb entry to ttf1's .iplt entry +#------------------------------------------------------------------------------ + 90fc: 4778 bx pc + 90fe: 46c0 nop ; \(mov r8, r8\) +#------------------------------------------------------------------------------ +#------ ttf1's .iplt entry +#------------------------------------------------------------------------------ + 9100: e28fc600 add ip, pc, #0 + 9104: e28cca07 add ip, ip, #28672 ; 0x7000 + 9108: e5bcff44 ldr pc, \[ip, #3908\]! ; 0xf44 +#------------------------------------------------------------------------------ +#------ thumb entry to tbf1's .iplt entry +#------------------------------------------------------------------------------ + 910c: 4778 bx pc + 910e: 46c0 nop ; \(mov r8, r8\) +#------------------------------------------------------------------------------ +#------ tbf1's .iplt entry +#------------------------------------------------------------------------------ + 9110: e28fc600 add ip, pc, #0 + 9114: e28cca07 add ip, ip, #28672 ; 0x7000 + 9118: e5bcff38 ldr pc, \[ip, #3896\]! ; 0xf38 +#------------------------------------------------------------------------------ +#------ thumb entry to atf3 +#------------------------------------------------------------------------------ + 911c: 4778 bx pc + 911e: 46c0 nop ; \(mov r8, r8\) + +00009120 <atf3>: + 9120: e28fc600 add ip, pc, #0 + 9124: e28cca07 add ip, ip, #28672 ; 0x7000 + 9128: e5bcff2c ldr pc, \[ip, #3884\]! ; 0xf2c +#------------------------------------------------------------------------------ +#------ thumb entry to abf3 +#------------------------------------------------------------------------------ + 912c: 4778 bx pc + 912e: 46c0 nop ; \(mov r8, r8\) + +00009130 <abf3>: + 9130: e28fc600 add ip, pc, #0 + 9134: e28cca07 add ip, ip, #28672 ; 0x7000 + 9138: e5bcff20 ldr pc, \[ip, #3872\]! ; 0xf20 +#------------------------------------------------------------------------------ +#------ thumb entry to ttf3 +#------------------------------------------------------------------------------ + 913c: 4778 bx pc + 913e: 46c0 nop ; \(mov r8, r8\) + +00009140 <ttf3>: + 9140: e28fc600 add ip, pc, #0 + 9144: e28cca07 add ip, ip, #28672 ; 0x7000 + 9148: e5bcff14 ldr pc, \[ip, #3860\]! ; 0xf14 +#------------------------------------------------------------------------------ +#------ thumb entry to tbf3 +#------------------------------------------------------------------------------ + 914c: 4778 bx pc + 914e: 46c0 nop ; \(mov r8, r8\) + +00009150 <tbf3>: + 9150: e28fc600 add ip, pc, #0 + 9154: e28cca07 add ip, ip, #28672 ; 0x7000 + 9158: e5bcff08 ldr pc, \[ip, #3848\]! ; 0xf08 + +0000915c <taf3>: + 915c: e28fc600 add ip, pc, #0 + 9160: e28cca07 add ip, ip, #28672 ; 0x7000 + 9164: e5bcff00 ldr pc, \[ip, #3840\]! ; 0xf00 + +00009168 <aaf3>: + 9168: e28fc600 add ip, pc, #0 + 916c: e28cca07 add ip, ip, #28672 ; 0x7000 + 9170: e5bcfef8 ldr pc, \[ip, #3832\]! ; 0xef8 + +Disassembly of section \.text: + +0000a000 <aaf1>: + a000: e1a0f00e mov pc, lr + +0000a004 <atf1>: + a004: e1a0f00e mov pc, lr + +0000a008 <abf1>: + a008: e1a0f00e mov pc, lr + +0000a00c <taf1>: + a00c: 46f7 mov pc, lr + +0000a00e <ttf1>: + a00e: 46f7 mov pc, lr + +0000a010 <tbf1>: + a010: 46f7 mov pc, lr + a012: 0000 movs r0, r0 + a014: e1a0f00e mov pc, lr + a018: e1a0f00e mov pc, lr + a01c: e1a0f00e mov pc, lr + a020: 46f7 mov pc, lr + a022: 46f7 mov pc, lr + a024: 46f7 mov pc, lr + \.\.\. + +0000a028 <_start>: + a028: eb0017f4 bl 10000 <foo> + a02c: ea0017f3 b 10000 <foo> + a030: 0a0017f2 beq 10000 <foo> + a034: e59f4000 ldr r4, \[pc, #0\] ; a03c <_start\+0x14> + a038: e59f4000 ldr r4, \[pc, #0\] ; a040 <_start\+0x18> +#------------------------------------------------------------------------------ +#------ .got offset for foo +#------------------------------------------------------------------------------ + a03c: 00000088 \.word 0x00000088 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for foo +#------------------------------------------------------------------------------ + a040: 0000702c \.word 0x0000702c +#------------------------------------------------------------------------------ +#------ aaf1's .iplt entry +#------------------------------------------------------------------------------ + a044: ebfffc1e bl 90c4 <atf3-0x5c> +#------------------------------------------------------------------------------ +#------ aaf1's .iplt entry +#------------------------------------------------------------------------------ + a048: eafffc1d b 90c4 <atf3-0x5c> +#------------------------------------------------------------------------------ +#------ aaf1's .iplt entry +#------------------------------------------------------------------------------ + a04c: 0afffc1c beq 90c4 <atf3-0x5c> + a050: e59f4000 ldr r4, \[pc, #0\] ; a058 <_start\+0x30> + a054: e59f4000 ldr r4, \[pc, #0\] ; a05c <_start\+0x34> +#------------------------------------------------------------------------------ +#------ .got offset for aaf1's .iplt entry +#------------------------------------------------------------------------------ + a058: 00000070 \.word 0x00000070 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for aaf1's .iplt entry +#------------------------------------------------------------------------------ + a05c: 00007014 \.word 0x00007014 +#------------------------------------------------------------------------------ +#------ taf1's .iplt entry +#------------------------------------------------------------------------------ + a060: ebfffc22 bl 90f0 <atf3-0x30> +#------------------------------------------------------------------------------ +#------ taf1's .iplt entry +#------------------------------------------------------------------------------ + a064: eafffc21 b 90f0 <atf3-0x30> +#------------------------------------------------------------------------------ +#------ taf1's .iplt entry +#------------------------------------------------------------------------------ + a068: 0afffc20 beq 90f0 <atf3-0x30> + a06c: e59f4000 ldr r4, \[pc, #0\] ; a074 <_start\+0x4c> + a070: e59f4000 ldr r4, \[pc, #0\] ; a078 <_start\+0x50> +#------------------------------------------------------------------------------ +#------ .got offset for taf1's .iplt entry +#------------------------------------------------------------------------------ + a074: 0000007c \.word 0x0000007c +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for taf1's .iplt entry +#------------------------------------------------------------------------------ + a078: 00007004 \.word 0x00007004 +#------------------------------------------------------------------------------ +#------ abf1's .iplt entry +#------------------------------------------------------------------------------ + a07c: ebfffc18 bl 90e4 <atf3-0x3c> +#------------------------------------------------------------------------------ +#------ abf1's .iplt entry +#------------------------------------------------------------------------------ + a080: eafffc17 b 90e4 <atf3-0x3c> +#------------------------------------------------------------------------------ +#------ abf1's .iplt entry +#------------------------------------------------------------------------------ + a084: 0afffc16 beq 90e4 <atf3-0x3c> + a088: e59f4000 ldr r4, \[pc, #0\] ; a090 <_start\+0x68> + a08c: e59f4000 ldr r4, \[pc, #0\] ; a094 <_start\+0x6c> +#------------------------------------------------------------------------------ +#------ .got offset for abf1's .iplt entry +#------------------------------------------------------------------------------ + a090: 00000078 \.word 0x00000078 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for abf1's .iplt entry +#------------------------------------------------------------------------------ + a094: 00006fe4 \.word 0x00006fe4 +#------------------------------------------------------------------------------ +#------ tbf1's .iplt entry +#------------------------------------------------------------------------------ + a098: ebfffc1c bl 9110 <atf3-0x10> +#------------------------------------------------------------------------------ +#------ tbf1's .iplt entry +#------------------------------------------------------------------------------ + a09c: eafffc1b b 9110 <atf3-0x10> +#------------------------------------------------------------------------------ +#------ tbf1's .iplt entry +#------------------------------------------------------------------------------ + a0a0: 0afffc1a beq 9110 <atf3-0x10> + a0a4: e59f4000 ldr r4, \[pc, #0\] ; a0ac <_start\+0x84> + a0a8: e59f4000 ldr r4, \[pc, #0\] ; a0b0 <_start\+0x88> +#------------------------------------------------------------------------------ +#------ .got offset for tbf1's .iplt entry +#------------------------------------------------------------------------------ + a0ac: 00000084 \.word 0x00000084 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for tbf1's .iplt entry +#------------------------------------------------------------------------------ + a0b0: 00006fd4 \.word 0x00006fd4 +#------------------------------------------------------------------------------ +#------ aaf2's .plt entry +#------------------------------------------------------------------------------ + a0b4: ebfffbe8 bl 905c <atf3-0xc4> +#------------------------------------------------------------------------------ +#------ aaf2's .plt entry +#------------------------------------------------------------------------------ + a0b8: eafffbe7 b 905c <atf3-0xc4> +#------------------------------------------------------------------------------ +#------ aaf2's .plt entry +#------------------------------------------------------------------------------ + a0bc: 0afffbe6 beq 905c <atf3-0xc4> + a0c0: e59f4000 ldr r4, \[pc, #0\] ; a0c8 <_start\+0xa0> + a0c4: e59f4000 ldr r4, \[pc, #0\] ; a0cc <_start\+0xa4> +#------------------------------------------------------------------------------ +#------ .got offset for aaf2 +#------------------------------------------------------------------------------ + a0c8: 000000a8 \.word 0x000000a8 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for aaf2 +#------------------------------------------------------------------------------ + a0cc: 00006fdc \.word 0x00006fdc +#------------------------------------------------------------------------------ +#------ taf2's .plt entry +#------------------------------------------------------------------------------ + a0d0: ebfffbde bl 9050 <atf3-0xd0> +#------------------------------------------------------------------------------ +#------ taf2's .plt entry +#------------------------------------------------------------------------------ + a0d4: eafffbdd b 9050 <atf3-0xd0> +#------------------------------------------------------------------------------ +#------ taf2's .plt entry +#------------------------------------------------------------------------------ + a0d8: 0afffbdc beq 9050 <atf3-0xd0> + a0dc: e59f4000 ldr r4, \[pc, #0\] ; a0e4 <_start\+0xbc> + a0e0: e59f4000 ldr r4, \[pc, #0\] ; a0e8 <_start\+0xc0> +#------------------------------------------------------------------------------ +#------ .got offset for taf2 +#------------------------------------------------------------------------------ + a0e4: 000000a4 \.word 0x000000a4 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for taf2 +#------------------------------------------------------------------------------ + a0e8: 00006fbc \.word 0x00006fbc +#------------------------------------------------------------------------------ +#------ abf2's .plt entry +#------------------------------------------------------------------------------ + a0ec: ebfffbf1 bl 90b8 <atf3-0x68> +#------------------------------------------------------------------------------ +#------ abf2's .plt entry +#------------------------------------------------------------------------------ + a0f0: eafffbf0 b 90b8 <atf3-0x68> +#------------------------------------------------------------------------------ +#------ abf2's .plt entry +#------------------------------------------------------------------------------ + a0f4: 0afffbef beq 90b8 <atf3-0x68> + a0f8: e59f4000 ldr r4, \[pc, #0\] ; a100 <_start\+0xd8> + a0fc: e59f4000 ldr r4, \[pc, #0\] ; a104 <_start\+0xdc> +#------------------------------------------------------------------------------ +#------ .got offset for abf2 +#------------------------------------------------------------------------------ + a100: 000000d0 \.word 0x000000d0 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for abf2 +#------------------------------------------------------------------------------ + a104: 00006fcc \.word 0x00006fcc +#------------------------------------------------------------------------------ +#------ tbf2's .plt entry +#------------------------------------------------------------------------------ + a108: ebfffbcd bl 9044 <atf3-0xdc> +#------------------------------------------------------------------------------ +#------ tbf2's .plt entry +#------------------------------------------------------------------------------ + a10c: eafffbcc b 9044 <atf3-0xdc> +#------------------------------------------------------------------------------ +#------ tbf2's .plt entry +#------------------------------------------------------------------------------ + a110: 0afffbcb beq 9044 <atf3-0xdc> + a114: e59f4000 ldr r4, \[pc, #0\] ; a11c <_start\+0xf4> + a118: e59f4000 ldr r4, \[pc, #0\] ; a120 <_start\+0xf8> +#------------------------------------------------------------------------------ +#------ .got offset for tbf2 +#------------------------------------------------------------------------------ + a11c: 00000098 \.word 0x00000098 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for tbf2 +#------------------------------------------------------------------------------ + a120: 00006f78 \.word 0x00006f78 + a124: ebfffc0f bl 9168 <aaf3> + a128: eafffc0e b 9168 <aaf3> + a12c: 0afffc0d beq 9168 <aaf3> + a130: e59f4000 ldr r4, \[pc, #0\] ; a138 <_start\+0x110> + a134: e59f4000 ldr r4, \[pc, #0\] ; a13c <_start\+0x114> +#------------------------------------------------------------------------------ +#------ .got offset for aaf3 +#------------------------------------------------------------------------------ + a138: 000000c4 \.word 0x000000c4 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for aaf3 +#------------------------------------------------------------------------------ + a13c: 00006f88 \.word 0x00006f88 + a140: ebfffc05 bl 915c <taf3> + a144: eafffc04 b 915c <taf3> + a148: 0afffc03 beq 915c <taf3> + a14c: e59f4000 ldr r4, \[pc, #0\] ; a154 <_start\+0x12c> + a150: e59f4000 ldr r4, \[pc, #0\] ; a158 <_start\+0x130> +#------------------------------------------------------------------------------ +#------ .got offset for taf3 +#------------------------------------------------------------------------------ + a154: 000000b4 \.word 0x000000b4 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for taf3 +#------------------------------------------------------------------------------ + a158: 00006f5c \.word 0x00006f5c + a15c: ebfffbf3 bl 9130 <abf3> + a160: eafffbf2 b 9130 <abf3> + a164: 0afffbf1 beq 9130 <abf3> + a168: e59f4000 ldr r4, \[pc, #0\] ; a170 <_start\+0x148> + a16c: e59f4000 ldr r4, \[pc, #0\] ; a174 <_start\+0x14c> +#------------------------------------------------------------------------------ +#------ .got offset for abf3 +#------------------------------------------------------------------------------ + a170: 000000a0 \.word 0x000000a0 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for abf3 +#------------------------------------------------------------------------------ + a174: 00006f2c \.word 0x00006f2c + a178: ebfffbf4 bl 9150 <tbf3> + a17c: eafffbf3 b 9150 <tbf3> + a180: 0afffbf2 beq 9150 <tbf3> + a184: e59f4000 ldr r4, \[pc, #0\] ; a18c <_start\+0x164> + a188: e59f4000 ldr r4, \[pc, #0\] ; a190 <_start\+0x168> +#------------------------------------------------------------------------------ +#------ .got offset for tbf3 +#------------------------------------------------------------------------------ + a18c: 000000b0 \.word 0x000000b0 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for tbf3 +#------------------------------------------------------------------------------ + a190: 00006f20 \.word 0x00006f20 +#------------------------------------------------------------------------------ +#------ aaf4's .plt entry +#------------------------------------------------------------------------------ + a194: ebfffba2 bl 9024 <atf3-0xfc> +#------------------------------------------------------------------------------ +#------ aaf4's .plt entry +#------------------------------------------------------------------------------ + a198: eafffba1 b 9024 <atf3-0xfc> +#------------------------------------------------------------------------------ +#------ aaf4's .plt entry +#------------------------------------------------------------------------------ + a19c: 0afffba0 beq 9024 <atf3-0xfc> + a1a0: e59f4000 ldr r4, \[pc, #0\] ; a1a8 <_start\+0x180> + a1a4: e59f4000 ldr r4, \[pc, #0\] ; a1ac <_start\+0x184> +#------------------------------------------------------------------------------ +#------ .got offset for aaf4 +#------------------------------------------------------------------------------ + a1a8: 00000090 \.word 0x00000090 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for aaf4 +#------------------------------------------------------------------------------ + a1ac: 00006ee4 \.word 0x00006ee4 +#------------------------------------------------------------------------------ +#------ taf4's .plt entry +#------------------------------------------------------------------------------ + a1b0: ebfffbbc bl 90a8 <atf3-0x78> +#------------------------------------------------------------------------------ +#------ taf4's .plt entry +#------------------------------------------------------------------------------ + a1b4: eafffbbb b 90a8 <atf3-0x78> +#------------------------------------------------------------------------------ +#------ taf4's .plt entry +#------------------------------------------------------------------------------ + a1b8: 0afffbba beq 90a8 <atf3-0x78> + a1bc: e59f4000 ldr r4, \[pc, #0\] ; a1c4 <_start\+0x19c> + a1c0: e59f4000 ldr r4, \[pc, #0\] ; a1c8 <_start\+0x1a0> +#------------------------------------------------------------------------------ +#------ .got offset for taf4 +#------------------------------------------------------------------------------ + a1c4: 000000cc \.word 0x000000cc +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for taf4 +#------------------------------------------------------------------------------ + a1c8: 00006f04 \.word 0x00006f04 +#------------------------------------------------------------------------------ +#------ abf4's .plt entry +#------------------------------------------------------------------------------ + a1cc: ebfffba6 bl 906c <atf3-0xb4> +#------------------------------------------------------------------------------ +#------ abf4's .plt entry +#------------------------------------------------------------------------------ + a1d0: eafffba5 b 906c <atf3-0xb4> +#------------------------------------------------------------------------------ +#------ abf4's .plt entry +#------------------------------------------------------------------------------ + a1d4: 0afffba4 beq 906c <atf3-0xb4> + a1d8: e59f4000 ldr r4, \[pc, #0\] ; a1e0 <_start\+0x1b8> + a1dc: e59f4000 ldr r4, \[pc, #0\] ; a1e4 <_start\+0x1bc> +#------------------------------------------------------------------------------ +#------ .got offset for abf4 +#------------------------------------------------------------------------------ + a1e0: 000000b8 \.word 0x000000b8 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for abf4 +#------------------------------------------------------------------------------ + a1e4: 00006ed4 \.word 0x00006ed4 +#------------------------------------------------------------------------------ +#------ tbf4's .plt entry +#------------------------------------------------------------------------------ + a1e8: ebfffba3 bl 907c <atf3-0xa4> +#------------------------------------------------------------------------------ +#------ tbf4's .plt entry +#------------------------------------------------------------------------------ + a1ec: eafffba2 b 907c <atf3-0xa4> +#------------------------------------------------------------------------------ +#------ tbf4's .plt entry +#------------------------------------------------------------------------------ + a1f0: 0afffba1 beq 907c <atf3-0xa4> + a1f4: e59f4000 ldr r4, \[pc, #0\] ; a1fc <_start\+0x1d4> + a1f8: e59f4000 ldr r4, \[pc, #0\] ; a200 <_start\+0x1d8> +#------------------------------------------------------------------------------ +#------ .got offset for tbf4 +#------------------------------------------------------------------------------ + a1fc: 000000bc \.word 0x000000bc +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for tbf4 +#------------------------------------------------------------------------------ + a200: 00006ebc \.word 0x00006ebc + +0000a204 <_thumb>: + a204: f005 fefc bl 10000 <foo> + a208: f005 befa b\.w 10000 <foo> + a20c: f005 86f8 beq\.w 10000 <foo> + a210: 4c00 ldr r4, \[pc, #0\] ; \(a214 <_thumb\+0x10>\) + a212: 4c01 ldr r4, \[pc, #4\] ; \(a218 <_thumb\+0x14>\) +#------------------------------------------------------------------------------ +#------ .got offset for foo +#------------------------------------------------------------------------------ + a214: 00000088 \.word 0x00000088 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for foo +#------------------------------------------------------------------------------ + a218: 00006e54 \.word 0x00006e54 +#------------------------------------------------------------------------------ +#------ atf1's .iplt entry +#------------------------------------------------------------------------------ + a21c: f7fe ef5a blx 90d4 <atf3-0x4c> +#------------------------------------------------------------------------------ +#------ thumb entry to atf1's .iplt entry +#------------------------------------------------------------------------------ + a220: f7fe bf56 b\.w 90d0 <atf3-0x50> +#------------------------------------------------------------------------------ +#------ thumb entry to atf1's .iplt entry +#------------------------------------------------------------------------------ + a224: f43e af54 beq\.w 90d0 <atf3-0x50> + a228: 4c00 ldr r4, \[pc, #0\] ; \(a22c <_thumb\+0x28>\) + a22a: 4c01 ldr r4, \[pc, #4\] ; \(a230 <_thumb\+0x2c>\) +#------------------------------------------------------------------------------ +#------ .got offset for atf1's .iplt entry +#------------------------------------------------------------------------------ + a22c: 00000074 \.word 0x00000074 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for atf1's .iplt entry +#------------------------------------------------------------------------------ + a230: 00006e44 \.word 0x00006e44 +#------------------------------------------------------------------------------ +#------ ttf1's .iplt entry +#------------------------------------------------------------------------------ + a234: f7fe ef64 blx 9100 <atf3-0x20> +#------------------------------------------------------------------------------ +#------ thumb entry to ttf1's .iplt entry +#------------------------------------------------------------------------------ + a238: f7fe bf60 b\.w 90fc <atf3-0x24> +#------------------------------------------------------------------------------ +#------ thumb entry to ttf1's .iplt entry +#------------------------------------------------------------------------------ + a23c: f43e af5e beq\.w 90fc <atf3-0x24> + a240: 4c00 ldr r4, \[pc, #0\] ; \(a244 <_thumb\+0x40>\) + a242: 4c01 ldr r4, \[pc, #4\] ; \(a248 <_thumb\+0x44>\) +#------------------------------------------------------------------------------ +#------ .got offset for ttf1's .iplt entry +#------------------------------------------------------------------------------ + a244: 00000080 \.word 0x00000080 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for ttf1's .iplt entry +#------------------------------------------------------------------------------ + a248: 00006e38 \.word 0x00006e38 +#------------------------------------------------------------------------------ +#------ abf1's .iplt entry +#------------------------------------------------------------------------------ + a24c: f7fe ef4a blx 90e4 <atf3-0x3c> +#------------------------------------------------------------------------------ +#------ thumb entry to abf1's .iplt entry +#------------------------------------------------------------------------------ + a250: f7fe bf46 b\.w 90e0 <atf3-0x40> +#------------------------------------------------------------------------------ +#------ thumb entry to abf1's .iplt entry +#------------------------------------------------------------------------------ + a254: f43e af44 beq\.w 90e0 <atf3-0x40> + a258: 4c00 ldr r4, \[pc, #0\] ; \(a25c <_thumb\+0x58>\) + a25a: 4c01 ldr r4, \[pc, #4\] ; \(a260 <_thumb\+0x5c>\) +#------------------------------------------------------------------------------ +#------ .got offset for abf1's .iplt entry +#------------------------------------------------------------------------------ + a25c: 00000078 \.word 0x00000078 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for abf1's .iplt entry +#------------------------------------------------------------------------------ + a260: 00006e18 \.word 0x00006e18 +#------------------------------------------------------------------------------ +#------ tbf1's .iplt entry +#------------------------------------------------------------------------------ + a264: f7fe ef54 blx 9110 <atf3-0x10> +#------------------------------------------------------------------------------ +#------ thumb entry to tbf1's .iplt entry +#------------------------------------------------------------------------------ + a268: f7fe bf50 b\.w 910c <atf3-0x14> +#------------------------------------------------------------------------------ +#------ thumb entry to tbf1's .iplt entry +#------------------------------------------------------------------------------ + a26c: f43e af4e beq\.w 910c <atf3-0x14> + a270: 4c00 ldr r4, \[pc, #0\] ; \(a274 <_thumb\+0x70>\) + a272: 4c01 ldr r4, \[pc, #4\] ; \(a278 <_thumb\+0x74>\) +#------------------------------------------------------------------------------ +#------ .got offset for tbf1's .iplt entry +#------------------------------------------------------------------------------ + a274: 00000084 \.word 0x00000084 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for tbf1's .iplt entry +#------------------------------------------------------------------------------ + a278: 00006e0c \.word 0x00006e0c +#------------------------------------------------------------------------------ +#------ atf2's .plt entry +#------------------------------------------------------------------------------ + a27c: f7fe eecc blx 9018 <atf3-0x108> +#------------------------------------------------------------------------------ +#------ thumb entry to atf2's .plt entry +#------------------------------------------------------------------------------ + a280: f7fe bec8 b\.w 9014 <atf3-0x10c> +#------------------------------------------------------------------------------ +#------ thumb entry to atf2's .plt entry +#------------------------------------------------------------------------------ + a284: f43e aec6 beq\.w 9014 <atf3-0x10c> + a288: 4c00 ldr r4, \[pc, #0\] ; \(a28c <_thumb\+0x88>\) + a28a: 4c01 ldr r4, \[pc, #4\] ; \(a290 <_thumb\+0x8c>\) +#------------------------------------------------------------------------------ +#------ .got offset for atf2 +#------------------------------------------------------------------------------ + a28c: 0000008c \.word 0x0000008c +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for atf2 +#------------------------------------------------------------------------------ + a290: 00006dfc \.word 0x00006dfc +#------------------------------------------------------------------------------ +#------ ttf2's .plt entry +#------------------------------------------------------------------------------ + a294: f7fe eece blx 9034 <atf3-0xec> +#------------------------------------------------------------------------------ +#------ thumb entry to ttf2's .plt entry +#------------------------------------------------------------------------------ + a298: f7fe beca b\.w 9030 <atf3-0xf0> +#------------------------------------------------------------------------------ +#------ thumb entry to ttf2's .plt entry +#------------------------------------------------------------------------------ + a29c: f43e aec8 beq\.w 9030 <atf3-0xf0> + a2a0: 4c00 ldr r4, \[pc, #0\] ; \(a2a4 <_thumb\+0xa0>\) + a2a2: 4c01 ldr r4, \[pc, #4\] ; \(a2a8 <_thumb\+0xa4>\) +#------------------------------------------------------------------------------ +#------ .got offset for ttf2 +#------------------------------------------------------------------------------ + a2a4: 00000094 \.word 0x00000094 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for ttf2 +#------------------------------------------------------------------------------ + a2a8: 00006dec \.word 0x00006dec +#------------------------------------------------------------------------------ +#------ abf2's .plt entry +#------------------------------------------------------------------------------ + a2ac: f7fe ef04 blx 90b8 <atf3-0x68> +#------------------------------------------------------------------------------ +#------ thumb entry to abf2's .plt entry +#------------------------------------------------------------------------------ + a2b0: f7fe bf00 b\.w 90b4 <atf3-0x6c> +#------------------------------------------------------------------------------ +#------ thumb entry to abf2's .plt entry +#------------------------------------------------------------------------------ + a2b4: f43e aefe beq\.w 90b4 <atf3-0x6c> + a2b8: 4c00 ldr r4, \[pc, #0\] ; \(a2bc <_thumb\+0xb8>\) + a2ba: 4c01 ldr r4, \[pc, #4\] ; \(a2c0 <_thumb\+0xbc>\) +#------------------------------------------------------------------------------ +#------ .got offset for abf2 +#------------------------------------------------------------------------------ + a2bc: 000000d0 \.word 0x000000d0 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for abf2 +#------------------------------------------------------------------------------ + a2c0: 00006e10 \.word 0x00006e10 +#------------------------------------------------------------------------------ +#------ tbf2's .plt entry +#------------------------------------------------------------------------------ + a2c4: f7fe eebe blx 9044 <atf3-0xdc> +#------------------------------------------------------------------------------ +#------ thumb entry to tbf2's .plt entry +#------------------------------------------------------------------------------ + a2c8: f7fe beba b\.w 9040 <atf3-0xe0> +#------------------------------------------------------------------------------ +#------ thumb entry to tbf2's .plt entry +#------------------------------------------------------------------------------ + a2cc: f43e aeb8 beq\.w 9040 <atf3-0xe0> + a2d0: 4c00 ldr r4, \[pc, #0\] ; \(a2d4 <_thumb\+0xd0>\) + a2d2: 4c01 ldr r4, \[pc, #4\] ; \(a2d8 <_thumb\+0xd4>\) +#------------------------------------------------------------------------------ +#------ .got offset for tbf2 +#------------------------------------------------------------------------------ + a2d4: 00000098 \.word 0x00000098 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for tbf2 +#------------------------------------------------------------------------------ + a2d8: 00006dc0 \.word 0x00006dc0 + a2dc: f7fe ef20 blx 9120 <atf3> +#------------------------------------------------------------------------------ +#------ thumb entry to atf3 +#------------------------------------------------------------------------------ + a2e0: f7fe bf1c b\.w 911c <atf3-0x4> +#------------------------------------------------------------------------------ +#------ thumb entry to atf3 +#------------------------------------------------------------------------------ + a2e4: f43e af1a beq\.w 911c <atf3-0x4> + a2e8: 4c00 ldr r4, \[pc, #0\] ; \(a2ec <_thumb\+0xe8>\) + a2ea: 4c01 ldr r4, \[pc, #4\] ; \(a2f0 <_thumb\+0xec>\) +#------------------------------------------------------------------------------ +#------ .got offset for atf3 +#------------------------------------------------------------------------------ + a2ec: 0000009c \.word 0x0000009c +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for atf3 +#------------------------------------------------------------------------------ + a2f0: 00006dac \.word 0x00006dac + a2f4: f7fe ef24 blx 9140 <ttf3> +#------------------------------------------------------------------------------ +#------ thumb entry to ttf3 +#------------------------------------------------------------------------------ + a2f8: f7fe bf20 b\.w 913c <abf3\+0xc> +#------------------------------------------------------------------------------ +#------ thumb entry to ttf3 +#------------------------------------------------------------------------------ + a2fc: f43e af1e beq\.w 913c <abf3\+0xc> + a300: 4c00 ldr r4, \[pc, #0\] ; \(a304 <_thumb\+0x100>\) + a302: 4c01 ldr r4, \[pc, #4\] ; \(a308 <_thumb\+0x104>\) +#------------------------------------------------------------------------------ +#------ .got offset for ttf3 +#------------------------------------------------------------------------------ + a304: 000000ac \.word 0x000000ac +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for ttf3 +#------------------------------------------------------------------------------ + a308: 00006da4 \.word 0x00006da4 + a30c: f7fe ef10 blx 9130 <abf3> +#------------------------------------------------------------------------------ +#------ thumb entry to abf3 +#------------------------------------------------------------------------------ + a310: f7fe bf0c b\.w 912c <atf3\+0xc> +#------------------------------------------------------------------------------ +#------ thumb entry to abf3 +#------------------------------------------------------------------------------ + a314: f43e af0a beq\.w 912c <atf3\+0xc> + a318: 4c00 ldr r4, \[pc, #0\] ; \(a31c <_thumb\+0x118>\) + a31a: 4c01 ldr r4, \[pc, #4\] ; \(a320 <_thumb\+0x11c>\) +#------------------------------------------------------------------------------ +#------ .got offset for abf3 +#------------------------------------------------------------------------------ + a31c: 000000a0 \.word 0x000000a0 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for abf3 +#------------------------------------------------------------------------------ + a320: 00006d80 \.word 0x00006d80 + a324: f7fe ef14 blx 9150 <tbf3> +#------------------------------------------------------------------------------ +#------ thumb entry to tbf3 +#------------------------------------------------------------------------------ + a328: f7fe bf10 b\.w 914c <ttf3\+0xc> +#------------------------------------------------------------------------------ +#------ thumb entry to tbf3 +#------------------------------------------------------------------------------ + a32c: f43e af0e beq\.w 914c <ttf3\+0xc> + a330: 4c00 ldr r4, \[pc, #0\] ; \(a334 <_thumb\+0x130>\) + a332: 4c01 ldr r4, \[pc, #4\] ; \(a338 <_thumb\+0x134>\) +#------------------------------------------------------------------------------ +#------ .got offset for tbf3 +#------------------------------------------------------------------------------ + a334: 000000b0 \.word 0x000000b0 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for tbf3 +#------------------------------------------------------------------------------ + a338: 00006d78 \.word 0x00006d78 +#------------------------------------------------------------------------------ +#------ atf4's .plt entry +#------------------------------------------------------------------------------ + a33c: f7fe eeae blx 909c <atf3-0x84> +#------------------------------------------------------------------------------ +#------ thumb entry to atf4's .plt entry +#------------------------------------------------------------------------------ + a340: f7fe beaa b\.w 9098 <atf3-0x88> +#------------------------------------------------------------------------------ +#------ thumb entry to atf4's .plt entry +#------------------------------------------------------------------------------ + a344: f43e aea8 beq\.w 9098 <atf3-0x88> + a348: 4c00 ldr r4, \[pc, #0\] ; \(a34c <_thumb\+0x148>\) + a34a: 4c01 ldr r4, \[pc, #4\] ; \(a350 <_thumb\+0x14c>\) +#------------------------------------------------------------------------------ +#------ .got offset for atf4 +#------------------------------------------------------------------------------ + a34c: 000000c8 \.word 0x000000c8 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for atf4 +#------------------------------------------------------------------------------ + a350: 00006d78 \.word 0x00006d78 +#------------------------------------------------------------------------------ +#------ ttf4's .plt entry +#------------------------------------------------------------------------------ + a354: f7fe ee9a blx 908c <atf3-0x94> +#------------------------------------------------------------------------------ +#------ thumb entry to ttf4's .plt entry +#------------------------------------------------------------------------------ + a358: f7fe be96 b\.w 9088 <atf3-0x98> +#------------------------------------------------------------------------------ +#------ thumb entry to ttf4's .plt entry +#------------------------------------------------------------------------------ + a35c: f43e ae94 beq\.w 9088 <atf3-0x98> + a360: 4c00 ldr r4, \[pc, #0\] ; \(a364 <_thumb\+0x160>\) + a362: 4c01 ldr r4, \[pc, #4\] ; \(a368 <_thumb\+0x164>\) +#------------------------------------------------------------------------------ +#------ .got offset for ttf4 +#------------------------------------------------------------------------------ + a364: 000000c0 \.word 0x000000c0 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for ttf4 +#------------------------------------------------------------------------------ + a368: 00006d58 \.word 0x00006d58 +#------------------------------------------------------------------------------ +#------ abf4's .plt entry +#------------------------------------------------------------------------------ + a36c: f7fe ee7e blx 906c <atf3-0xb4> +#------------------------------------------------------------------------------ +#------ thumb entry to abf4's .plt entry +#------------------------------------------------------------------------------ + a370: f7fe be7a b\.w 9068 <atf3-0xb8> +#------------------------------------------------------------------------------ +#------ thumb entry to abf4's .plt entry +#------------------------------------------------------------------------------ + a374: f43e ae78 beq\.w 9068 <atf3-0xb8> + a378: 4c00 ldr r4, \[pc, #0\] ; \(a37c <_thumb\+0x178>\) + a37a: 4c01 ldr r4, \[pc, #4\] ; \(a380 <_thumb\+0x17c>\) +#------------------------------------------------------------------------------ +#------ .got offset for abf4 +#------------------------------------------------------------------------------ + a37c: 000000b8 \.word 0x000000b8 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for abf4 +#------------------------------------------------------------------------------ + a380: 00006d38 \.word 0x00006d38 +#------------------------------------------------------------------------------ +#------ tbf4's .plt entry +#------------------------------------------------------------------------------ + a384: f7fe ee7a blx 907c <atf3-0xa4> +#------------------------------------------------------------------------------ +#------ thumb entry to tbf4's .plt entry +#------------------------------------------------------------------------------ + a388: f7fe be76 b\.w 9078 <atf3-0xa8> +#------------------------------------------------------------------------------ +#------ thumb entry to tbf4's .plt entry +#------------------------------------------------------------------------------ + a38c: f43e ae74 beq\.w 9078 <atf3-0xa8> + a390: 4c00 ldr r4, \[pc, #0\] ; \(a394 <_thumb\+0x190>\) + a392: 4c01 ldr r4, \[pc, #4\] ; \(a398 <_thumb\+0x194>\) +#------------------------------------------------------------------------------ +#------ .got offset for tbf4 +#------------------------------------------------------------------------------ + a394: 000000bc \.word 0x000000bc +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for tbf4 +#------------------------------------------------------------------------------ + a398: 00006d24 \.word 0x00006d24 diff --git a/ld/testsuite/ld-arm/ifunc-10.gd b/ld/testsuite/ld-arm/ifunc-10.gd new file mode 100644 index 0000000..be3e09f --- /dev/null +++ b/ld/testsuite/ld-arm/ifunc-10.gd @@ -0,0 +1,188 @@ + +.* + +Contents of section \.data: +#------------------------------------------------------------------------------ +#------ 00010000: foo +#------ 00010004: contains aaf1's .iplt entry +#------ 00010008: contains PC-relative offset of aaf1's .iplt entry +#------ 0001000c: contains atf1's .iplt entry +#------------------------------------------------------------------------------ + 10000 44332211 c4900000 bc90ffff d4900000 .* +#------------------------------------------------------------------------------ +#------ 00010010: contains PC-relative offset of atf1's .iplt entry +#------ 00010014: contains abf1's .iplt entry +#------ 00010018: contains PC-relative offset of abf1's .iplt entry +#------ 0001001c: contains taf1's .iplt entry +#------------------------------------------------------------------------------ + 10010 c490ffff e4900000 cc90ffff f0900000 .* +#------------------------------------------------------------------------------ +#------ 00010020: contains PC-relative offset of taf1's .iplt entry +#------ 00010024: contains ttf1's .iplt entry +#------ 00010028: contains PC-relative offset of ttf1's .iplt entry +#------ 0001002c: contains tbf1's .iplt entry +#------------------------------------------------------------------------------ + 10020 d090ffff 00910000 d890ffff 10910000 .* +#------------------------------------------------------------------------------ +#------ 00010030: contains PC-relative offset of tbf1's .iplt entry +#------ 00010034: contains aaf2's .plt entry +#------ 00010038: contains PC-relative offset of aaf2's .plt entry +#------ 0001003c: contains atf2's .plt entry +#------------------------------------------------------------------------------ + 10030 e090ffff 5c900000 2490ffff 18900000 .* +#------------------------------------------------------------------------------ +#------ 00010040: contains PC-relative offset of atf2's .plt entry +#------ 00010044: contains abf2's .plt entry +#------ 00010048: contains PC-relative offset of abf2's .plt entry +#------ 0001004c: contains taf2's .plt entry +#------------------------------------------------------------------------------ + 10040 d88fffff b8900000 7090ffff 50900000 .* +#------------------------------------------------------------------------------ +#------ 00010050: contains PC-relative offset of taf2's .plt entry +#------ 00010054: contains ttf2's .plt entry +#------ 00010058: contains PC-relative offset of ttf2's .plt entry +#------ 0001005c: contains tbf2's .plt entry +#------------------------------------------------------------------------------ + 10050 0090ffff 34900000 dc8fffff 44900000 .* +#------------------------------------------------------------------------------ +#------ 00010060: contains PC-relative offset of tbf2's .plt entry +#------ 00010064: contains aaf3 +#------ 00010068: contains PC-relative offset of aaf3 +#------ 0001006c: contains atf3 +#------------------------------------------------------------------------------ + 10060 e48fffff 68910000 0091ffff 20910000 .* +#------------------------------------------------------------------------------ +#------ 00010070: contains PC-relative offset of atf3 +#------ 00010074: contains abf3 +#------ 00010078: contains PC-relative offset of abf3 +#------ 0001007c: contains taf3 +#------------------------------------------------------------------------------ + 10070 b090ffff 30910000 b890ffff 5c910000 .* +#------------------------------------------------------------------------------ +#------ 00010080: contains PC-relative offset of taf3 +#------ 00010084: contains ttf3 +#------ 00010088: contains PC-relative offset of ttf3 +#------ 0001008c: contains tbf3 +#------------------------------------------------------------------------------ + 10080 dc90ffff 40910000 b890ffff 50910000 .* +#------------------------------------------------------------------------------ +#------ 00010090: contains PC-relative offset of tbf3 +#------ 00010094: contains aaf4's .plt entry +#------ 00010098: contains PC-relative offset of aaf4's .plt entry +#------ 0001009c: contains atf4's .plt entry +#------------------------------------------------------------------------------ + 10090 c090ffff 24900000 8c8fffff 9c900000 .* +#------------------------------------------------------------------------------ +#------ 000100a0: contains PC-relative offset of atf4's .plt entry +#------ 000100a4: contains abf4's .plt entry +#------ 000100a8: contains PC-relative offset of abf4's .plt entry +#------ 000100ac: contains taf4's .plt entry +#------------------------------------------------------------------------------ + 100a0 fc8fffff 6c900000 c48fffff a8900000 .* +#------------------------------------------------------------------------------ +#------ 000100b0: contains PC-relative offset of taf4's .plt entry +#------ 000100b4: contains ttf4's .plt entry +#------ 000100b8: contains PC-relative offset of ttf4's .plt entry +#------ 000100bc: contains tbf4's .plt entry +#------------------------------------------------------------------------------ + 100b0 f88fffff 8c900000 d48fffff 7c900000 .* +#------------------------------------------------------------------------------ +#------ 000100c0: contains PC-relative offset of tbf4's .plt entry +#------------------------------------------------------------------------------ + 100c0 bc8fffff .* +Contents of section \.got: +#------------------------------------------------------------------------------ +#------ 00011000: .got.plt +#------ 00011004: reserved .got.plt entry +#------ 00011008: reserved .got.plt entry +#------ 0001100c: atf2's .got.plt entry [R_ARM_JUMP_SLOT] +#------------------------------------------------------------------------------ + 11000 00200100 00000000 00000000 00900000 .* +#------------------------------------------------------------------------------ +#------ 00011010: aaf4's .got.plt entry [R_ARM_JUMP_SLOT] +#------ 00011014: ttf2's .got.plt entry [R_ARM_JUMP_SLOT] +#------ 00011018: tbf2's .got.plt entry [R_ARM_JUMP_SLOT] +#------ 0001101c: taf2's .got.plt entry [R_ARM_JUMP_SLOT] +#------------------------------------------------------------------------------ + 11010 00900000 00900000 00900000 00900000 .* +#------------------------------------------------------------------------------ +#------ 00011020: aaf2's .got.plt entry [R_ARM_JUMP_SLOT] +#------ 00011024: abf4's .got.plt entry [R_ARM_JUMP_SLOT] +#------ 00011028: tbf4's .got.plt entry [R_ARM_JUMP_SLOT] +#------ 0001102c: ttf4's .got.plt entry [R_ARM_JUMP_SLOT] +#------------------------------------------------------------------------------ + 11020 00900000 00900000 00900000 00900000 .* +#------------------------------------------------------------------------------ +#------ 00011030: atf4's .got.plt entry [R_ARM_JUMP_SLOT] +#------ 00011034: taf4's .got.plt entry [R_ARM_JUMP_SLOT] +#------ 00011038: abf2's .got.plt entry [R_ARM_JUMP_SLOT] +#------ 0001103c: aaf1's .igot.plt entry [R_ARM_IRELATIVE] +#------------------------------------------------------------------------------ + 11030 00900000 00900000 00900000 00a00000 .* +#------------------------------------------------------------------------------ +#------ 00011040: atf1's .igot.plt entry [R_ARM_IRELATIVE] +#------ 00011044: abf1's .igot.plt entry [R_ARM_IRELATIVE] +#------ 00011048: taf1's .igot.plt entry [R_ARM_IRELATIVE] +#------ 0001104c: ttf1's .igot.plt entry [R_ARM_IRELATIVE] +#------------------------------------------------------------------------------ + 11040 04a00000 08a00000 0da00000 0fa00000 .* +#------------------------------------------------------------------------------ +#------ 00011050: tbf1's .igot.plt entry [R_ARM_IRELATIVE] +#------ 00011054: atf3's .igot.plt pointer to 0xa018 [R_ARM_IRELATIVE] +#------ 00011058: abf3's .igot.plt pointer to 0xa01c [R_ARM_IRELATIVE] +#------ 0001105c: ttf3's .igot.plt pointer to 0xa023 [R_ARM_IRELATIVE] +#------------------------------------------------------------------------------ + 11050 11a00000 18a00000 1ca00000 23a00000 .* +#------------------------------------------------------------------------------ +#------ 00011060: tbf3's .igot.plt pointer to 0xa025 [R_ARM_IRELATIVE] +#------ 00011064: taf3's .igot.plt pointer to 0xa021 [R_ARM_IRELATIVE] +#------ 00011068: aaf3's .igot.plt pointer to 0xa014 [R_ARM_IRELATIVE] +#------ 0001106c: .got entry for foo +#------------------------------------------------------------------------------ + 11060 25a00000 21a00000 14a00000 00000100 .* +#------------------------------------------------------------------------------ +#------ 00011070: .got entry for aaf1's .iplt entry +#------ 00011074: .got entry for atf1's .iplt entry +#------ 00011078: .got entry for abf1's .iplt entry +#------ 0001107c: .got entry for taf1's .iplt entry +#------------------------------------------------------------------------------ + 11070 c4900000 d4900000 e4900000 f0900000 .* +#------------------------------------------------------------------------------ +#------ 00011080: .got entry for ttf1's .iplt entry +#------ 00011084: .got entry for tbf1's .iplt entry +#------ 00011088: .got entry for foo +#------ 0001108c: .got entry for atf2 [R_ARM_GLOB_DAT] +#------------------------------------------------------------------------------ + 11080 00910000 10910000 00000100 00000000 .* +#------------------------------------------------------------------------------ +#------ 00011090: .got entry for aaf4 [R_ARM_GLOB_DAT] +#------ 00011094: .got entry for ttf2 [R_ARM_GLOB_DAT] +#------ 00011098: .got entry for tbf2 [R_ARM_GLOB_DAT] +#------ 0001109c: .got entry for atf3 +#------------------------------------------------------------------------------ + 11090 00000000 00000000 00000000 20910000 .* +#------------------------------------------------------------------------------ +#------ 000110a0: .got entry for abf3 +#------ 000110a4: .got entry for taf2 [R_ARM_GLOB_DAT] +#------ 000110a8: .got entry for aaf2 [R_ARM_GLOB_DAT] +#------ 000110ac: .got entry for ttf3 +#------------------------------------------------------------------------------ + 110a0 30910000 00000000 00000000 40910000 .* +#------------------------------------------------------------------------------ +#------ 000110b0: .got entry for tbf3 +#------ 000110b4: .got entry for taf3 +#------ 000110b8: .got entry for abf4 [R_ARM_GLOB_DAT] +#------ 000110bc: .got entry for tbf4 [R_ARM_GLOB_DAT] +#------------------------------------------------------------------------------ + 110b0 50910000 5c910000 00000000 00000000 .* +#------------------------------------------------------------------------------ +#------ 000110c0: .got entry for ttf4 [R_ARM_GLOB_DAT] +#------ 000110c4: .got entry for aaf3 +#------ 000110c8: .got entry for atf4 [R_ARM_GLOB_DAT] +#------ 000110cc: .got entry for taf4 [R_ARM_GLOB_DAT] +#------------------------------------------------------------------------------ + 110c0 00000000 68910000 00000000 00000000 .* +#------------------------------------------------------------------------------ +#------ 000110d0: .got entry for abf2 [R_ARM_GLOB_DAT] +#------------------------------------------------------------------------------ + 110d0 00000000 .* diff --git a/ld/testsuite/ld-arm/ifunc-10.rd b/ld/testsuite/ld-arm/ifunc-10.rd new file mode 100644 index 0000000..8846197 --- /dev/null +++ b/ld/testsuite/ld-arm/ifunc-10.rd @@ -0,0 +1,42 @@ + +Relocation section '\.rel\.dyn' at offset 0x8000 contains 24 entries: + Offset Info Type Sym\.Value Sym\. Name +0001103c ......a0 R_ARM_IRELATIVE +00011040 ......a0 R_ARM_IRELATIVE +00011044 ......a0 R_ARM_IRELATIVE +00011048 ......a0 R_ARM_IRELATIVE +0001104c ......a0 R_ARM_IRELATIVE +00011050 ......a0 R_ARM_IRELATIVE +00011054 ......a0 R_ARM_IRELATIVE +00011058 ......a0 R_ARM_IRELATIVE +0001105c ......a0 R_ARM_IRELATIVE +00011060 ......a0 R_ARM_IRELATIVE +00011064 ......a0 R_ARM_IRELATIVE +00011068 ......a0 R_ARM_IRELATIVE +0001108c ......15 R_ARM_GLOB_DAT 00009018 atf2 +00011090 ......15 R_ARM_GLOB_DAT 00009024 aaf4 +00011094 ......15 R_ARM_GLOB_DAT 00009034 ttf2 +00011098 ......15 R_ARM_GLOB_DAT 00009044 tbf2 +000110a4 ......15 R_ARM_GLOB_DAT 00009050 taf2 +000110a8 ......15 R_ARM_GLOB_DAT 0000905c aaf2 +000110b8 ......15 R_ARM_GLOB_DAT 0000906c abf4 +000110bc ......15 R_ARM_GLOB_DAT 0000907c tbf4 +000110c0 ......15 R_ARM_GLOB_DAT 0000908c ttf4 +000110c8 ......15 R_ARM_GLOB_DAT 0000909c atf4 +000110cc ......15 R_ARM_GLOB_DAT 000090a8 taf4 +000110d0 ......15 R_ARM_GLOB_DAT 000090b8 abf2 + +Relocation section '\.rel\.plt' at offset 0x80c0 contains 12 entries: + Offset Info Type Sym\.Value Sym\. Name +0001100c ......16 R_ARM_JUMP_SLOT 00009018 atf2 +00011010 ......16 R_ARM_JUMP_SLOT 00009024 aaf4 +00011014 ......16 R_ARM_JUMP_SLOT 00009034 ttf2 +00011018 ......16 R_ARM_JUMP_SLOT 00009044 tbf2 +0001101c ......16 R_ARM_JUMP_SLOT 00009050 taf2 +00011020 ......16 R_ARM_JUMP_SLOT 0000905c aaf2 +00011024 ......16 R_ARM_JUMP_SLOT 0000906c abf4 +00011028 ......16 R_ARM_JUMP_SLOT 0000907c tbf4 +0001102c ......16 R_ARM_JUMP_SLOT 0000908c ttf4 +00011030 ......16 R_ARM_JUMP_SLOT 0000909c atf4 +00011034 ......16 R_ARM_JUMP_SLOT 000090a8 taf4 +00011038 ......16 R_ARM_JUMP_SLOT 000090b8 abf2 diff --git a/ld/testsuite/ld-arm/ifunc-10.s b/ld/testsuite/ld-arm/ifunc-10.s new file mode 100644 index 0000000..5b1912f --- /dev/null +++ b/ld/testsuite/ld-arm/ifunc-10.s @@ -0,0 +1,90 @@ + .syntax unified + .arch armv6t2 + + .macro define,name,type + .type \name,%gnu_indirect_function + \type +\name: + mov pc,lr + .size \name,.-\name + .endm + + .macro define2,name + define aa\name,.arm + define at\name,.arm + define ab\name,.arm + define ta\name,.thumb_func + define tt\name,.thumb_func + define tb\name,.thumb_func + .endm + + .macro test_relocs,name,width + bl \name(PLT) + b\width \name + beq\width \name + ldr r4,1f + ldr r4,2f +1: + .word \name(GOT) +2: + .word \name(GOT_PREL) + .endm + + .macro test_relocs2,name,type,width + test_relocs a\type\name,\width + test_relocs t\type\name,\width + test_relocs ab\name,\width + test_relocs tb\name,\width + .endm + + .macro diff,name + .word \name + .word \name-. + .endm + + .macro alldirs,doit,name + \doit aa\name + \doit at\name + \doit ab\name + \doit ta\name + \doit tt\name + \doit tb\name + .endm + + define2 f1 + # f2 provided by ifunc-4.so + define2 f3 + # f4 provided by ifunc-4.so + + alldirs .globl,f3 + alldirs .hidden,f3 + + .globl _start + .type _start,%function + .arm +_start: + test_relocs foo + test_relocs2 f1,a, + test_relocs2 f2,a, + test_relocs2 f3,a, + test_relocs2 f4,a, + .size _start,.-_start + + .globl _thumb + .type _thumb,%function + .thumb_func +_thumb: + test_relocs foo + test_relocs2 f1,t,.w + test_relocs2 f2,t,.w + test_relocs2 f3,t,.w + test_relocs2 f4,t,.w + .size _thumb,.-_thumb + + .data +foo: + .word 0x11223344 + alldirs diff,f1 + alldirs diff,f2 + alldirs diff,f3 + alldirs diff,f4 diff --git a/ld/testsuite/ld-arm/ifunc-11.dd b/ld/testsuite/ld-arm/ifunc-11.dd new file mode 100644 index 0000000..89a7530 --- /dev/null +++ b/ld/testsuite/ld-arm/ifunc-11.dd @@ -0,0 +1,95 @@ + +.* + + +Disassembly of section \.text: + +0000a000 <f1>: + a000: e1a0f00e mov pc, lr + +0000a004 <f2>: + a004: e1a0f00e mov pc, lr + +0000a008 <f3>: + a008: e1a0f00e mov pc, lr + +0000a00c <f1t>: + a00c: 46f7 mov pc, lr + +0000a00e <f2t>: + a00e: 46f7 mov pc, lr + +0000a010 <f3t>: + a010: 46f7 mov pc, lr + +0000a012 <_start>: + a012: f8df 4004 ldr\.w r4, \[pc, #4\] ; a018 <_start\+0x6> + a016: 4c01 ldr r4, \[pc, #4\] ; \(a01c <_start\+0xa>\) +#------------------------------------------------------------------------------ +#------ .got offset for foo +#------------------------------------------------------------------------------ + a018: 00000018 \.word 0x00000018 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for foo +#------------------------------------------------------------------------------ + a01c: 00006ff0 \.word 0x00006ff0 + a020: 4c00 ldr r4, \[pc, #0\] ; \(a024 <_start\+0x12>\) + a022: 4c01 ldr r4, \[pc, #4\] ; \(a028 <_start\+0x16>\) +#------------------------------------------------------------------------------ +#------ .got offset for f1 +#------------------------------------------------------------------------------ + a024: 00000010 \.word 0x00000010 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for f1 +#------------------------------------------------------------------------------ + a028: 00006fe8 \.word 0x00006fe8 + a02c: 4c00 ldr r4, \[pc, #0\] ; \(a030 <_start\+0x1e>\) + a02e: 4c01 ldr r4, \[pc, #4\] ; \(a034 <_start\+0x22>\) +#------------------------------------------------------------------------------ +#------ .got offset for f2 +#------------------------------------------------------------------------------ + a030: 00000024 \.word 0x00000024 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for f2 +#------------------------------------------------------------------------------ + a034: 00006ff0 \.word 0x00006ff0 + a038: 4c00 ldr r4, \[pc, #0\] ; \(a03c <_start\+0x2a>\) + a03a: 4c01 ldr r4, \[pc, #4\] ; \(a040 <_start\+0x2e>\) +#------------------------------------------------------------------------------ +#------ .got offset for f3 +#------------------------------------------------------------------------------ + a03c: 00000020 \.word 0x00000020 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for f3 +#------------------------------------------------------------------------------ + a040: 00006fe0 \.word 0x00006fe0 + a044: 4c00 ldr r4, \[pc, #0\] ; \(a048 <_start\+0x36>\) + a046: 4c01 ldr r4, \[pc, #4\] ; \(a04c <_start\+0x3a>\) +#------------------------------------------------------------------------------ +#------ .got offset for f1t +#------------------------------------------------------------------------------ + a048: 00000014 \.word 0x00000014 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for f1t +#------------------------------------------------------------------------------ + a04c: 00006fc8 \.word 0x00006fc8 + a050: 4c00 ldr r4, \[pc, #0\] ; \(a054 <_start\+0x42>\) + a052: 4c01 ldr r4, \[pc, #4\] ; \(a058 <_start\+0x46>\) +#------------------------------------------------------------------------------ +#------ .got offset for f2t +#------------------------------------------------------------------------------ + a054: 0000001c \.word 0x0000001c +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for f2t +#------------------------------------------------------------------------------ + a058: 00006fc4 \.word 0x00006fc4 + a05c: 4c00 ldr r4, \[pc, #0\] ; \(a060 <_start\+0x4e>\) + a05e: 4c01 ldr r4, \[pc, #4\] ; \(a064 <_start\+0x52>\) +#------------------------------------------------------------------------------ +#------ .got offset for f3t +#------------------------------------------------------------------------------ + a060: 00000028 \.word 0x00000028 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for f3t +#------------------------------------------------------------------------------ + a064: 00006fc4 \.word 0x00006fc4 diff --git a/ld/testsuite/ld-arm/ifunc-11.gd b/ld/testsuite/ld-arm/ifunc-11.gd new file mode 100644 index 0000000..aea1583 --- /dev/null +++ b/ld/testsuite/ld-arm/ifunc-11.gd @@ -0,0 +1,29 @@ + +.* + +Contents of section \.data: +#------------------------------------------------------------------------------ +#------ 00010000: foo +#------------------------------------------------------------------------------ + 10000 44332211 00800000 30800000 .* +Contents of section \.got: +#------------------------------------------------------------------------------ +#------ 00011000: .got.plt +#------ 00011004: reserved .got.plt entry +#------ 00011008: reserved .got.plt entry +#------ 0001100c: .got entry for foo +#------------------------------------------------------------------------------ + 11000 00000000 00000000 00000000 00000100 .* +#------------------------------------------------------------------------------ +#------ 00011010: .got entry for f1 [R_ARM_IRELATIVE] +#------ 00011014: .got entry for f1t [R_ARM_IRELATIVE] +#------ 00011018: .got entry for foo +#------ 0001101c: .got entry for f2t [R_ARM_IRELATIVE] +#------------------------------------------------------------------------------ + 11010 00a00000 0da00000 00000100 0fa00000 .* +#------------------------------------------------------------------------------ +#------ 00011020: .got entry for f3 [R_ARM_IRELATIVE] +#------ 00011024: .got entry for f2 [R_ARM_IRELATIVE] +#------ 00011028: .got entry for f3t [R_ARM_IRELATIVE] +#------------------------------------------------------------------------------ + 11020 08a00000 04a00000 11a00000 .* diff --git a/ld/testsuite/ld-arm/ifunc-11.rd b/ld/testsuite/ld-arm/ifunc-11.rd new file mode 100644 index 0000000..82ce9b7 --- /dev/null +++ b/ld/testsuite/ld-arm/ifunc-11.rd @@ -0,0 +1,11 @@ + +There is no dynamic section in this file\. + +Relocation section '\.rel\.dyn' at offset 0x8000 contains 6 entries: + Offset Info Type Sym\.Value Sym\. Name +00011010 ......a0 R_ARM_IRELATIVE +00011024 ......a0 R_ARM_IRELATIVE +00011020 ......a0 R_ARM_IRELATIVE +00011014 ......a0 R_ARM_IRELATIVE +0001101c ......a0 R_ARM_IRELATIVE +00011028 ......a0 R_ARM_IRELATIVE diff --git a/ld/testsuite/ld-arm/ifunc-11.s b/ld/testsuite/ld-arm/ifunc-11.s new file mode 100644 index 0000000..36ebc24 --- /dev/null +++ b/ld/testsuite/ld-arm/ifunc-11.s @@ -0,0 +1,52 @@ + .syntax unified + .arch armv6t2 + + .macro define,name,type + .type \name,%gnu_indirect_function + \type +\name: + mov pc,lr + .size \name,.-\name + .endm + + .macro test_relocs,name + ldr r4,1f + ldr r4,2f +1: + .word \name(GOT) +2: + .word \name(GOT_PREL) + .endm + + .global f2 + .global f2t + + .global f3 + .hidden f3 + .global f3t + .hidden f3t + + define f1,.arm + define f2,.arm + define f3,.arm + + define f1t,.thumb_func + define f2t,.thumb_func + define f3t,.thumb_func + + .globl _start +_start: + test_relocs foo + test_relocs f1 + test_relocs f2 + test_relocs f3 + test_relocs f1t + test_relocs f2t + test_relocs f3t + .size _start,.-_start + + .data +foo: + .word 0x11223344 + .word __irel_start + .word __irel_end diff --git a/ld/testsuite/ld-arm/ifunc-12.dd b/ld/testsuite/ld-arm/ifunc-12.dd new file mode 100644 index 0000000..89a7530 --- /dev/null +++ b/ld/testsuite/ld-arm/ifunc-12.dd @@ -0,0 +1,95 @@ + +.* + + +Disassembly of section \.text: + +0000a000 <f1>: + a000: e1a0f00e mov pc, lr + +0000a004 <f2>: + a004: e1a0f00e mov pc, lr + +0000a008 <f3>: + a008: e1a0f00e mov pc, lr + +0000a00c <f1t>: + a00c: 46f7 mov pc, lr + +0000a00e <f2t>: + a00e: 46f7 mov pc, lr + +0000a010 <f3t>: + a010: 46f7 mov pc, lr + +0000a012 <_start>: + a012: f8df 4004 ldr\.w r4, \[pc, #4\] ; a018 <_start\+0x6> + a016: 4c01 ldr r4, \[pc, #4\] ; \(a01c <_start\+0xa>\) +#------------------------------------------------------------------------------ +#------ .got offset for foo +#------------------------------------------------------------------------------ + a018: 00000018 \.word 0x00000018 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for foo +#------------------------------------------------------------------------------ + a01c: 00006ff0 \.word 0x00006ff0 + a020: 4c00 ldr r4, \[pc, #0\] ; \(a024 <_start\+0x12>\) + a022: 4c01 ldr r4, \[pc, #4\] ; \(a028 <_start\+0x16>\) +#------------------------------------------------------------------------------ +#------ .got offset for f1 +#------------------------------------------------------------------------------ + a024: 00000010 \.word 0x00000010 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for f1 +#------------------------------------------------------------------------------ + a028: 00006fe8 \.word 0x00006fe8 + a02c: 4c00 ldr r4, \[pc, #0\] ; \(a030 <_start\+0x1e>\) + a02e: 4c01 ldr r4, \[pc, #4\] ; \(a034 <_start\+0x22>\) +#------------------------------------------------------------------------------ +#------ .got offset for f2 +#------------------------------------------------------------------------------ + a030: 00000024 \.word 0x00000024 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for f2 +#------------------------------------------------------------------------------ + a034: 00006ff0 \.word 0x00006ff0 + a038: 4c00 ldr r4, \[pc, #0\] ; \(a03c <_start\+0x2a>\) + a03a: 4c01 ldr r4, \[pc, #4\] ; \(a040 <_start\+0x2e>\) +#------------------------------------------------------------------------------ +#------ .got offset for f3 +#------------------------------------------------------------------------------ + a03c: 00000020 \.word 0x00000020 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for f3 +#------------------------------------------------------------------------------ + a040: 00006fe0 \.word 0x00006fe0 + a044: 4c00 ldr r4, \[pc, #0\] ; \(a048 <_start\+0x36>\) + a046: 4c01 ldr r4, \[pc, #4\] ; \(a04c <_start\+0x3a>\) +#------------------------------------------------------------------------------ +#------ .got offset for f1t +#------------------------------------------------------------------------------ + a048: 00000014 \.word 0x00000014 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for f1t +#------------------------------------------------------------------------------ + a04c: 00006fc8 \.word 0x00006fc8 + a050: 4c00 ldr r4, \[pc, #0\] ; \(a054 <_start\+0x42>\) + a052: 4c01 ldr r4, \[pc, #4\] ; \(a058 <_start\+0x46>\) +#------------------------------------------------------------------------------ +#------ .got offset for f2t +#------------------------------------------------------------------------------ + a054: 0000001c \.word 0x0000001c +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for f2t +#------------------------------------------------------------------------------ + a058: 00006fc4 \.word 0x00006fc4 + a05c: 4c00 ldr r4, \[pc, #0\] ; \(a060 <_start\+0x4e>\) + a05e: 4c01 ldr r4, \[pc, #4\] ; \(a064 <_start\+0x52>\) +#------------------------------------------------------------------------------ +#------ .got offset for f3t +#------------------------------------------------------------------------------ + a060: 00000028 \.word 0x00000028 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for f3t +#------------------------------------------------------------------------------ + a064: 00006fc4 \.word 0x00006fc4 diff --git a/ld/testsuite/ld-arm/ifunc-12.gd b/ld/testsuite/ld-arm/ifunc-12.gd new file mode 100644 index 0000000..721c315 --- /dev/null +++ b/ld/testsuite/ld-arm/ifunc-12.gd @@ -0,0 +1,39 @@ + +.* + +Contents of section \.data: +#------------------------------------------------------------------------------ +#------ 00010000: foo +#------ 00010004: contains f1 [R_ARM_IRELATIVE] +#------ 00010008: f2 [R_ARM_ABS32] +#------ 0001000c: contains f3 [R_ARM_IRELATIVE] +#------------------------------------------------------------------------------ + 10000 44332211 00a00000 00000000 08a00000 .* +#------------------------------------------------------------------------------ +#------ 00010010: contains f1t [R_ARM_IRELATIVE] +#------ 00010014: f2t [R_ARM_ABS32] +#------ 00010018: contains f3t [R_ARM_IRELATIVE] +#------------------------------------------------------------------------------ + 10010 0da00000 00000000 11a00000 80800000 .* + 10020 80800000 .* +Contents of section \.got: +#------------------------------------------------------------------------------ +#------ 00011000: .got.plt +#------ 00011004: reserved .got.plt entry +#------ 00011008: reserved .got.plt entry +#------ 0001100c: .got entry for foo [R_ARM_RELATIVE] +#------------------------------------------------------------------------------ + 11000 00200100 00000000 00000000 00000100 .* +#------------------------------------------------------------------------------ +#------ 00011010: .got entry for f1 [R_ARM_IRELATIVE] +#------ 00011014: .got entry for f1t [R_ARM_IRELATIVE] +#------ 00011018: .got entry for foo [R_ARM_RELATIVE] +#------ 0001101c: .got entry for f2t [R_ARM_GLOB_DAT] +#------------------------------------------------------------------------------ + 11010 00a00000 0da00000 00000100 00000000 .* +#------------------------------------------------------------------------------ +#------ 00011020: .got entry for f3 [R_ARM_IRELATIVE] +#------ 00011024: .got entry for f2 [R_ARM_GLOB_DAT] +#------ 00011028: .got entry for f3t [R_ARM_IRELATIVE] +#------------------------------------------------------------------------------ + 11020 08a00000 00000000 11a00000 .* diff --git a/ld/testsuite/ld-arm/ifunc-12.rd b/ld/testsuite/ld-arm/ifunc-12.rd new file mode 100644 index 0000000..c5d62c1 --- /dev/null +++ b/ld/testsuite/ld-arm/ifunc-12.rd @@ -0,0 +1,19 @@ + +Relocation section '\.rel\.dyn' at offset 0x8000 contains 16 entries: + Offset Info Type Sym\.Value Sym\. Name +0001001c ......17 R_ARM_RELATIVE +00010020 ......17 R_ARM_RELATIVE +0001100c ......17 R_ARM_RELATIVE +00011018 ......17 R_ARM_RELATIVE +00010004 ......a0 R_ARM_IRELATIVE +0001000c ......a0 R_ARM_IRELATIVE +00010010 ......a0 R_ARM_IRELATIVE +00010018 ......a0 R_ARM_IRELATIVE +00011010 ......a0 R_ARM_IRELATIVE +00011014 ......a0 R_ARM_IRELATIVE +00011020 ......a0 R_ARM_IRELATIVE +00011028 ......a0 R_ARM_IRELATIVE +00010008 ......02 R_ARM_ABS32 f2\(\) f2 +00011024 ......15 R_ARM_GLOB_DAT f2\(\) f2 +00010014 ......02 R_ARM_ABS32 f2t\(\) f2t +0001101c ......15 R_ARM_GLOB_DAT f2t\(\) f2t diff --git a/ld/testsuite/ld-arm/ifunc-12.s b/ld/testsuite/ld-arm/ifunc-12.s new file mode 100644 index 0000000..388ac34 --- /dev/null +++ b/ld/testsuite/ld-arm/ifunc-12.s @@ -0,0 +1,58 @@ + .syntax unified + .arch armv6t2 + + .macro define,name,type + .type \name,%gnu_indirect_function + \type +\name: + mov pc,lr + .size \name,.-\name + .endm + + .macro test_relocs,name + ldr r4,1f + ldr r4,2f +1: + .word \name(GOT) +2: + .word \name(GOT_PREL) + .endm + + .global f2 + .global f2t + + .global f3 + .hidden f3 + .global f3t + .hidden f3t + + define f1,.arm + define f2,.arm + define f3,.arm + + define f1t,.thumb_func + define f2t,.thumb_func + define f3t,.thumb_func + + .globl _start +_start: + test_relocs foo + test_relocs f1 + test_relocs f2 + test_relocs f3 + test_relocs f1t + test_relocs f2t + test_relocs f3t + .size _start,.-_start + + .data +foo: + .word 0x11223344 + .word f1 + .word f2 + .word f3 + .word f1t + .word f2t + .word f3t + .word __irel_start + .word __irel_end diff --git a/ld/testsuite/ld-arm/ifunc-13.dd b/ld/testsuite/ld-arm/ifunc-13.dd new file mode 100644 index 0000000..d5df382 --- /dev/null +++ b/ld/testsuite/ld-arm/ifunc-13.dd @@ -0,0 +1,89 @@ + +.* + + +Disassembly of section \.text: + +0000a000 <f1>: + a000: e1a0f00e mov pc, lr + +0000a004 <f3>: + a004: e1a0f00e mov pc, lr + +0000a008 <f1t>: + a008: 46f7 mov pc, lr + +0000a00a <f3t>: + a00a: 46f7 mov pc, lr + +0000a00c <_start>: + a00c: 4c00 ldr r4, \[pc, #0\] ; \(a010 <_start\+0x4>\) + a00e: 4c01 ldr r4, \[pc, #4\] ; \(a014 <_start\+0x8>\) +#------------------------------------------------------------------------------ +#------ .got offset for foo +#------------------------------------------------------------------------------ + a010: 00000018 \.word 0x00000018 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for foo +#------------------------------------------------------------------------------ + a014: 00006ff8 \.word 0x00006ff8 + a018: 4c00 ldr r4, \[pc, #0\] ; \(a01c <_start\+0x10>\) + a01a: 4c01 ldr r4, \[pc, #4\] ; \(a020 <_start\+0x14>\) +#------------------------------------------------------------------------------ +#------ .got offset for f1 +#------------------------------------------------------------------------------ + a01c: 00000010 \.word 0x00000010 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for f1 +#------------------------------------------------------------------------------ + a020: 00006ff0 \.word 0x00006ff0 + a024: 4c00 ldr r4, \[pc, #0\] ; \(a028 <_start\+0x1c>\) + a026: 4c01 ldr r4, \[pc, #4\] ; \(a02c <_start\+0x20>\) +#------------------------------------------------------------------------------ +#------ .got offset for f2 +#------------------------------------------------------------------------------ + a028: 00000024 \.word 0x00000024 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for f2 +#------------------------------------------------------------------------------ + a02c: 00006ff8 \.word 0x00006ff8 + a030: 4c00 ldr r4, \[pc, #0\] ; \(a034 <_start\+0x28>\) + a032: 4c01 ldr r4, \[pc, #4\] ; \(a038 <_start\+0x2c>\) +#------------------------------------------------------------------------------ +#------ .got offset for f3 +#------------------------------------------------------------------------------ + a034: 00000020 \.word 0x00000020 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for f3 +#------------------------------------------------------------------------------ + a038: 00006fe8 \.word 0x00006fe8 + a03c: 4c00 ldr r4, \[pc, #0\] ; \(a040 <_start\+0x34>\) + a03e: 4c01 ldr r4, \[pc, #4\] ; \(a044 <_start\+0x38>\) +#------------------------------------------------------------------------------ +#------ .got offset for f1t +#------------------------------------------------------------------------------ + a040: 00000014 \.word 0x00000014 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for f1t +#------------------------------------------------------------------------------ + a044: 00006fd0 \.word 0x00006fd0 + a048: 4c00 ldr r4, \[pc, #0\] ; \(a04c <_start\+0x40>\) + a04a: 4c01 ldr r4, \[pc, #4\] ; \(a050 <_start\+0x44>\) +#------------------------------------------------------------------------------ +#------ .got offset for f2t +#------------------------------------------------------------------------------ + a04c: 0000001c \.word 0x0000001c +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for f2t +#------------------------------------------------------------------------------ + a050: 00006fcc \.word 0x00006fcc + a054: 4c00 ldr r4, \[pc, #0\] ; \(a058 <_start\+0x4c>\) + a056: 4c01 ldr r4, \[pc, #4\] ; \(a05c <_start\+0x50>\) +#------------------------------------------------------------------------------ +#------ .got offset for f3t +#------------------------------------------------------------------------------ + a058: 00000028 \.word 0x00000028 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for f3t +#------------------------------------------------------------------------------ + a05c: 00006fcc \.word 0x00006fcc diff --git a/ld/testsuite/ld-arm/ifunc-13.gd b/ld/testsuite/ld-arm/ifunc-13.gd new file mode 100644 index 0000000..9b5dbcb --- /dev/null +++ b/ld/testsuite/ld-arm/ifunc-13.gd @@ -0,0 +1,29 @@ + +.* + +Contents of section \.data: +#------------------------------------------------------------------------------ +#------ 00010000: foo +#------------------------------------------------------------------------------ + 10000 44332211 30800000 30800000 .* +Contents of section \.got: +#------------------------------------------------------------------------------ +#------ 00011000: .got.plt +#------ 00011004: reserved .got.plt entry +#------ 00011008: reserved .got.plt entry +#------ 0001100c: .got entry for foo +#------------------------------------------------------------------------------ + 11000 00200100 00000000 00000000 00000100 .* +#------------------------------------------------------------------------------ +#------ 00011010: .got entry for f1 [R_ARM_IRELATIVE] +#------ 00011014: .got entry for f1t [R_ARM_IRELATIVE] +#------ 00011018: .got entry for foo +#------ 0001101c: .got entry for f2t [R_ARM_GLOB_DAT] +#------------------------------------------------------------------------------ + 11010 00a00000 09a00000 00000100 00000000 .* +#------------------------------------------------------------------------------ +#------ 00011020: .got entry for f3 [R_ARM_IRELATIVE] +#------ 00011024: .got entry for f2 [R_ARM_GLOB_DAT] +#------ 00011028: .got entry for f3t [R_ARM_IRELATIVE] +#------------------------------------------------------------------------------ + 11020 04a00000 00000000 0ba00000 .* diff --git a/ld/testsuite/ld-arm/ifunc-13.rd b/ld/testsuite/ld-arm/ifunc-13.rd new file mode 100644 index 0000000..c58ab8a --- /dev/null +++ b/ld/testsuite/ld-arm/ifunc-13.rd @@ -0,0 +1,9 @@ + +Relocation section '\.rel\.dyn' at offset 0x8000 contains 6 entries: + Offset Info Type Sym\.Value Sym\. Name +00011010 ......a0 R_ARM_IRELATIVE +00011014 ......a0 R_ARM_IRELATIVE +00011020 ......a0 R_ARM_IRELATIVE +00011028 ......a0 R_ARM_IRELATIVE +0001101c ......15 R_ARM_GLOB_DAT 00000000 f2t +00011024 ......15 R_ARM_GLOB_DAT 00000000 f2 diff --git a/ld/testsuite/ld-arm/ifunc-13.s b/ld/testsuite/ld-arm/ifunc-13.s new file mode 100644 index 0000000..467f06f --- /dev/null +++ b/ld/testsuite/ld-arm/ifunc-13.s @@ -0,0 +1,50 @@ + .syntax unified + .arch armv6t2 + + .macro define,name,type + .type \name,%gnu_indirect_function + \type +\name: + mov pc,lr + .size \name,.-\name + .endm + + .macro test_relocs,name + ldr r4,1f + ldr r4,2f +1: + .word \name(GOT) +2: + .word \name(GOT_PREL) + .endm + + .global f2 + .global f2t + + .global f3 + .hidden f3 + .global f3t + .hidden f3t + + define f1,.arm + define f3,.arm + + define f1t,.thumb_func + define f3t,.thumb_func + + .globl _start +_start: + test_relocs foo + test_relocs f1 + test_relocs f2 + test_relocs f3 + test_relocs f1t + test_relocs f2t + test_relocs f3t + .size _start,.-_start + + .data +foo: + .word 0x11223344 + .word __irel_start + .word __irel_end diff --git a/ld/testsuite/ld-arm/ifunc-14.dd b/ld/testsuite/ld-arm/ifunc-14.dd new file mode 100644 index 0000000..8df338a --- /dev/null +++ b/ld/testsuite/ld-arm/ifunc-14.dd @@ -0,0 +1,100 @@ + +.* + + +Disassembly of section \.plt: + +00009000 <\.plt>: + 9000: e52de004 push {lr} ; \(str lr, \[sp, #-4\]!\) + 9004: e59fe004 ldr lr, \[pc, #4\] ; 9010 <__irel_end\+0xff0> + 9008: e08fe00e add lr, pc, lr + 900c: e5bef008 ldr pc, \[lr, #8\]! +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got.plt +#------------------------------------------------------------------------------ + 9010: 00007ff0 \.word 0x00007ff0 +#------------------------------------------------------------------------------ +#------ f2t's .plt entry +#------------------------------------------------------------------------------ + 9014: e28fc600 add ip, pc, #0 + 9018: e28cca07 add ip, ip, #28672 ; 0x7000 + 901c: e5bcfff0 ldr pc, \[ip, #4080\]! ; 0xff0 +#------------------------------------------------------------------------------ +#------ f2's .plt entry +#------------------------------------------------------------------------------ + 9020: e28fc600 add ip, pc, #0 + 9024: e28cca07 add ip, ip, #28672 ; 0x7000 + 9028: e5bcffe8 ldr pc, \[ip, #4072\]! ; 0xfe8 + +Disassembly of section \.iplt: + +0000902c <f3-0x18>: +#------------------------------------------------------------------------------ +#------ f1's .iplt entry +#------------------------------------------------------------------------------ + 902c: e28fc600 add ip, pc, #0 + 9030: e28cca07 add ip, ip, #28672 ; 0x7000 + 9034: e5bcffe0 ldr pc, \[ip, #4064\]! ; 0xfe0 +#------------------------------------------------------------------------------ +#------ f1t's .iplt entry +#------------------------------------------------------------------------------ + 9038: e28fc600 add ip, pc, #0 + 903c: e28cca07 add ip, ip, #28672 ; 0x7000 + 9040: e5bcffd8 ldr pc, \[ip, #4056\]! ; 0xfd8 + +00009044 <f3>: + 9044: e28fc600 add ip, pc, #0 + 9048: e28cca07 add ip, ip, #28672 ; 0x7000 + 904c: e5bcffd0 ldr pc, \[ip, #4048\]! ; 0xfd0 + +00009050 <f3t>: + 9050: e28fc600 add ip, pc, #0 + 9054: e28cca07 add ip, ip, #28672 ; 0x7000 + 9058: e5bcffc8 ldr pc, \[ip, #4040\]! ; 0xfc8 + +Disassembly of section \.text: + +0000a000 <f1>: + a000: e1a0f00e mov pc, lr + a004: e1a0f00e mov pc, lr + +0000a008 <f1t>: + a008: 46f7 mov pc, lr + a00a: 46f7 mov pc, lr + +0000a00c <_start>: + a00c: f8df 4000 ldr\.w r4, \[pc\] ; a010 <_start\+0x4> +#------------------------------------------------------------------------------ +#------ PC-relative offset of foo +#------------------------------------------------------------------------------ + a010: 00005ff0 \.word 0x00005ff0 + a014: f8df 4000 ldr\.w r4, \[pc\] ; a018 <_start\+0xc> +#------------------------------------------------------------------------------ +#------ PC-relative offset of f1's .iplt entry +#------------------------------------------------------------------------------ + a018: fffff014 \.word 0xfffff014 + a01c: f8df 4000 ldr\.w r4, \[pc\] ; a020 <_start\+0x14> +#------------------------------------------------------------------------------ +#------ PC-relative offset of f2's .plt entry +#------------------------------------------------------------------------------ + a020: fffff000 \.word 0xfffff000 + a024: f8df 4000 ldr\.w r4, \[pc\] ; a028 <_start\+0x1c> +#------------------------------------------------------------------------------ +#------ PC-relative offset of f3 +#------------------------------------------------------------------------------ + a028: fffff01c \.word 0xfffff01c + a02c: f8df 4000 ldr\.w r4, \[pc\] ; a030 <_start\+0x24> +#------------------------------------------------------------------------------ +#------ PC-relative offset of f1t's .iplt entry +#------------------------------------------------------------------------------ + a030: fffff008 \.word 0xfffff008 + a034: f8df 4000 ldr\.w r4, \[pc\] ; a038 <_start\+0x2c> +#------------------------------------------------------------------------------ +#------ PC-relative offset of f2t's .plt entry +#------------------------------------------------------------------------------ + a038: ffffefdc \.word 0xffffefdc + a03c: f8df 4000 ldr\.w r4, \[pc\] ; a040 <_start\+0x34> +#------------------------------------------------------------------------------ +#------ PC-relative offset of f3t +#------------------------------------------------------------------------------ + a040: fffff010 \.word 0xfffff010 diff --git a/ld/testsuite/ld-arm/ifunc-14.gd b/ld/testsuite/ld-arm/ifunc-14.gd new file mode 100644 index 0000000..c054e6b --- /dev/null +++ b/ld/testsuite/ld-arm/ifunc-14.gd @@ -0,0 +1,27 @@ + +.* + +Contents of section \.data: +#------------------------------------------------------------------------------ +#------ 00010000: foo +#------------------------------------------------------------------------------ + 10000 44332211 00800000 20800000 .* +Contents of section \.got: +#------------------------------------------------------------------------------ +#------ 00011000: .got.plt +#------ 00011004: reserved .got.plt entry +#------ 00011008: reserved .got.plt entry +#------ 0001100c: f2t's .got.plt entry [R_ARM_JUMP_SLOT] +#------------------------------------------------------------------------------ + 11000 00200100 00000000 00000000 00900000 .* +#------------------------------------------------------------------------------ +#------ 00011010: f2's .got.plt entry [R_ARM_JUMP_SLOT] +#------ 00011014: f1's .igot.plt entry [R_ARM_IRELATIVE] +#------ 00011018: f1t's .igot.plt entry [R_ARM_IRELATIVE] +#------ 0001101c: f3's .igot.plt pointer to 0xa004 [R_ARM_IRELATIVE] +#------------------------------------------------------------------------------ + 11010 00900000 00a00000 09a00000 04a00000 .* +#------------------------------------------------------------------------------ +#------ 00011020: f3t's .igot.plt pointer to 0xa00b [R_ARM_IRELATIVE] +#------------------------------------------------------------------------------ + 11020 0ba00000 .* diff --git a/ld/testsuite/ld-arm/ifunc-14.rd b/ld/testsuite/ld-arm/ifunc-14.rd new file mode 100644 index 0000000..59ea29b --- /dev/null +++ b/ld/testsuite/ld-arm/ifunc-14.rd @@ -0,0 +1,12 @@ + +Relocation section '\.rel\.dyn' at offset 0x8000 contains 4 entries: + Offset Info Type Sym\.Value Sym\. Name +00011014 ......a0 R_ARM_IRELATIVE +00011018 ......a0 R_ARM_IRELATIVE +0001101c ......a0 R_ARM_IRELATIVE +00011020 ......a0 R_ARM_IRELATIVE + +Relocation section '\.rel\.plt' at offset 0x8020 contains 2 entries: + Offset Info Type Sym\.Value Sym\. Name +0001100c ......16 R_ARM_JUMP_SLOT 00009014 f2t +00011010 ......16 R_ARM_JUMP_SLOT 00009020 f2 diff --git a/ld/testsuite/ld-arm/ifunc-14.s b/ld/testsuite/ld-arm/ifunc-14.s new file mode 100644 index 0000000..8a166af --- /dev/null +++ b/ld/testsuite/ld-arm/ifunc-14.s @@ -0,0 +1,47 @@ + .syntax unified + .arch armv6t2 + + .macro define,name,type + .type \name,%gnu_indirect_function + \type +\name: + mov pc,lr + .size \name,.-\name + .endm + + .macro test_relocs,name + ldr r4,1f +1: + .word \name - . + .endm + + .global f2 + .global f2t + + .global f3 + .hidden f3 + .global f3t + .hidden f3t + + define f1,.arm + define f3,.arm + + define f1t,.thumb_func + define f3t,.thumb_func + + .globl _start +_start: + test_relocs foo + test_relocs f1 + test_relocs f2 + test_relocs f3 + test_relocs f1t + test_relocs f2t + test_relocs f3t + .size _start,.-_start + + .data +foo: + .word 0x11223344 + .word __irel_start + .word __irel_end diff --git a/ld/testsuite/ld-arm/ifunc-15.dd b/ld/testsuite/ld-arm/ifunc-15.dd new file mode 100644 index 0000000..886d355 --- /dev/null +++ b/ld/testsuite/ld-arm/ifunc-15.dd @@ -0,0 +1,100 @@ + +.* + + +Disassembly of section \.plt: + +00009000 <\.plt>: + 9000: e52de004 push {lr} ; \(str lr, \[sp, #-4\]!\) + 9004: e59fe004 ldr lr, \[pc, #4\] ; 9010 <__irel_end\+0xff0> + 9008: e08fe00e add lr, pc, lr + 900c: e5bef008 ldr pc, \[lr, #8\]! +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got.plt +#------------------------------------------------------------------------------ + 9010: 00007ff0 \.word 0x00007ff0 +#------------------------------------------------------------------------------ +#------ f2t's .plt entry +#------------------------------------------------------------------------------ + 9014: e28fc600 add ip, pc, #0 + 9018: e28cca07 add ip, ip, #28672 ; 0x7000 + 901c: e5bcfff0 ldr pc, \[ip, #4080\]! ; 0xff0 +#------------------------------------------------------------------------------ +#------ f2's .plt entry +#------------------------------------------------------------------------------ + 9020: e28fc600 add ip, pc, #0 + 9024: e28cca07 add ip, ip, #28672 ; 0x7000 + 9028: e5bcffe8 ldr pc, \[ip, #4072\]! ; 0xfe8 + +Disassembly of section \.iplt: + +0000902c <f3-0x18>: +#------------------------------------------------------------------------------ +#------ f1's .iplt entry +#------------------------------------------------------------------------------ + 902c: e28fc600 add ip, pc, #0 + 9030: e28cca07 add ip, ip, #28672 ; 0x7000 + 9034: e5bcffe0 ldr pc, \[ip, #4064\]! ; 0xfe0 +#------------------------------------------------------------------------------ +#------ f1t's .iplt entry +#------------------------------------------------------------------------------ + 9038: e28fc600 add ip, pc, #0 + 903c: e28cca07 add ip, ip, #28672 ; 0x7000 + 9040: e5bcffd8 ldr pc, \[ip, #4056\]! ; 0xfd8 + +00009044 <f3>: + 9044: e28fc600 add ip, pc, #0 + 9048: e28cca07 add ip, ip, #28672 ; 0x7000 + 904c: e5bcffd0 ldr pc, \[ip, #4048\]! ; 0xfd0 + +00009050 <f3t>: + 9050: e28fc600 add ip, pc, #0 + 9054: e28cca07 add ip, ip, #28672 ; 0x7000 + 9058: e5bcffc8 ldr pc, \[ip, #4040\]! ; 0xfc8 + +Disassembly of section \.text: + +0000a000 <f1>: + a000: e1a0f00e mov pc, lr + a004: e1a0f00e mov pc, lr + +0000a008 <f1t>: + a008: 46f7 mov pc, lr + a00a: 46f7 mov pc, lr + +0000a00c <_start>: + a00c: f8df 4000 ldr\.w r4, \[pc\] ; a010 <_start\+0x4> +#------------------------------------------------------------------------------ +#------ foo +#------------------------------------------------------------------------------ + a010: 00010000 \.word 0x00010000 + a014: f8df 4000 ldr\.w r4, \[pc\] ; a018 <_start\+0xc> +#------------------------------------------------------------------------------ +#------ f1's .iplt entry +#------------------------------------------------------------------------------ + a018: 0000902c \.word 0x0000902c + a01c: f8df 4000 ldr\.w r4, \[pc\] ; a020 <_start\+0x14> +#------------------------------------------------------------------------------ +#------ f2's .plt entry +#------------------------------------------------------------------------------ + a020: 00009020 \.word 0x00009020 + a024: f8df 4000 ldr\.w r4, \[pc\] ; a028 <_start\+0x1c> +#------------------------------------------------------------------------------ +#------ f3 +#------------------------------------------------------------------------------ + a028: 00009044 \.word 0x00009044 + a02c: f8df 4000 ldr\.w r4, \[pc\] ; a030 <_start\+0x24> +#------------------------------------------------------------------------------ +#------ f1t's .iplt entry +#------------------------------------------------------------------------------ + a030: 00009038 \.word 0x00009038 + a034: f8df 4000 ldr\.w r4, \[pc\] ; a038 <_start\+0x2c> +#------------------------------------------------------------------------------ +#------ f2t's .plt entry +#------------------------------------------------------------------------------ + a038: 00009014 \.word 0x00009014 + a03c: f8df 4000 ldr\.w r4, \[pc\] ; a040 <_start\+0x34> +#------------------------------------------------------------------------------ +#------ f3t +#------------------------------------------------------------------------------ + a040: 00009050 \.word 0x00009050 diff --git a/ld/testsuite/ld-arm/ifunc-15.gd b/ld/testsuite/ld-arm/ifunc-15.gd new file mode 100644 index 0000000..c054e6b --- /dev/null +++ b/ld/testsuite/ld-arm/ifunc-15.gd @@ -0,0 +1,27 @@ + +.* + +Contents of section \.data: +#------------------------------------------------------------------------------ +#------ 00010000: foo +#------------------------------------------------------------------------------ + 10000 44332211 00800000 20800000 .* +Contents of section \.got: +#------------------------------------------------------------------------------ +#------ 00011000: .got.plt +#------ 00011004: reserved .got.plt entry +#------ 00011008: reserved .got.plt entry +#------ 0001100c: f2t's .got.plt entry [R_ARM_JUMP_SLOT] +#------------------------------------------------------------------------------ + 11000 00200100 00000000 00000000 00900000 .* +#------------------------------------------------------------------------------ +#------ 00011010: f2's .got.plt entry [R_ARM_JUMP_SLOT] +#------ 00011014: f1's .igot.plt entry [R_ARM_IRELATIVE] +#------ 00011018: f1t's .igot.plt entry [R_ARM_IRELATIVE] +#------ 0001101c: f3's .igot.plt pointer to 0xa004 [R_ARM_IRELATIVE] +#------------------------------------------------------------------------------ + 11010 00900000 00a00000 09a00000 04a00000 .* +#------------------------------------------------------------------------------ +#------ 00011020: f3t's .igot.plt pointer to 0xa00b [R_ARM_IRELATIVE] +#------------------------------------------------------------------------------ + 11020 0ba00000 .* diff --git a/ld/testsuite/ld-arm/ifunc-15.rd b/ld/testsuite/ld-arm/ifunc-15.rd new file mode 100644 index 0000000..59ea29b --- /dev/null +++ b/ld/testsuite/ld-arm/ifunc-15.rd @@ -0,0 +1,12 @@ + +Relocation section '\.rel\.dyn' at offset 0x8000 contains 4 entries: + Offset Info Type Sym\.Value Sym\. Name +00011014 ......a0 R_ARM_IRELATIVE +00011018 ......a0 R_ARM_IRELATIVE +0001101c ......a0 R_ARM_IRELATIVE +00011020 ......a0 R_ARM_IRELATIVE + +Relocation section '\.rel\.plt' at offset 0x8020 contains 2 entries: + Offset Info Type Sym\.Value Sym\. Name +0001100c ......16 R_ARM_JUMP_SLOT 00009014 f2t +00011010 ......16 R_ARM_JUMP_SLOT 00009020 f2 diff --git a/ld/testsuite/ld-arm/ifunc-15.s b/ld/testsuite/ld-arm/ifunc-15.s new file mode 100644 index 0000000..91cb997 --- /dev/null +++ b/ld/testsuite/ld-arm/ifunc-15.s @@ -0,0 +1,47 @@ + .syntax unified + .arch armv6t2 + + .macro define,name,type + .type \name,%gnu_indirect_function + \type +\name: + mov pc,lr + .size \name,.-\name + .endm + + .macro test_relocs,name + ldr r4,1f +1: + .word \name + .endm + + .global f2 + .global f2t + + .global f3 + .hidden f3 + .global f3t + .hidden f3t + + define f1,.arm + define f3,.arm + + define f1t,.thumb_func + define f3t,.thumb_func + + .globl _start +_start: + test_relocs foo + test_relocs f1 + test_relocs f2 + test_relocs f3 + test_relocs f1t + test_relocs f2t + test_relocs f3t + .size _start,.-_start + + .data +foo: + .word 0x11223344 + .word __irel_start + .word __irel_end diff --git a/ld/testsuite/ld-arm/ifunc-16.dd b/ld/testsuite/ld-arm/ifunc-16.dd new file mode 100644 index 0000000..d3b39bd --- /dev/null +++ b/ld/testsuite/ld-arm/ifunc-16.dd @@ -0,0 +1,88 @@ + +.* + + +Disassembly of section \.iplt: + +00009000 <f2t-0x18>: +#------------------------------------------------------------------------------ +#------ f1's .iplt entry +#------------------------------------------------------------------------------ + 9000: e28fc600 add ip, pc, #0 + 9004: e28cca08 add ip, ip, #32768 ; 0x8000 + 9008: e5bcf004 ldr pc, \[ip, #4\]! +#------------------------------------------------------------------------------ +#------ f1t's .iplt entry +#------------------------------------------------------------------------------ + 900c: e28fc600 add ip, pc, #0 + 9010: e28cca07 add ip, ip, #28672 ; 0x7000 + 9014: e5bcfffc ldr pc, \[ip, #4092\]! ; 0xffc + +00009018 <f2t>: + 9018: e28fc600 add ip, pc, #0 + 901c: e28cca07 add ip, ip, #28672 ; 0x7000 + 9020: e5bcfff4 ldr pc, \[ip, #4084\]! ; 0xff4 + +00009024 <f3>: + 9024: e28fc600 add ip, pc, #0 + 9028: e28cca07 add ip, ip, #28672 ; 0x7000 + 902c: e5bcffec ldr pc, \[ip, #4076\]! ; 0xfec + +00009030 <f2>: + 9030: e28fc600 add ip, pc, #0 + 9034: e28cca07 add ip, ip, #28672 ; 0x7000 + 9038: e5bcffe4 ldr pc, \[ip, #4068\]! ; 0xfe4 + +0000903c <f3t>: + 903c: e28fc600 add ip, pc, #0 + 9040: e28cca07 add ip, ip, #28672 ; 0x7000 + 9044: e5bcffdc ldr pc, \[ip, #4060\]! ; 0xfdc + +Disassembly of section \.text: + +0000a000 <f1>: + a000: e1a0f00e mov pc, lr + a004: e1a0f00e mov pc, lr + a008: e1a0f00e mov pc, lr + +0000a00c <f1t>: + a00c: 46f7 mov pc, lr + a00e: 46f7 mov pc, lr + a010: 46f7 mov pc, lr + +0000a012 <_start>: + a012: 4c00 ldr r4, \[pc, #0\] ; \(a014 <_start\+0x2>\) +#------------------------------------------------------------------------------ +#------ foo +#------------------------------------------------------------------------------ + a014: 00010000 \.word 0x00010000 + a018: f8df 4000 ldr\.w r4, \[pc\] ; a01c <_start\+0xa> +#------------------------------------------------------------------------------ +#------ f1's .iplt entry +#------------------------------------------------------------------------------ + a01c: 00009000 \.word 0x00009000 + a020: f8df 4000 ldr\.w r4, \[pc\] ; a024 <_start\+0x12> +#------------------------------------------------------------------------------ +#------ f2 +#------------------------------------------------------------------------------ + a024: 00009030 \.word 0x00009030 + a028: f8df 4000 ldr\.w r4, \[pc\] ; a02c <_start\+0x1a> +#------------------------------------------------------------------------------ +#------ f3 +#------------------------------------------------------------------------------ + a02c: 00009024 \.word 0x00009024 + a030: f8df 4000 ldr\.w r4, \[pc\] ; a034 <_start\+0x22> +#------------------------------------------------------------------------------ +#------ f1t's .iplt entry +#------------------------------------------------------------------------------ + a034: 0000900c \.word 0x0000900c + a038: f8df 4000 ldr\.w r4, \[pc\] ; a03c <_start\+0x2a> +#------------------------------------------------------------------------------ +#------ f2t +#------------------------------------------------------------------------------ + a03c: 00009018 \.word 0x00009018 + a040: f8df 4000 ldr\.w r4, \[pc\] ; a044 <_start\+0x32> +#------------------------------------------------------------------------------ +#------ f3t +#------------------------------------------------------------------------------ + a044: 0000903c \.word 0x0000903c diff --git a/ld/testsuite/ld-arm/ifunc-16.gd b/ld/testsuite/ld-arm/ifunc-16.gd new file mode 100644 index 0000000..7c4e820 --- /dev/null +++ b/ld/testsuite/ld-arm/ifunc-16.gd @@ -0,0 +1,27 @@ + +.* + +Contents of section \.data: +#------------------------------------------------------------------------------ +#------ 00010000: foo +#------------------------------------------------------------------------------ + 10000 44332211 00800000 30800000 .* +Contents of section \.got: +#------------------------------------------------------------------------------ +#------ 00011000: .got.plt +#------ 00011004: reserved .got.plt entry +#------ 00011008: reserved .got.plt entry +#------ 0001100c: f1's .igot.plt entry [R_ARM_IRELATIVE] +#------------------------------------------------------------------------------ + 11000 00200100 00000000 00000000 00a00000 .* +#------------------------------------------------------------------------------ +#------ 00011010: f1t's .igot.plt entry [R_ARM_IRELATIVE] +#------ 00011014: f2t's .igot.plt pointer to 0xa00f [R_ARM_IRELATIVE] +#------ 00011018: f3's .igot.plt pointer to 0xa008 [R_ARM_IRELATIVE] +#------ 0001101c: f2's .igot.plt pointer to 0xa004 [R_ARM_IRELATIVE] +#------------------------------------------------------------------------------ + 11010 0da00000 0fa00000 08a00000 04a00000 .* +#------------------------------------------------------------------------------ +#------ 00011020: f3t's .igot.plt pointer to 0xa011 [R_ARM_IRELATIVE] +#------------------------------------------------------------------------------ + 11020 11a00000 .* diff --git a/ld/testsuite/ld-arm/ifunc-16.rd b/ld/testsuite/ld-arm/ifunc-16.rd new file mode 100644 index 0000000..7296316 --- /dev/null +++ b/ld/testsuite/ld-arm/ifunc-16.rd @@ -0,0 +1,9 @@ + +Relocation section '\.rel\.dyn' at offset 0x8000 contains 6 entries: + Offset Info Type Sym\.Value Sym\. Name +0001100c ......a0 R_ARM_IRELATIVE +00011010 ......a0 R_ARM_IRELATIVE +00011014 ......a0 R_ARM_IRELATIVE +00011018 ......a0 R_ARM_IRELATIVE +0001101c ......a0 R_ARM_IRELATIVE +00011020 ......a0 R_ARM_IRELATIVE diff --git a/ld/testsuite/ld-arm/ifunc-16.s b/ld/testsuite/ld-arm/ifunc-16.s new file mode 100644 index 0000000..80fe282 --- /dev/null +++ b/ld/testsuite/ld-arm/ifunc-16.s @@ -0,0 +1,49 @@ + .syntax unified + .arch armv6t2 + + .macro define,name,type + .type \name,%gnu_indirect_function + \type +\name: + mov pc,lr + .size \name,.-\name + .endm + + .macro test_relocs,name + ldr r4,1f +1: + .word \name + .endm + + .global f2 + .global f2t + + .global f3 + .hidden f3 + .global f3t + .hidden f3t + + define f1,.arm + define f2,.arm + define f3,.arm + + define f1t,.thumb_func + define f2t,.thumb_func + define f3t,.thumb_func + + .globl _start +_start: + test_relocs foo + test_relocs f1 + test_relocs f2 + test_relocs f3 + test_relocs f1t + test_relocs f2t + test_relocs f3t + .size _start,.-_start + + .data +foo: + .word 0x11223344 + .word __irel_start + .word __irel_end diff --git a/ld/testsuite/ld-arm/ifunc-2.dd b/ld/testsuite/ld-arm/ifunc-2.dd new file mode 100644 index 0000000..994069c --- /dev/null +++ b/ld/testsuite/ld-arm/ifunc-2.dd @@ -0,0 +1,445 @@ + +.* + + +Disassembly of section \.iplt: + +00009000 <f7-0x3c>: +#------------------------------------------------------------------------------ +#------ f1's .iplt entry +#------------------------------------------------------------------------------ + 9000: e28fc600 add ip, pc, #0 + 9004: e28cca08 add ip, ip, #32768 ; 0x8000 + 9008: e5bcf004 ldr pc, \[ip, #4\]! +#------------------------------------------------------------------------------ +#------ f2's .iplt entry +#------------------------------------------------------------------------------ + 900c: e28fc600 add ip, pc, #0 + 9010: e28cca07 add ip, ip, #28672 ; 0x7000 + 9014: e5bcfffc ldr pc, \[ip, #4092\]! ; 0xffc +#------------------------------------------------------------------------------ +#------ thumb entry to f3's .iplt entry +#------------------------------------------------------------------------------ + 9018: 4778 bx pc + 901a: 46c0 nop ; \(mov r8, r8\) +#------------------------------------------------------------------------------ +#------ f3's .iplt entry +#------------------------------------------------------------------------------ + 901c: e28fc600 add ip, pc, #0 + 9020: e28cca07 add ip, ip, #28672 ; 0x7000 + 9024: e5bcfff0 ldr pc, \[ip, #4080\]! ; 0xff0 +#------------------------------------------------------------------------------ +#------ thumb entry to f4's .iplt entry +#------------------------------------------------------------------------------ + 9028: 4778 bx pc + 902a: 46c0 nop ; \(mov r8, r8\) +#------------------------------------------------------------------------------ +#------ f4's .iplt entry +#------------------------------------------------------------------------------ + 902c: e28fc600 add ip, pc, #0 + 9030: e28cca07 add ip, ip, #28672 ; 0x7000 + 9034: e5bcffe4 ldr pc, \[ip, #4068\]! ; 0xfe4 +#------------------------------------------------------------------------------ +#------ thumb entry to f7 +#------------------------------------------------------------------------------ + 9038: 4778 bx pc + 903a: 46c0 nop ; \(mov r8, r8\) + +0000903c <f7>: + 903c: e28fc600 add ip, pc, #0 + 9040: e28cca07 add ip, ip, #28672 ; 0x7000 + 9044: e5bcffd8 ldr pc, \[ip, #4056\]! ; 0xfd8 + +00009048 <f5>: + 9048: e28fc600 add ip, pc, #0 + 904c: e28cca07 add ip, ip, #28672 ; 0x7000 + 9050: e5bcffd0 ldr pc, \[ip, #4048\]! ; 0xfd0 +#------------------------------------------------------------------------------ +#------ thumb entry to f8 +#------------------------------------------------------------------------------ + 9054: 4778 bx pc + 9056: 46c0 nop ; \(mov r8, r8\) + +00009058 <f8>: + 9058: e28fc600 add ip, pc, #0 + 905c: e28cca07 add ip, ip, #28672 ; 0x7000 + 9060: e5bcffc4 ldr pc, \[ip, #4036\]! ; 0xfc4 + +00009064 <f6>: + 9064: e28fc600 add ip, pc, #0 + 9068: e28cca07 add ip, ip, #28672 ; 0x7000 + 906c: e5bcffbc ldr pc, \[ip, #4028\]! ; 0xfbc + +Disassembly of section \.text: + +0000a000 <f1>: + a000: e1a0f00e mov pc, lr + +0000a004 <f2>: + a004: 46f7 mov pc, lr + \.\.\. + +0000a008 <f3>: + a008: e1a0f00e mov pc, lr + +0000a00c <f4>: + a00c: 46f7 mov pc, lr + a00e: 0000 movs r0, r0 + a010: e1a0f00e mov pc, lr + a014: 46f7 mov pc, lr + a016: 0000 movs r0, r0 + a018: e1a0f00e mov pc, lr + a01c: 46f7 mov pc, lr + \.\.\. + +0000a020 <_start>: + a020: eb0017f6 bl 10000 <foo> + a024: ea0017f5 b 10000 <foo> + a028: 0a0017f4 beq 10000 <foo> + a02c: e59f4014 ldr r4, \[pc, #20\] ; a048 <_start\+0x28> + a030: e59f4014 ldr r4, \[pc, #20\] ; a04c <_start\+0x2c> + a034: e59f4014 ldr r4, \[pc, #20\] ; a050 <_start\+0x30> + a038: e59f4014 ldr r4, \[pc, #20\] ; a054 <_start\+0x34> + a03c: e59f5014 ldr r5, \[pc, #20\] ; a058 <_start\+0x38> + a040: e3004000 movw r4, #0 + a044: e3404001 movt r4, #1 +#------------------------------------------------------------------------------ +#------ foo +#------------------------------------------------------------------------------ + a048: 00010000 \.word 0x00010000 +#------------------------------------------------------------------------------ +#------ PC-relative offset of foo +#------------------------------------------------------------------------------ + a04c: 00005fb4 \.word 0x00005fb4 +#------------------------------------------------------------------------------ +#------ GP-relative offset of foo +#------------------------------------------------------------------------------ + a050: fffff000 \.word 0xfffff000 +#------------------------------------------------------------------------------ +#------ .got offset for foo +#------------------------------------------------------------------------------ + a054: 00000040 \.word 0x00000040 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for foo +#------------------------------------------------------------------------------ + a058: 00006fd4 \.word 0x00006fd4 +#------------------------------------------------------------------------------ +#------ f1's .iplt entry +#------------------------------------------------------------------------------ + a05c: ebfffbe7 bl 9000 <f7-0x3c> +#------------------------------------------------------------------------------ +#------ f1's .iplt entry +#------------------------------------------------------------------------------ + a060: eafffbe6 b 9000 <f7-0x3c> +#------------------------------------------------------------------------------ +#------ f1's .iplt entry +#------------------------------------------------------------------------------ + a064: 0afffbe5 beq 9000 <f7-0x3c> + a068: e59f4014 ldr r4, \[pc, #20\] ; a084 <_start\+0x64> + a06c: e59f4014 ldr r4, \[pc, #20\] ; a088 <_start\+0x68> + a070: e59f4014 ldr r4, \[pc, #20\] ; a08c <_start\+0x6c> + a074: e59f4014 ldr r4, \[pc, #20\] ; a090 <_start\+0x70> + a078: e59f5014 ldr r5, \[pc, #20\] ; a094 <_start\+0x74> + a07c: e3094000 movw r4, #36864 ; 0x9000 + a080: e3404000 movt r4, #0 +#------------------------------------------------------------------------------ +#------ f1's .iplt entry +#------------------------------------------------------------------------------ + a084: 00009000 \.word 0x00009000 +#------------------------------------------------------------------------------ +#------ PC-relative offset of f1's .iplt entry +#------------------------------------------------------------------------------ + a088: ffffef78 \.word 0xffffef78 +#------------------------------------------------------------------------------ +#------ GP-relative offset of f1's .iplt entry +#------------------------------------------------------------------------------ + a08c: ffff8000 \.word 0xffff8000 +#------------------------------------------------------------------------------ +#------ .got offset for f1's .iplt entry +#------------------------------------------------------------------------------ + a090: 00000030 \.word 0x00000030 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for f1's .iplt entry +#------------------------------------------------------------------------------ + a094: 00006f9c \.word 0x00006f9c +#------------------------------------------------------------------------------ +#------ f2's .iplt entry +#------------------------------------------------------------------------------ + a098: ebfffbdb bl 900c <f7-0x30> +#------------------------------------------------------------------------------ +#------ f2's .iplt entry +#------------------------------------------------------------------------------ + a09c: eafffbda b 900c <f7-0x30> +#------------------------------------------------------------------------------ +#------ f2's .iplt entry +#------------------------------------------------------------------------------ + a0a0: 0afffbd9 beq 900c <f7-0x30> + a0a4: e59f4014 ldr r4, \[pc, #20\] ; a0c0 <_start\+0xa0> + a0a8: e59f4014 ldr r4, \[pc, #20\] ; a0c4 <_start\+0xa4> + a0ac: e59f4014 ldr r4, \[pc, #20\] ; a0c8 <_start\+0xa8> + a0b0: e59f4014 ldr r4, \[pc, #20\] ; a0cc <_start\+0xac> + a0b4: e59f5014 ldr r5, \[pc, #20\] ; a0d0 <_start\+0xb0> + a0b8: e309400c movw r4, #36876 ; 0x900c + a0bc: e3404000 movt r4, #0 +#------------------------------------------------------------------------------ +#------ f2's .iplt entry +#------------------------------------------------------------------------------ + a0c0: 0000900c \.word 0x0000900c +#------------------------------------------------------------------------------ +#------ PC-relative offset of f2's .iplt entry +#------------------------------------------------------------------------------ + a0c4: ffffef48 \.word 0xffffef48 +#------------------------------------------------------------------------------ +#------ GP-relative offset of f2's .iplt entry +#------------------------------------------------------------------------------ + a0c8: ffff800c \.word 0xffff800c +#------------------------------------------------------------------------------ +#------ .got offset for f2's .iplt entry +#------------------------------------------------------------------------------ + a0cc: 00000034 \.word 0x00000034 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for f2's .iplt entry +#------------------------------------------------------------------------------ + a0d0: 00006f64 \.word 0x00006f64 + a0d4: ebfffbdb bl 9048 <f5> + a0d8: eafffbda b 9048 <f5> + a0dc: 0afffbd9 beq 9048 <f5> + a0e0: e59f4014 ldr r4, \[pc, #20\] ; a0fc <_start\+0xdc> + a0e4: e59f4014 ldr r4, \[pc, #20\] ; a100 <_start\+0xe0> + a0e8: e59f4014 ldr r4, \[pc, #20\] ; a104 <_start\+0xe4> + a0ec: e59f4014 ldr r4, \[pc, #20\] ; a108 <_start\+0xe8> + a0f0: e59f5014 ldr r5, \[pc, #20\] ; a10c <_start\+0xec> + a0f4: e3094048 movw r4, #36936 ; 0x9048 + a0f8: e3404000 movt r4, #0 +#------------------------------------------------------------------------------ +#------ f5 +#------------------------------------------------------------------------------ + a0fc: 00009048 \.word 0x00009048 +#------------------------------------------------------------------------------ +#------ PC-relative offset of f5 +#------------------------------------------------------------------------------ + a100: ffffef48 \.word 0xffffef48 +#------------------------------------------------------------------------------ +#------ GP-relative offset of f5 +#------------------------------------------------------------------------------ + a104: ffff8048 \.word 0xffff8048 +#------------------------------------------------------------------------------ +#------ .got offset for f5 +#------------------------------------------------------------------------------ + a108: 00000048 \.word 0x00000048 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for f5 +#------------------------------------------------------------------------------ + a10c: 00006f3c \.word 0x00006f3c + a110: ebfffbd3 bl 9064 <f6> + a114: eafffbd2 b 9064 <f6> + a118: 0afffbd1 beq 9064 <f6> + a11c: e59f4014 ldr r4, \[pc, #20\] ; a138 <_start\+0x118> + a120: e59f4014 ldr r4, \[pc, #20\] ; a13c <_start\+0x11c> + a124: e59f4014 ldr r4, \[pc, #20\] ; a140 <_start\+0x120> + a128: e59f4014 ldr r4, \[pc, #20\] ; a144 <_start\+0x124> + a12c: e59f5014 ldr r5, \[pc, #20\] ; a148 <_start\+0x128> + a130: e3094064 movw r4, #36964 ; 0x9064 + a134: e3404000 movt r4, #0 +#------------------------------------------------------------------------------ +#------ f6 +#------------------------------------------------------------------------------ + a138: 00009064 \.word 0x00009064 +#------------------------------------------------------------------------------ +#------ PC-relative offset of f6 +#------------------------------------------------------------------------------ + a13c: ffffef28 \.word 0xffffef28 +#------------------------------------------------------------------------------ +#------ GP-relative offset of f6 +#------------------------------------------------------------------------------ + a140: ffff8064 \.word 0xffff8064 +#------------------------------------------------------------------------------ +#------ .got offset for f6 +#------------------------------------------------------------------------------ + a144: 00000050 \.word 0x00000050 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for f6 +#------------------------------------------------------------------------------ + a148: 00006f08 \.word 0x00006f08 + +0000a14c <_thumb>: + a14c: f005 ff58 bl 10000 <foo> + a150: f005 bf56 b\.w 10000 <foo> + a154: f005 8754 beq\.w 10000 <foo> + a158: 4c04 ldr r4, \[pc, #16\] ; \(a16c <_thumb\+0x20>\) + a15a: f8df 4014 ldr\.w r4, \[pc, #20\] ; a170 <_thumb\+0x24> + a15e: 4c05 ldr r4, \[pc, #20\] ; \(a174 <_thumb\+0x28>\) + a160: 4c05 ldr r4, \[pc, #20\] ; \(a178 <_thumb\+0x2c>\) + a162: 4d06 ldr r5, \[pc, #24\] ; \(a17c <_thumb\+0x30>\) + a164: f240 0400 movw r4, #0 + a168: f2c0 0401 movt r4, #1 +#------------------------------------------------------------------------------ +#------ foo +#------------------------------------------------------------------------------ + a16c: 00010000 \.word 0x00010000 +#------------------------------------------------------------------------------ +#------ PC-relative offset of foo +#------------------------------------------------------------------------------ + a170: 00005e90 \.word 0x00005e90 +#------------------------------------------------------------------------------ +#------ GP-relative offset of foo +#------------------------------------------------------------------------------ + a174: fffff000 \.word 0xfffff000 +#------------------------------------------------------------------------------ +#------ .got offset for foo +#------------------------------------------------------------------------------ + a178: 00000040 \.word 0x00000040 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for foo +#------------------------------------------------------------------------------ + a17c: 00006eb0 \.word 0x00006eb0 +#------------------------------------------------------------------------------ +#------ f3's .iplt entry +#------------------------------------------------------------------------------ + a180: f7fe ef4c blx 901c <f7-0x20> +#------------------------------------------------------------------------------ +#------ thumb entry to f3's .iplt entry +#------------------------------------------------------------------------------ + a184: f7fe bf48 b\.w 9018 <f7-0x24> +#------------------------------------------------------------------------------ +#------ thumb entry to f3's .iplt entry +#------------------------------------------------------------------------------ + a188: f43e af46 beq\.w 9018 <f7-0x24> + a18c: 4c04 ldr r4, \[pc, #16\] ; \(a1a0 <_thumb\+0x54>\) + a18e: f8df 4014 ldr\.w r4, \[pc, #20\] ; a1a4 <_thumb\+0x58> + a192: 4c05 ldr r4, \[pc, #20\] ; \(a1a8 <_thumb\+0x5c>\) + a194: 4c05 ldr r4, \[pc, #20\] ; \(a1ac <_thumb\+0x60>\) + a196: 4d06 ldr r5, \[pc, #24\] ; \(a1b0 <_thumb\+0x64>\) + a198: f249 041c movw r4, #36892 ; 0x901c + a19c: f2c0 0400 movt r4, #0 +#------------------------------------------------------------------------------ +#------ f3's .iplt entry +#------------------------------------------------------------------------------ + a1a0: 0000901c \.word 0x0000901c +#------------------------------------------------------------------------------ +#------ PC-relative offset of f3's .iplt entry +#------------------------------------------------------------------------------ + a1a4: ffffee78 \.word 0xffffee78 +#------------------------------------------------------------------------------ +#------ GP-relative offset of f3's .iplt entry +#------------------------------------------------------------------------------ + a1a8: ffff801c \.word 0xffff801c +#------------------------------------------------------------------------------ +#------ .got offset for f3's .iplt entry +#------------------------------------------------------------------------------ + a1ac: 00000038 \.word 0x00000038 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for f3's .iplt entry +#------------------------------------------------------------------------------ + a1b0: 00006e88 \.word 0x00006e88 +#------------------------------------------------------------------------------ +#------ f4's .iplt entry +#------------------------------------------------------------------------------ + a1b4: f7fe ef3a blx 902c <f7-0x10> +#------------------------------------------------------------------------------ +#------ thumb entry to f4's .iplt entry +#------------------------------------------------------------------------------ + a1b8: f7fe bf36 b\.w 9028 <f7-0x14> +#------------------------------------------------------------------------------ +#------ thumb entry to f4's .iplt entry +#------------------------------------------------------------------------------ + a1bc: f43e af34 beq\.w 9028 <f7-0x14> + a1c0: 4c04 ldr r4, \[pc, #16\] ; \(a1d4 <_thumb\+0x88>\) + a1c2: f8df 4014 ldr\.w r4, \[pc, #20\] ; a1d8 <_thumb\+0x8c> + a1c6: 4c05 ldr r4, \[pc, #20\] ; \(a1dc <_thumb\+0x90>\) + a1c8: 4c05 ldr r4, \[pc, #20\] ; \(a1e0 <_thumb\+0x94>\) + a1ca: 4d06 ldr r5, \[pc, #24\] ; \(a1e4 <_thumb\+0x98>\) + a1cc: f249 042c movw r4, #36908 ; 0x902c + a1d0: f2c0 0400 movt r4, #0 +#------------------------------------------------------------------------------ +#------ f4's .iplt entry +#------------------------------------------------------------------------------ + a1d4: 0000902c \.word 0x0000902c +#------------------------------------------------------------------------------ +#------ PC-relative offset of f4's .iplt entry +#------------------------------------------------------------------------------ + a1d8: ffffee54 \.word 0xffffee54 +#------------------------------------------------------------------------------ +#------ GP-relative offset of f4's .iplt entry +#------------------------------------------------------------------------------ + a1dc: ffff802c \.word 0xffff802c +#------------------------------------------------------------------------------ +#------ .got offset for f4's .iplt entry +#------------------------------------------------------------------------------ + a1e0: 0000003c \.word 0x0000003c +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for f4's .iplt entry +#------------------------------------------------------------------------------ + a1e4: 00006e58 \.word 0x00006e58 + a1e8: f7fe ef28 blx 903c <f7> +#------------------------------------------------------------------------------ +#------ thumb entry to f7 +#------------------------------------------------------------------------------ + a1ec: f7fe bf24 b\.w 9038 <f7-0x4> +#------------------------------------------------------------------------------ +#------ thumb entry to f7 +#------------------------------------------------------------------------------ + a1f0: f43e af22 beq\.w 9038 <f7-0x4> + a1f4: 4c04 ldr r4, \[pc, #16\] ; \(a208 <_thumb\+0xbc>\) + a1f6: f8df 4014 ldr\.w r4, \[pc, #20\] ; a20c <_thumb\+0xc0> + a1fa: 4c05 ldr r4, \[pc, #20\] ; \(a210 <_thumb\+0xc4>\) + a1fc: 4c05 ldr r4, \[pc, #20\] ; \(a214 <_thumb\+0xc8>\) + a1fe: 4d06 ldr r5, \[pc, #24\] ; \(a218 <_thumb\+0xcc>\) + a200: f249 043c movw r4, #36924 ; 0x903c + a204: f2c0 0400 movt r4, #0 +#------------------------------------------------------------------------------ +#------ f7 +#------------------------------------------------------------------------------ + a208: 0000903c \.word 0x0000903c +#------------------------------------------------------------------------------ +#------ PC-relative offset of f7 +#------------------------------------------------------------------------------ + a20c: ffffee30 \.word 0xffffee30 +#------------------------------------------------------------------------------ +#------ GP-relative offset of f7 +#------------------------------------------------------------------------------ + a210: ffff803c \.word 0xffff803c +#------------------------------------------------------------------------------ +#------ .got offset for f7 +#------------------------------------------------------------------------------ + a214: 00000044 \.word 0x00000044 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for f7 +#------------------------------------------------------------------------------ + a218: 00006e2c \.word 0x00006e2c + a21c: f7fe ef1c blx 9058 <f8> +#------------------------------------------------------------------------------ +#------ thumb entry to f8 +#------------------------------------------------------------------------------ + a220: f7fe bf18 b\.w 9054 <f5\+0xc> +#------------------------------------------------------------------------------ +#------ thumb entry to f8 +#------------------------------------------------------------------------------ + a224: f43e af16 beq\.w 9054 <f5\+0xc> + a228: 4c04 ldr r4, \[pc, #16\] ; \(a23c <_thumb\+0xf0>\) + a22a: f8df 4014 ldr\.w r4, \[pc, #20\] ; a240 <_thumb\+0xf4> + a22e: 4c05 ldr r4, \[pc, #20\] ; \(a244 <_thumb\+0xf8>\) + a230: 4c05 ldr r4, \[pc, #20\] ; \(a248 <_thumb\+0xfc>\) + a232: 4d06 ldr r5, \[pc, #24\] ; \(a24c <_thumb\+0x100>\) + a234: f249 0458 movw r4, #36952 ; 0x9058 + a238: f2c0 0400 movt r4, #0 +#------------------------------------------------------------------------------ +#------ f8 +#------------------------------------------------------------------------------ + a23c: 00009058 \.word 0x00009058 +#------------------------------------------------------------------------------ +#------ PC-relative offset of f8 +#------------------------------------------------------------------------------ + a240: ffffee18 \.word 0xffffee18 +#------------------------------------------------------------------------------ +#------ GP-relative offset of f8 +#------------------------------------------------------------------------------ + a244: ffff8058 \.word 0xffff8058 +#------------------------------------------------------------------------------ +#------ .got offset for f8 +#------------------------------------------------------------------------------ + a248: 0000004c \.word 0x0000004c +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for f8 +#------------------------------------------------------------------------------ + a24c: 00006e00 \.word 0x00006e00 diff --git a/ld/testsuite/ld-arm/ifunc-2.gd b/ld/testsuite/ld-arm/ifunc-2.gd new file mode 100644 index 0000000..0917a75 --- /dev/null +++ b/ld/testsuite/ld-arm/ifunc-2.gd @@ -0,0 +1,48 @@ + +.* + +Contents of section \.data: +#------------------------------------------------------------------------------ +#------ 00010000: foo +#------------------------------------------------------------------------------ + 10000 44332211 .* +Contents of section \.got: +#------------------------------------------------------------------------------ +#------ 00011000: .got.plt +#------ 00011004: reserved .got.plt entry +#------ 00011008: reserved .got.plt entry +#------ 0001100c: f1's .igot.plt entry [R_ARM_IRELATIVE] +#------------------------------------------------------------------------------ + 11000 00000000 00000000 00000000 00a00000 .* +#------------------------------------------------------------------------------ +#------ 00011010: f2's .igot.plt entry [R_ARM_IRELATIVE] +#------ 00011014: f3's .igot.plt entry [R_ARM_IRELATIVE] +#------ 00011018: f4's .igot.plt entry [R_ARM_IRELATIVE] +#------ 0001101c: f7's .igot.plt pointer to 0xa018 [R_ARM_IRELATIVE] +#------------------------------------------------------------------------------ + 11010 05a00000 08a00000 0da00000 18a00000 .* +#------------------------------------------------------------------------------ +#------ 00011020: f5's .igot.plt pointer to 0xa010 [R_ARM_IRELATIVE] +#------ 00011024: f8's .igot.plt pointer to 0xa01d [R_ARM_IRELATIVE] +#------ 00011028: f6's .igot.plt pointer to 0xa015 [R_ARM_IRELATIVE] +#------ 0001102c: .got entry for foo +#------------------------------------------------------------------------------ + 11020 10a00000 1da00000 15a00000 00000100 .* +#------------------------------------------------------------------------------ +#------ 00011030: .got entry for f1's .iplt entry +#------ 00011034: .got entry for f2's .iplt entry +#------ 00011038: .got entry for f3's .iplt entry +#------ 0001103c: .got entry for f4's .iplt entry +#------------------------------------------------------------------------------ + 11030 00900000 0c900000 1c900000 2c900000 .* +#------------------------------------------------------------------------------ +#------ 00011040: .got entry for foo +#------ 00011044: .got entry for f7 +#------ 00011048: .got entry for f5 +#------ 0001104c: .got entry for f8 +#------------------------------------------------------------------------------ + 11040 00000100 3c900000 48900000 58900000 .* +#------------------------------------------------------------------------------ +#------ 00011050: .got entry for f6 +#------------------------------------------------------------------------------ + 11050 64900000 .* diff --git a/ld/testsuite/ld-arm/ifunc-2.rd b/ld/testsuite/ld-arm/ifunc-2.rd new file mode 100644 index 0000000..92b000a --- /dev/null +++ b/ld/testsuite/ld-arm/ifunc-2.rd @@ -0,0 +1,13 @@ + +There is no dynamic section in this file\. + +Relocation section '\.rel\.dyn' at offset 0x8000 contains 8 entries: + Offset Info Type Sym\.Value Sym\. Name +0001100c ......a0 R_ARM_IRELATIVE +00011010 ......a0 R_ARM_IRELATIVE +00011014 ......a0 R_ARM_IRELATIVE +00011018 ......a0 R_ARM_IRELATIVE +0001101c ......a0 R_ARM_IRELATIVE +00011020 ......a0 R_ARM_IRELATIVE +00011024 ......a0 R_ARM_IRELATIVE +00011028 ......a0 R_ARM_IRELATIVE diff --git a/ld/testsuite/ld-arm/ifunc-2.s b/ld/testsuite/ld-arm/ifunc-2.s new file mode 100644 index 0000000..8834fbc --- /dev/null +++ b/ld/testsuite/ld-arm/ifunc-2.s @@ -0,0 +1,74 @@ + .syntax unified + .arch armv6t2 + + .macro define,name,type + .type \name,%gnu_indirect_function + \type +\name: + mov pc,lr + .size \name,.-\name + .endm + + .macro test_relocs,name,width + bl\width \name + b\width \name + beq\width \name + ldr r4,1f + ldr r4,2f + ldr r4,3f + ldr r4,4f + ldr r5,5f + movw r4,#:lower16:\name + movt r4,#:upper16:\name +1: + .word \name +2: + .word \name-. +3: + .word \name(GOTOFF) +4: + .word \name(GOT) +5: + .word \name(GOT_PREL) + .endm + + define f1,.arm + define f2,.thumb_func + define f3,.arm + define f4,.thumb_func + + .globl f5 + .globl f6 + .globl f7 + .globl f8 + + define f5,.arm + define f6,.thumb_func + define f7,.arm + define f8,.thumb_func + + .globl _start + .type _start,%function + .arm +_start: + test_relocs foo + test_relocs f1, + test_relocs f2, + test_relocs f5, + test_relocs f6, + .size _start,.-_start + + .globl _thumb + .type _thumb,%function + .thumb_func +_thumb: + test_relocs foo + test_relocs f3,.w + test_relocs f4,.w + test_relocs f7,.w + test_relocs f8,.w + .size _thumb,.-_thumb + + .data +foo: + .word 0x11223344 diff --git a/ld/testsuite/ld-arm/ifunc-3.dd b/ld/testsuite/ld-arm/ifunc-3.dd new file mode 100644 index 0000000..1a4f52c --- /dev/null +++ b/ld/testsuite/ld-arm/ifunc-3.dd @@ -0,0 +1,126 @@ + +.* + + +Disassembly of section \.plt: + +00009000 <\.plt>: + 9000: e52de004 push {lr} ; \(str lr, \[sp, #-4\]!\) + 9004: e59fe004 ldr lr, \[pc, #4\] ; 9010 <f1-0xff0> + 9008: e08fe00e add lr, pc, lr + 900c: e5bef008 ldr pc, \[lr, #8\]! +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got.plt +#------------------------------------------------------------------------------ + 9010: 00007ff0 \.word 0x00007ff0 +#------------------------------------------------------------------------------ +#------ f2's .plt entry +#------------------------------------------------------------------------------ + 9014: e28fc600 add ip, pc, #0 + 9018: e28cca07 add ip, ip, #28672 ; 0x7000 + 901c: e5bcfff0 ldr pc, \[ip, #4080\]! ; 0xff0 + +Disassembly of section \.iplt: + +00009020 <\.iplt>: +#------------------------------------------------------------------------------ +#------ f1's .iplt entry +#------------------------------------------------------------------------------ + 9020: e28fc600 add ip, pc, #0 + 9024: e28cca07 add ip, ip, #28672 ; 0x7000 + 9028: e5bcffe8 ldr pc, \[ip, #4072\]! ; 0xfe8 +#------------------------------------------------------------------------------ +#------ f3's .iplt entry +#------------------------------------------------------------------------------ + 902c: e28fc600 add ip, pc, #0 + 9030: e28cca07 add ip, ip, #28672 ; 0x7000 + 9034: e5bcffe0 ldr pc, \[ip, #4064\]! ; 0xfe0 +#------------------------------------------------------------------------------ +#------ f4's .iplt entry +#------------------------------------------------------------------------------ + 9038: e28fc600 add ip, pc, #0 + 903c: e28cca07 add ip, ip, #28672 ; 0x7000 + 9040: e5bcffd8 ldr pc, \[ip, #4056\]! ; 0xfd8 + +Disassembly of section \.text: + +0000a000 <f1>: + a000: e1a0f00e mov pc, lr + +0000a004 <f2>: + a004: e1a0f00e mov pc, lr + +0000a008 <f3>: + a008: e1a0f00e mov pc, lr + +0000a00c <f4>: + a00c: e1a0f00e mov pc, lr + +0000a010 <arm>: + a010: eb0017fa bl 10000 <foo> + a014: e59f4000 ldr r4, \[pc, #0\] ; a01c <arm\+0xc> + a018: e59f4000 ldr r4, \[pc, #0\] ; a020 <arm\+0x10> +#------------------------------------------------------------------------------ +#------ .got offset for foo +#------------------------------------------------------------------------------ + a01c: 00000020 \.word 0x00000020 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for foo +#------------------------------------------------------------------------------ + a020: 00006ffc \.word 0x00006ffc +#------------------------------------------------------------------------------ +#------ f1's .iplt entry +#------------------------------------------------------------------------------ + a024: ebfffbfd bl 9020 <f1-0xfe0> + a028: e59f4000 ldr r4, \[pc, #0\] ; a030 <arm\+0x20> + a02c: e59f4000 ldr r4, \[pc, #0\] ; a034 <arm\+0x24> +#------------------------------------------------------------------------------ +#------ GP-relative offset of f1's .igot.plt entry +#------------------------------------------------------------------------------ + a030: 00000010 \.word 0x00000010 +#------------------------------------------------------------------------------ +#------ PC-relative offset of f1's .igot.plt entry +#------------------------------------------------------------------------------ + a034: 00006fdc \.word 0x00006fdc +#------------------------------------------------------------------------------ +#------ f2's .plt entry +#------------------------------------------------------------------------------ + a038: ebfffbf5 bl 9014 <f1-0xfec> + a03c: e59f4000 ldr r4, \[pc, #0\] ; a044 <arm\+0x34> + a040: e59f4000 ldr r4, \[pc, #0\] ; a048 <arm\+0x38> +#------------------------------------------------------------------------------ +#------ .got offset for f2 +#------------------------------------------------------------------------------ + a044: 00000024 \.word 0x00000024 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for f2 +#------------------------------------------------------------------------------ + a048: 00006fdc \.word 0x00006fdc +#------------------------------------------------------------------------------ +#------ f3's .iplt entry +#------------------------------------------------------------------------------ + a04c: ebfffbf6 bl 902c <f1-0xfd4> + a050: e59f4000 ldr r4, \[pc, #0\] ; a058 <arm\+0x48> + a054: e59f4000 ldr r4, \[pc, #0\] ; a05c <arm\+0x4c> +#------------------------------------------------------------------------------ +#------ GP-relative offset of f3's .igot.plt entry +#------------------------------------------------------------------------------ + a058: 00000014 \.word 0x00000014 +#------------------------------------------------------------------------------ +#------ PC-relative offset of f3's .igot.plt entry +#------------------------------------------------------------------------------ + a05c: 00006fb8 \.word 0x00006fb8 +#------------------------------------------------------------------------------ +#------ f4's .iplt entry +#------------------------------------------------------------------------------ + a060: ebfffbf4 bl 9038 <f1-0xfc8> + a064: e59f4000 ldr r4, \[pc, #0\] ; a06c <arm\+0x5c> + a068: e59f4000 ldr r4, \[pc, #0\] ; a070 <arm\+0x60> +#------------------------------------------------------------------------------ +#------ .got offset for f4 +#------------------------------------------------------------------------------ + a06c: 00000028 \.word 0x00000028 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for f4 +#------------------------------------------------------------------------------ + a070: 00006fb8 \.word 0x00006fb8 diff --git a/ld/testsuite/ld-arm/ifunc-3.gd b/ld/testsuite/ld-arm/ifunc-3.gd new file mode 100644 index 0000000..db7fd42 --- /dev/null +++ b/ld/testsuite/ld-arm/ifunc-3.gd @@ -0,0 +1,45 @@ + +.* + +Contents of section \.data: +#------------------------------------------------------------------------------ +#------ 00010000: foo +#------ 00010004: contains foo [R_ARM_RELATIVE] +#------ 00010008: contains PC-relative offset of foo +#------ 0001000c: contains f1 [R_ARM_IRELATIVE] +#------------------------------------------------------------------------------ + 10000 44332211 00000100 f8ffffff 00a00000 .* +#------------------------------------------------------------------------------ +#------ 00010010: contains PC-relative offset of f1's .iplt entry +#------ 00010014: f2 [R_ARM_ABS32] +#------ 00010018: f2 [R_ARM_REL32] +#------ 0001001c: contains f3 [R_ARM_IRELATIVE] +#------------------------------------------------------------------------------ + 10010 1090ffff 00000000 00000000 08a00000 .* +#------------------------------------------------------------------------------ +#------ 00010020: contains PC-relative offset of f3's .iplt entry +#------ 00010024: f4 [R_ARM_ABS32] +#------ 00010028: contains PC-relative offset of f4's .iplt entry +#------------------------------------------------------------------------------ + 10020 0c90ffff 00000000 1090ffff .* +Contents of section \.got: +#------------------------------------------------------------------------------ +#------ 00011000: .got.plt +#------ 00011004: reserved .got.plt entry +#------ 00011008: reserved .got.plt entry +#------ 0001100c: f2's .got.plt entry [R_ARM_JUMP_SLOT] +#------------------------------------------------------------------------------ + 11000 00200100 00000000 00000000 00900000 .* +#------------------------------------------------------------------------------ +#------ 00011010: f1's .igot.plt entry [R_ARM_IRELATIVE] +#------ 00011014: f3's .igot.plt entry [R_ARM_IRELATIVE] +#------ 00011018: f4's .igot.plt entry [R_ARM_IRELATIVE] +#------ 0001101c: .got entry for foo [R_ARM_RELATIVE] +#------------------------------------------------------------------------------ + 11010 00a00000 08a00000 0ca00000 00000100 .* +#------------------------------------------------------------------------------ +#------ 00011020: .got entry for foo [R_ARM_RELATIVE] +#------ 00011024: .got entry for f2 [R_ARM_GLOB_DAT] +#------ 00011028: .got entry for f4 [R_ARM_GLOB_DAT] +#------------------------------------------------------------------------------ + 11020 00000100 00000000 00000000 .* diff --git a/ld/testsuite/ld-arm/ifunc-3.rd b/ld/testsuite/ld-arm/ifunc-3.rd new file mode 100644 index 0000000..4acb314 --- /dev/null +++ b/ld/testsuite/ld-arm/ifunc-3.rd @@ -0,0 +1,20 @@ + +Relocation section '\.rel\.dyn' at offset 0x8000 contains 13 entries: + Offset Info Type Sym\.Value Sym\. Name +00010004 ......17 R_ARM_RELATIVE +0001101c ......17 R_ARM_RELATIVE +00011020 ......17 R_ARM_RELATIVE +0001000c ......a0 R_ARM_IRELATIVE +0001001c ......a0 R_ARM_IRELATIVE +00011010 ......a0 R_ARM_IRELATIVE +00011014 ......a0 R_ARM_IRELATIVE +00011018 ......a0 R_ARM_IRELATIVE +00010014 ......02 R_ARM_ABS32 f2\(\) f2 +00010018 ......03 R_ARM_REL32 f2\(\) f2 +00011024 ......15 R_ARM_GLOB_DAT f2\(\) f2 +00010024 ......02 R_ARM_ABS32 f4\(\) f4 +00011028 ......15 R_ARM_GLOB_DAT f4\(\) f4 + +Relocation section '\.rel\.plt' at offset 0x8068 contains 1 entries: + Offset Info Type Sym\.Value Sym\. Name +0001100c ......16 R_ARM_JUMP_SLOT f2\(\) f2 diff --git a/ld/testsuite/ld-arm/ifunc-3.s b/ld/testsuite/ld-arm/ifunc-3.s new file mode 100644 index 0000000..ace3598 --- /dev/null +++ b/ld/testsuite/ld-arm/ifunc-3.s @@ -0,0 +1,49 @@ + .macro define,name + .text + .type \name,%gnu_indirect_function +\name: + mov pc,lr + .size \name,.-\name + .endm + + .macro test_relocs,name + bl \name(PLT) + ldr r4,1f + ldr r4,2f +1: + .word \name(GOT) +2: + .word \name(GOT_PREL) + + .data + .word \name + .word \name - . + .text + .endm + + .globl f2 + + .globl f3 + .hidden f3 + + .globl f4 + .protected f4 + + define f1 + define f2 + define f3 + define f4 + + .data +foo: + .word 0x11223344 + + .text + .globl arm +arm: + test_relocs foo + test_relocs f1 + test_relocs f2 + test_relocs f3 + test_relocs f4 + .size arm,.-arm diff --git a/ld/testsuite/ld-arm/ifunc-4.dd b/ld/testsuite/ld-arm/ifunc-4.dd new file mode 100644 index 0000000..f000835 --- /dev/null +++ b/ld/testsuite/ld-arm/ifunc-4.dd @@ -0,0 +1,1055 @@ + +.* + + +Disassembly of section \.plt: + +00009000 <\.plt>: + 9000: e52de004 push {lr} ; \(str lr, \[sp, #-4\]!\) + 9004: e59fe004 ldr lr, \[pc, #4\] ; 9010 <aaf1-0xff0> + 9008: e08fe00e add lr, pc, lr + 900c: e5bef008 ldr pc, \[lr, #8\]! +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got.plt +#------------------------------------------------------------------------------ + 9010: 00007ff0 \.word 0x00007ff0 +#------------------------------------------------------------------------------ +#------ thumb entry to atf2's .plt entry +#------------------------------------------------------------------------------ + 9014: 4778 bx pc + 9016: 46c0 nop ; \(mov r8, r8\) +#------------------------------------------------------------------------------ +#------ atf2's .plt entry +#------------------------------------------------------------------------------ + 9018: e28fc600 add ip, pc, #0 + 901c: e28cca07 add ip, ip, #28672 ; 0x7000 + 9020: e5bcffec ldr pc, \[ip, #4076\]! ; 0xfec +#------------------------------------------------------------------------------ +#------ thumb entry to ttf2's .plt entry +#------------------------------------------------------------------------------ + 9024: 4778 bx pc + 9026: 46c0 nop ; \(mov r8, r8\) +#------------------------------------------------------------------------------ +#------ ttf2's .plt entry +#------------------------------------------------------------------------------ + 9028: e28fc600 add ip, pc, #0 + 902c: e28cca07 add ip, ip, #28672 ; 0x7000 + 9030: e5bcffe0 ldr pc, \[ip, #4064\]! ; 0xfe0 +#------------------------------------------------------------------------------ +#------ thumb entry to tbf2's .plt entry +#------------------------------------------------------------------------------ + 9034: 4778 bx pc + 9036: 46c0 nop ; \(mov r8, r8\) +#------------------------------------------------------------------------------ +#------ tbf2's .plt entry +#------------------------------------------------------------------------------ + 9038: e28fc600 add ip, pc, #0 + 903c: e28cca07 add ip, ip, #28672 ; 0x7000 + 9040: e5bcffd4 ldr pc, \[ip, #4052\]! ; 0xfd4 +#------------------------------------------------------------------------------ +#------ taf2's .plt entry +#------------------------------------------------------------------------------ + 9044: e28fc600 add ip, pc, #0 + 9048: e28cca07 add ip, ip, #28672 ; 0x7000 + 904c: e5bcffcc ldr pc, \[ip, #4044\]! ; 0xfcc +#------------------------------------------------------------------------------ +#------ aaf2's .plt entry +#------------------------------------------------------------------------------ + 9050: e28fc600 add ip, pc, #0 + 9054: e28cca07 add ip, ip, #28672 ; 0x7000 + 9058: e5bcffc4 ldr pc, \[ip, #4036\]! ; 0xfc4 +#------------------------------------------------------------------------------ +#------ thumb entry to abf2's .plt entry +#------------------------------------------------------------------------------ + 905c: 4778 bx pc + 905e: 46c0 nop ; \(mov r8, r8\) +#------------------------------------------------------------------------------ +#------ abf2's .plt entry +#------------------------------------------------------------------------------ + 9060: e28fc600 add ip, pc, #0 + 9064: e28cca07 add ip, ip, #28672 ; 0x7000 + 9068: e5bcffb8 ldr pc, \[ip, #4024\]! ; 0xfb8 + +Disassembly of section \.iplt: + +0000906c <\.iplt>: +#------------------------------------------------------------------------------ +#------ aaf1's .iplt entry +#------------------------------------------------------------------------------ + 906c: e28fc600 add ip, pc, #0 + 9070: e28cca07 add ip, ip, #28672 ; 0x7000 + 9074: e5bcffb0 ldr pc, \[ip, #4016\]! ; 0xfb0 +#------------------------------------------------------------------------------ +#------ thumb entry to atf1's .iplt entry +#------------------------------------------------------------------------------ + 9078: 4778 bx pc + 907a: 46c0 nop ; \(mov r8, r8\) +#------------------------------------------------------------------------------ +#------ atf1's .iplt entry +#------------------------------------------------------------------------------ + 907c: e28fc600 add ip, pc, #0 + 9080: e28cca07 add ip, ip, #28672 ; 0x7000 + 9084: e5bcffa4 ldr pc, \[ip, #4004\]! ; 0xfa4 +#------------------------------------------------------------------------------ +#------ thumb entry to abf1's .iplt entry +#------------------------------------------------------------------------------ + 9088: 4778 bx pc + 908a: 46c0 nop ; \(mov r8, r8\) +#------------------------------------------------------------------------------ +#------ abf1's .iplt entry +#------------------------------------------------------------------------------ + 908c: e28fc600 add ip, pc, #0 + 9090: e28cca07 add ip, ip, #28672 ; 0x7000 + 9094: e5bcff98 ldr pc, \[ip, #3992\]! ; 0xf98 +#------------------------------------------------------------------------------ +#------ taf1's .iplt entry +#------------------------------------------------------------------------------ + 9098: e28fc600 add ip, pc, #0 + 909c: e28cca07 add ip, ip, #28672 ; 0x7000 + 90a0: e5bcff90 ldr pc, \[ip, #3984\]! ; 0xf90 +#------------------------------------------------------------------------------ +#------ thumb entry to ttf1's .iplt entry +#------------------------------------------------------------------------------ + 90a4: 4778 bx pc + 90a6: 46c0 nop ; \(mov r8, r8\) +#------------------------------------------------------------------------------ +#------ ttf1's .iplt entry +#------------------------------------------------------------------------------ + 90a8: e28fc600 add ip, pc, #0 + 90ac: e28cca07 add ip, ip, #28672 ; 0x7000 + 90b0: e5bcff84 ldr pc, \[ip, #3972\]! ; 0xf84 +#------------------------------------------------------------------------------ +#------ thumb entry to tbf1's .iplt entry +#------------------------------------------------------------------------------ + 90b4: 4778 bx pc + 90b6: 46c0 nop ; \(mov r8, r8\) +#------------------------------------------------------------------------------ +#------ tbf1's .iplt entry +#------------------------------------------------------------------------------ + 90b8: e28fc600 add ip, pc, #0 + 90bc: e28cca07 add ip, ip, #28672 ; 0x7000 + 90c0: e5bcff78 ldr pc, \[ip, #3960\]! ; 0xf78 +#------------------------------------------------------------------------------ +#------ aaf4's .iplt entry +#------------------------------------------------------------------------------ + 90c4: e28fc600 add ip, pc, #0 + 90c8: e28cca07 add ip, ip, #28672 ; 0x7000 + 90cc: e5bcff70 ldr pc, \[ip, #3952\]! ; 0xf70 +#------------------------------------------------------------------------------ +#------ thumb entry to atf3's .iplt entry +#------------------------------------------------------------------------------ + 90d0: 4778 bx pc + 90d2: 46c0 nop ; \(mov r8, r8\) +#------------------------------------------------------------------------------ +#------ atf3's .iplt entry +#------------------------------------------------------------------------------ + 90d4: e28fc600 add ip, pc, #0 + 90d8: e28cca07 add ip, ip, #28672 ; 0x7000 + 90dc: e5bcff64 ldr pc, \[ip, #3940\]! ; 0xf64 +#------------------------------------------------------------------------------ +#------ thumb entry to abf3's .iplt entry +#------------------------------------------------------------------------------ + 90e0: 4778 bx pc + 90e2: 46c0 nop ; \(mov r8, r8\) +#------------------------------------------------------------------------------ +#------ abf3's .iplt entry +#------------------------------------------------------------------------------ + 90e4: e28fc600 add ip, pc, #0 + 90e8: e28cca07 add ip, ip, #28672 ; 0x7000 + 90ec: e5bcff58 ldr pc, \[ip, #3928\]! ; 0xf58 +#------------------------------------------------------------------------------ +#------ thumb entry to ttf3's .iplt entry +#------------------------------------------------------------------------------ + 90f0: 4778 bx pc + 90f2: 46c0 nop ; \(mov r8, r8\) +#------------------------------------------------------------------------------ +#------ ttf3's .iplt entry +#------------------------------------------------------------------------------ + 90f4: e28fc600 add ip, pc, #0 + 90f8: e28cca07 add ip, ip, #28672 ; 0x7000 + 90fc: e5bcff4c ldr pc, \[ip, #3916\]! ; 0xf4c +#------------------------------------------------------------------------------ +#------ thumb entry to tbf3's .iplt entry +#------------------------------------------------------------------------------ + 9100: 4778 bx pc + 9102: 46c0 nop ; \(mov r8, r8\) +#------------------------------------------------------------------------------ +#------ tbf3's .iplt entry +#------------------------------------------------------------------------------ + 9104: e28fc600 add ip, pc, #0 + 9108: e28cca07 add ip, ip, #28672 ; 0x7000 + 910c: e5bcff40 ldr pc, \[ip, #3904\]! ; 0xf40 +#------------------------------------------------------------------------------ +#------ taf3's .iplt entry +#------------------------------------------------------------------------------ + 9110: e28fc600 add ip, pc, #0 + 9114: e28cca07 add ip, ip, #28672 ; 0x7000 + 9118: e5bcff38 ldr pc, \[ip, #3896\]! ; 0xf38 +#------------------------------------------------------------------------------ +#------ thumb entry to abf4's .iplt entry +#------------------------------------------------------------------------------ + 911c: 4778 bx pc + 911e: 46c0 nop ; \(mov r8, r8\) +#------------------------------------------------------------------------------ +#------ abf4's .iplt entry +#------------------------------------------------------------------------------ + 9120: e28fc600 add ip, pc, #0 + 9124: e28cca07 add ip, ip, #28672 ; 0x7000 + 9128: e5bcff2c ldr pc, \[ip, #3884\]! ; 0xf2c +#------------------------------------------------------------------------------ +#------ thumb entry to tbf4's .iplt entry +#------------------------------------------------------------------------------ + 912c: 4778 bx pc + 912e: 46c0 nop ; \(mov r8, r8\) +#------------------------------------------------------------------------------ +#------ tbf4's .iplt entry +#------------------------------------------------------------------------------ + 9130: e28fc600 add ip, pc, #0 + 9134: e28cca07 add ip, ip, #28672 ; 0x7000 + 9138: e5bcff20 ldr pc, \[ip, #3872\]! ; 0xf20 +#------------------------------------------------------------------------------ +#------ thumb entry to ttf4's .iplt entry +#------------------------------------------------------------------------------ + 913c: 4778 bx pc + 913e: 46c0 nop ; \(mov r8, r8\) +#------------------------------------------------------------------------------ +#------ ttf4's .iplt entry +#------------------------------------------------------------------------------ + 9140: e28fc600 add ip, pc, #0 + 9144: e28cca07 add ip, ip, #28672 ; 0x7000 + 9148: e5bcff14 ldr pc, \[ip, #3860\]! ; 0xf14 +#------------------------------------------------------------------------------ +#------ aaf3's .iplt entry +#------------------------------------------------------------------------------ + 914c: e28fc600 add ip, pc, #0 + 9150: e28cca07 add ip, ip, #28672 ; 0x7000 + 9154: e5bcff0c ldr pc, \[ip, #3852\]! ; 0xf0c +#------------------------------------------------------------------------------ +#------ thumb entry to atf4's .iplt entry +#------------------------------------------------------------------------------ + 9158: 4778 bx pc + 915a: 46c0 nop ; \(mov r8, r8\) +#------------------------------------------------------------------------------ +#------ atf4's .iplt entry +#------------------------------------------------------------------------------ + 915c: e28fc600 add ip, pc, #0 + 9160: e28cca07 add ip, ip, #28672 ; 0x7000 + 9164: e5bcff00 ldr pc, \[ip, #3840\]! ; 0xf00 +#------------------------------------------------------------------------------ +#------ taf4's .iplt entry +#------------------------------------------------------------------------------ + 9168: e28fc600 add ip, pc, #0 + 916c: e28cca07 add ip, ip, #28672 ; 0x7000 + 9170: e5bcfef8 ldr pc, \[ip, #3832\]! ; 0xef8 + +Disassembly of section \.text: + +0000a000 <aaf1>: + a000: e1a0f00e mov pc, lr + +0000a004 <atf1>: + a004: e1a0f00e mov pc, lr + +0000a008 <abf1>: + a008: e1a0f00e mov pc, lr + +0000a00c <taf1>: + a00c: 46f7 mov pc, lr + +0000a00e <ttf1>: + a00e: 46f7 mov pc, lr + +0000a010 <tbf1>: + a010: 46f7 mov pc, lr + \.\.\. + +0000a014 <aaf2>: + a014: e1a0f00e mov pc, lr + +0000a018 <atf2>: + a018: e1a0f00e mov pc, lr + +0000a01c <abf2>: + a01c: e1a0f00e mov pc, lr + +0000a020 <taf2>: + a020: 46f7 mov pc, lr + +0000a022 <ttf2>: + a022: 46f7 mov pc, lr + +0000a024 <tbf2>: + a024: 46f7 mov pc, lr + \.\.\. + +0000a028 <aaf3>: + a028: e1a0f00e mov pc, lr + +0000a02c <atf3>: + a02c: e1a0f00e mov pc, lr + +0000a030 <abf3>: + a030: e1a0f00e mov pc, lr + +0000a034 <taf3>: + a034: 46f7 mov pc, lr + +0000a036 <ttf3>: + a036: 46f7 mov pc, lr + +0000a038 <tbf3>: + a038: 46f7 mov pc, lr + \.\.\. + +0000a03c <aaf4>: + a03c: e1a0f00e mov pc, lr + +0000a040 <atf4>: + a040: e1a0f00e mov pc, lr + +0000a044 <abf4>: + a044: e1a0f00e mov pc, lr + +0000a048 <taf4>: + a048: 46f7 mov pc, lr + +0000a04a <ttf4>: + a04a: 46f7 mov pc, lr + +0000a04c <tbf4>: + a04c: 46f7 mov pc, lr + \.\.\. + +0000a050 <arm>: + a050: eb0017ea bl 10000 <foo> + a054: ea0017e9 b 10000 <foo> + a058: 0a0017e8 beq 10000 <foo> + a05c: e59f4000 ldr r4, \[pc, #0\] ; a064 <arm\+0x14> + a060: e59f4000 ldr r4, \[pc, #0\] ; a068 <arm\+0x18> +#------------------------------------------------------------------------------ +#------ .got offset for foo +#------------------------------------------------------------------------------ + a064: 00000070 \.word 0x00000070 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for foo +#------------------------------------------------------------------------------ + a068: 00007004 \.word 0x00007004 +#------------------------------------------------------------------------------ +#------ aaf1's .iplt entry +#------------------------------------------------------------------------------ + a06c: ebfffbfe bl 906c <aaf1-0xf94> +#------------------------------------------------------------------------------ +#------ aaf1's .iplt entry +#------------------------------------------------------------------------------ + a070: eafffbfd b 906c <aaf1-0xf94> +#------------------------------------------------------------------------------ +#------ aaf1's .iplt entry +#------------------------------------------------------------------------------ + a074: 0afffbfc beq 906c <aaf1-0xf94> + a078: e59f4000 ldr r4, \[pc, #0\] ; a080 <arm\+0x30> + a07c: e59f4000 ldr r4, \[pc, #0\] ; a084 <arm\+0x34> +#------------------------------------------------------------------------------ +#------ GP-relative offset of aaf1's .igot.plt entry +#------------------------------------------------------------------------------ + a080: 00000024 \.word 0x00000024 +#------------------------------------------------------------------------------ +#------ PC-relative offset of aaf1's .igot.plt entry +#------------------------------------------------------------------------------ + a084: 00006fa0 \.word 0x00006fa0 +#------------------------------------------------------------------------------ +#------ taf1's .iplt entry +#------------------------------------------------------------------------------ + a088: ebfffc02 bl 9098 <aaf1-0xf68> +#------------------------------------------------------------------------------ +#------ taf1's .iplt entry +#------------------------------------------------------------------------------ + a08c: eafffc01 b 9098 <aaf1-0xf68> +#------------------------------------------------------------------------------ +#------ taf1's .iplt entry +#------------------------------------------------------------------------------ + a090: 0afffc00 beq 9098 <aaf1-0xf68> + a094: e59f4000 ldr r4, \[pc, #0\] ; a09c <arm\+0x4c> + a098: e59f4000 ldr r4, \[pc, #0\] ; a0a0 <arm\+0x50> +#------------------------------------------------------------------------------ +#------ GP-relative offset of taf1's .igot.plt entry +#------------------------------------------------------------------------------ + a09c: 00000030 \.word 0x00000030 +#------------------------------------------------------------------------------ +#------ PC-relative offset of taf1's .igot.plt entry +#------------------------------------------------------------------------------ + a0a0: 00006f90 \.word 0x00006f90 +#------------------------------------------------------------------------------ +#------ abf1's .iplt entry +#------------------------------------------------------------------------------ + a0a4: ebfffbf8 bl 908c <aaf1-0xf74> +#------------------------------------------------------------------------------ +#------ abf1's .iplt entry +#------------------------------------------------------------------------------ + a0a8: eafffbf7 b 908c <aaf1-0xf74> +#------------------------------------------------------------------------------ +#------ abf1's .iplt entry +#------------------------------------------------------------------------------ + a0ac: 0afffbf6 beq 908c <aaf1-0xf74> + a0b0: e59f4000 ldr r4, \[pc, #0\] ; a0b8 <arm\+0x68> + a0b4: e59f4000 ldr r4, \[pc, #0\] ; a0bc <arm\+0x6c> +#------------------------------------------------------------------------------ +#------ GP-relative offset of abf1's .igot.plt entry +#------------------------------------------------------------------------------ + a0b8: 0000002c \.word 0x0000002c +#------------------------------------------------------------------------------ +#------ PC-relative offset of abf1's .igot.plt entry +#------------------------------------------------------------------------------ + a0bc: 00006f70 \.word 0x00006f70 +#------------------------------------------------------------------------------ +#------ tbf1's .iplt entry +#------------------------------------------------------------------------------ + a0c0: ebfffbfc bl 90b8 <aaf1-0xf48> +#------------------------------------------------------------------------------ +#------ tbf1's .iplt entry +#------------------------------------------------------------------------------ + a0c4: eafffbfb b 90b8 <aaf1-0xf48> +#------------------------------------------------------------------------------ +#------ tbf1's .iplt entry +#------------------------------------------------------------------------------ + a0c8: 0afffbfa beq 90b8 <aaf1-0xf48> + a0cc: e59f4000 ldr r4, \[pc, #0\] ; a0d4 <arm\+0x84> + a0d0: e59f4000 ldr r4, \[pc, #0\] ; a0d8 <arm\+0x88> +#------------------------------------------------------------------------------ +#------ GP-relative offset of tbf1's .igot.plt entry +#------------------------------------------------------------------------------ + a0d4: 00000038 \.word 0x00000038 +#------------------------------------------------------------------------------ +#------ PC-relative offset of tbf1's .igot.plt entry +#------------------------------------------------------------------------------ + a0d8: 00006f60 \.word 0x00006f60 +#------------------------------------------------------------------------------ +#------ aaf2's .plt entry +#------------------------------------------------------------------------------ + a0dc: ebfffbdb bl 9050 <aaf1-0xfb0> +#------------------------------------------------------------------------------ +#------ aaf2's .plt entry +#------------------------------------------------------------------------------ + a0e0: eafffbda b 9050 <aaf1-0xfb0> +#------------------------------------------------------------------------------ +#------ aaf2's .plt entry +#------------------------------------------------------------------------------ + a0e4: 0afffbd9 beq 9050 <aaf1-0xfb0> + a0e8: e59f4000 ldr r4, \[pc, #0\] ; a0f0 <arm\+0xa0> + a0ec: e59f4000 ldr r4, \[pc, #0\] ; a0f4 <arm\+0xa4> +#------------------------------------------------------------------------------ +#------ .got offset for aaf2 +#------------------------------------------------------------------------------ + a0f0: 00000088 \.word 0x00000088 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for aaf2 +#------------------------------------------------------------------------------ + a0f4: 00006f94 \.word 0x00006f94 +#------------------------------------------------------------------------------ +#------ taf2's .plt entry +#------------------------------------------------------------------------------ + a0f8: ebfffbd1 bl 9044 <aaf1-0xfbc> +#------------------------------------------------------------------------------ +#------ taf2's .plt entry +#------------------------------------------------------------------------------ + a0fc: eafffbd0 b 9044 <aaf1-0xfbc> +#------------------------------------------------------------------------------ +#------ taf2's .plt entry +#------------------------------------------------------------------------------ + a100: 0afffbcf beq 9044 <aaf1-0xfbc> + a104: e59f4000 ldr r4, \[pc, #0\] ; a10c <arm\+0xbc> + a108: e59f4000 ldr r4, \[pc, #0\] ; a110 <arm\+0xc0> +#------------------------------------------------------------------------------ +#------ .got offset for taf2 +#------------------------------------------------------------------------------ + a10c: 00000084 \.word 0x00000084 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for taf2 +#------------------------------------------------------------------------------ + a110: 00006f74 \.word 0x00006f74 +#------------------------------------------------------------------------------ +#------ abf2's .plt entry +#------------------------------------------------------------------------------ + a114: ebfffbd1 bl 9060 <aaf1-0xfa0> +#------------------------------------------------------------------------------ +#------ abf2's .plt entry +#------------------------------------------------------------------------------ + a118: eafffbd0 b 9060 <aaf1-0xfa0> +#------------------------------------------------------------------------------ +#------ abf2's .plt entry +#------------------------------------------------------------------------------ + a11c: 0afffbcf beq 9060 <aaf1-0xfa0> + a120: e59f4000 ldr r4, \[pc, #0\] ; a128 <arm\+0xd8> + a124: e59f4000 ldr r4, \[pc, #0\] ; a12c <arm\+0xdc> +#------------------------------------------------------------------------------ +#------ .got offset for abf2 +#------------------------------------------------------------------------------ + a128: 000000a0 \.word 0x000000a0 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for abf2 +#------------------------------------------------------------------------------ + a12c: 00006f74 \.word 0x00006f74 +#------------------------------------------------------------------------------ +#------ tbf2's .plt entry +#------------------------------------------------------------------------------ + a130: ebfffbc0 bl 9038 <aaf1-0xfc8> +#------------------------------------------------------------------------------ +#------ tbf2's .plt entry +#------------------------------------------------------------------------------ + a134: eafffbbf b 9038 <aaf1-0xfc8> +#------------------------------------------------------------------------------ +#------ tbf2's .plt entry +#------------------------------------------------------------------------------ + a138: 0afffbbe beq 9038 <aaf1-0xfc8> + a13c: e59f4000 ldr r4, \[pc, #0\] ; a144 <arm\+0xf4> + a140: e59f4000 ldr r4, \[pc, #0\] ; a148 <arm\+0xf8> +#------------------------------------------------------------------------------ +#------ .got offset for tbf2 +#------------------------------------------------------------------------------ + a144: 00000080 \.word 0x00000080 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for tbf2 +#------------------------------------------------------------------------------ + a148: 00006f38 \.word 0x00006f38 +#------------------------------------------------------------------------------ +#------ aaf3's .iplt entry +#------------------------------------------------------------------------------ + a14c: ebfffbfe bl 914c <aaf1-0xeb4> +#------------------------------------------------------------------------------ +#------ aaf3's .iplt entry +#------------------------------------------------------------------------------ + a150: eafffbfd b 914c <aaf1-0xeb4> +#------------------------------------------------------------------------------ +#------ aaf3's .iplt entry +#------------------------------------------------------------------------------ + a154: 0afffbfc beq 914c <aaf1-0xeb4> + a158: e59f4000 ldr r4, \[pc, #0\] ; a160 <arm\+0x110> + a15c: e59f4000 ldr r4, \[pc, #0\] ; a164 <arm\+0x114> +#------------------------------------------------------------------------------ +#------ GP-relative offset of aaf3's .igot.plt entry +#------------------------------------------------------------------------------ + a160: 00000060 \.word 0x00000060 +#------------------------------------------------------------------------------ +#------ PC-relative offset of aaf3's .igot.plt entry +#------------------------------------------------------------------------------ + a164: 00006efc \.word 0x00006efc +#------------------------------------------------------------------------------ +#------ taf3's .iplt entry +#------------------------------------------------------------------------------ + a168: ebfffbe8 bl 9110 <aaf1-0xef0> +#------------------------------------------------------------------------------ +#------ taf3's .iplt entry +#------------------------------------------------------------------------------ + a16c: eafffbe7 b 9110 <aaf1-0xef0> +#------------------------------------------------------------------------------ +#------ taf3's .iplt entry +#------------------------------------------------------------------------------ + a170: 0afffbe6 beq 9110 <aaf1-0xef0> + a174: e59f4000 ldr r4, \[pc, #0\] ; a17c <arm\+0x12c> + a178: e59f4000 ldr r4, \[pc, #0\] ; a180 <arm\+0x130> +#------------------------------------------------------------------------------ +#------ GP-relative offset of taf3's .igot.plt entry +#------------------------------------------------------------------------------ + a17c: 00000050 \.word 0x00000050 +#------------------------------------------------------------------------------ +#------ PC-relative offset of taf3's .igot.plt entry +#------------------------------------------------------------------------------ + a180: 00006ed0 \.word 0x00006ed0 +#------------------------------------------------------------------------------ +#------ abf3's .iplt entry +#------------------------------------------------------------------------------ + a184: ebfffbd6 bl 90e4 <aaf1-0xf1c> +#------------------------------------------------------------------------------ +#------ abf3's .iplt entry +#------------------------------------------------------------------------------ + a188: eafffbd5 b 90e4 <aaf1-0xf1c> +#------------------------------------------------------------------------------ +#------ abf3's .iplt entry +#------------------------------------------------------------------------------ + a18c: 0afffbd4 beq 90e4 <aaf1-0xf1c> + a190: e59f4000 ldr r4, \[pc, #0\] ; a198 <arm\+0x148> + a194: e59f4000 ldr r4, \[pc, #0\] ; a19c <arm\+0x14c> +#------------------------------------------------------------------------------ +#------ GP-relative offset of abf3's .igot.plt entry +#------------------------------------------------------------------------------ + a198: 00000044 \.word 0x00000044 +#------------------------------------------------------------------------------ +#------ PC-relative offset of abf3's .igot.plt entry +#------------------------------------------------------------------------------ + a19c: 00006ea8 \.word 0x00006ea8 +#------------------------------------------------------------------------------ +#------ tbf3's .iplt entry +#------------------------------------------------------------------------------ + a1a0: ebfffbd7 bl 9104 <aaf1-0xefc> +#------------------------------------------------------------------------------ +#------ tbf3's .iplt entry +#------------------------------------------------------------------------------ + a1a4: eafffbd6 b 9104 <aaf1-0xefc> +#------------------------------------------------------------------------------ +#------ tbf3's .iplt entry +#------------------------------------------------------------------------------ + a1a8: 0afffbd5 beq 9104 <aaf1-0xefc> + a1ac: e59f4000 ldr r4, \[pc, #0\] ; a1b4 <arm\+0x164> + a1b0: e59f4000 ldr r4, \[pc, #0\] ; a1b8 <arm\+0x168> +#------------------------------------------------------------------------------ +#------ GP-relative offset of tbf3's .igot.plt entry +#------------------------------------------------------------------------------ + a1b4: 0000004c \.word 0x0000004c +#------------------------------------------------------------------------------ +#------ PC-relative offset of tbf3's .igot.plt entry +#------------------------------------------------------------------------------ + a1b8: 00006e94 \.word 0x00006e94 +#------------------------------------------------------------------------------ +#------ aaf4's .iplt entry +#------------------------------------------------------------------------------ + a1bc: ebfffbc0 bl 90c4 <aaf1-0xf3c> +#------------------------------------------------------------------------------ +#------ aaf4's .iplt entry +#------------------------------------------------------------------------------ + a1c0: eafffbbf b 90c4 <aaf1-0xf3c> +#------------------------------------------------------------------------------ +#------ aaf4's .iplt entry +#------------------------------------------------------------------------------ + a1c4: 0afffbbe beq 90c4 <aaf1-0xf3c> + a1c8: e59f4000 ldr r4, \[pc, #0\] ; a1d0 <arm\+0x180> + a1cc: e59f4000 ldr r4, \[pc, #0\] ; a1d4 <arm\+0x184> +#------------------------------------------------------------------------------ +#------ .got offset for aaf4 +#------------------------------------------------------------------------------ + a1d0: 00000078 \.word 0x00000078 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for aaf4 +#------------------------------------------------------------------------------ + a1d4: 00006ea4 \.word 0x00006ea4 +#------------------------------------------------------------------------------ +#------ taf4's .iplt entry +#------------------------------------------------------------------------------ + a1d8: ebfffbe2 bl 9168 <aaf1-0xe98> +#------------------------------------------------------------------------------ +#------ taf4's .iplt entry +#------------------------------------------------------------------------------ + a1dc: eafffbe1 b 9168 <aaf1-0xe98> +#------------------------------------------------------------------------------ +#------ taf4's .iplt entry +#------------------------------------------------------------------------------ + a1e0: 0afffbe0 beq 9168 <aaf1-0xe98> + a1e4: e59f4000 ldr r4, \[pc, #0\] ; a1ec <arm\+0x19c> + a1e8: e59f4000 ldr r4, \[pc, #0\] ; a1f0 <arm\+0x1a0> +#------------------------------------------------------------------------------ +#------ .got offset for taf4 +#------------------------------------------------------------------------------ + a1ec: 0000009c \.word 0x0000009c +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for taf4 +#------------------------------------------------------------------------------ + a1f0: 00006eac \.word 0x00006eac +#------------------------------------------------------------------------------ +#------ abf4's .iplt entry +#------------------------------------------------------------------------------ + a1f4: ebfffbc9 bl 9120 <aaf1-0xee0> +#------------------------------------------------------------------------------ +#------ abf4's .iplt entry +#------------------------------------------------------------------------------ + a1f8: eafffbc8 b 9120 <aaf1-0xee0> +#------------------------------------------------------------------------------ +#------ abf4's .iplt entry +#------------------------------------------------------------------------------ + a1fc: 0afffbc7 beq 9120 <aaf1-0xee0> + a200: e59f4000 ldr r4, \[pc, #0\] ; a208 <arm\+0x1b8> + a204: e59f4000 ldr r4, \[pc, #0\] ; a20c <arm\+0x1bc> +#------------------------------------------------------------------------------ +#------ .got offset for abf4 +#------------------------------------------------------------------------------ + a208: 0000008c \.word 0x0000008c +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for abf4 +#------------------------------------------------------------------------------ + a20c: 00006e80 \.word 0x00006e80 +#------------------------------------------------------------------------------ +#------ tbf4's .iplt entry +#------------------------------------------------------------------------------ + a210: ebfffbc6 bl 9130 <aaf1-0xed0> +#------------------------------------------------------------------------------ +#------ tbf4's .iplt entry +#------------------------------------------------------------------------------ + a214: eafffbc5 b 9130 <aaf1-0xed0> +#------------------------------------------------------------------------------ +#------ tbf4's .iplt entry +#------------------------------------------------------------------------------ + a218: 0afffbc4 beq 9130 <aaf1-0xed0> + a21c: e59f4000 ldr r4, \[pc, #0\] ; a224 <arm\+0x1d4> + a220: e59f4000 ldr r4, \[pc, #0\] ; a228 <arm\+0x1d8> +#------------------------------------------------------------------------------ +#------ .got offset for tbf4 +#------------------------------------------------------------------------------ + a224: 00000090 \.word 0x00000090 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for tbf4 +#------------------------------------------------------------------------------ + a228: 00006e68 \.word 0x00006e68 + +0000a22c <_thumb>: + a22c: f005 fee8 bl 10000 <foo> + a230: f005 bee6 b\.w 10000 <foo> + a234: f005 86e4 beq\.w 10000 <foo> + a238: 4c00 ldr r4, \[pc, #0\] ; \(a23c <_thumb\+0x10>\) + a23a: 4c01 ldr r4, \[pc, #4\] ; \(a240 <_thumb\+0x14>\) +#------------------------------------------------------------------------------ +#------ .got offset for foo +#------------------------------------------------------------------------------ + a23c: 00000070 \.word 0x00000070 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for foo +#------------------------------------------------------------------------------ + a240: 00006e2c \.word 0x00006e2c +#------------------------------------------------------------------------------ +#------ atf1's .iplt entry +#------------------------------------------------------------------------------ + a244: f7fe ef1a blx 907c <aaf1-0xf84> +#------------------------------------------------------------------------------ +#------ thumb entry to atf1's .iplt entry +#------------------------------------------------------------------------------ + a248: f7fe bf16 b\.w 9078 <aaf1-0xf88> +#------------------------------------------------------------------------------ +#------ thumb entry to atf1's .iplt entry +#------------------------------------------------------------------------------ + a24c: f43e af14 beq\.w 9078 <aaf1-0xf88> + a250: 4c00 ldr r4, \[pc, #0\] ; \(a254 <_thumb\+0x28>\) + a252: 4c01 ldr r4, \[pc, #4\] ; \(a258 <_thumb\+0x2c>\) +#------------------------------------------------------------------------------ +#------ GP-relative offset of atf1's .igot.plt entry +#------------------------------------------------------------------------------ + a254: 00000028 \.word 0x00000028 +#------------------------------------------------------------------------------ +#------ PC-relative offset of atf1's .igot.plt entry +#------------------------------------------------------------------------------ + a258: 00006dd0 \.word 0x00006dd0 +#------------------------------------------------------------------------------ +#------ ttf1's .iplt entry +#------------------------------------------------------------------------------ + a25c: f7fe ef24 blx 90a8 <aaf1-0xf58> +#------------------------------------------------------------------------------ +#------ thumb entry to ttf1's .iplt entry +#------------------------------------------------------------------------------ + a260: f7fe bf20 b\.w 90a4 <aaf1-0xf5c> +#------------------------------------------------------------------------------ +#------ thumb entry to ttf1's .iplt entry +#------------------------------------------------------------------------------ + a264: f43e af1e beq\.w 90a4 <aaf1-0xf5c> + a268: 4c00 ldr r4, \[pc, #0\] ; \(a26c <_thumb\+0x40>\) + a26a: 4c01 ldr r4, \[pc, #4\] ; \(a270 <_thumb\+0x44>\) +#------------------------------------------------------------------------------ +#------ GP-relative offset of ttf1's .igot.plt entry +#------------------------------------------------------------------------------ + a26c: 00000034 \.word 0x00000034 +#------------------------------------------------------------------------------ +#------ PC-relative offset of ttf1's .igot.plt entry +#------------------------------------------------------------------------------ + a270: 00006dc4 \.word 0x00006dc4 +#------------------------------------------------------------------------------ +#------ abf1's .iplt entry +#------------------------------------------------------------------------------ + a274: f7fe ef0a blx 908c <aaf1-0xf74> +#------------------------------------------------------------------------------ +#------ thumb entry to abf1's .iplt entry +#------------------------------------------------------------------------------ + a278: f7fe bf06 b\.w 9088 <aaf1-0xf78> +#------------------------------------------------------------------------------ +#------ thumb entry to abf1's .iplt entry +#------------------------------------------------------------------------------ + a27c: f43e af04 beq\.w 9088 <aaf1-0xf78> + a280: 4c00 ldr r4, \[pc, #0\] ; \(a284 <_thumb\+0x58>\) + a282: 4c01 ldr r4, \[pc, #4\] ; \(a288 <_thumb\+0x5c>\) +#------------------------------------------------------------------------------ +#------ GP-relative offset of abf1's .igot.plt entry +#------------------------------------------------------------------------------ + a284: 0000002c \.word 0x0000002c +#------------------------------------------------------------------------------ +#------ PC-relative offset of abf1's .igot.plt entry +#------------------------------------------------------------------------------ + a288: 00006da4 \.word 0x00006da4 +#------------------------------------------------------------------------------ +#------ tbf1's .iplt entry +#------------------------------------------------------------------------------ + a28c: f7fe ef14 blx 90b8 <aaf1-0xf48> +#------------------------------------------------------------------------------ +#------ thumb entry to tbf1's .iplt entry +#------------------------------------------------------------------------------ + a290: f7fe bf10 b\.w 90b4 <aaf1-0xf4c> +#------------------------------------------------------------------------------ +#------ thumb entry to tbf1's .iplt entry +#------------------------------------------------------------------------------ + a294: f43e af0e beq\.w 90b4 <aaf1-0xf4c> + a298: 4c00 ldr r4, \[pc, #0\] ; \(a29c <_thumb\+0x70>\) + a29a: 4c01 ldr r4, \[pc, #4\] ; \(a2a0 <_thumb\+0x74>\) +#------------------------------------------------------------------------------ +#------ GP-relative offset of tbf1's .igot.plt entry +#------------------------------------------------------------------------------ + a29c: 00000038 \.word 0x00000038 +#------------------------------------------------------------------------------ +#------ PC-relative offset of tbf1's .igot.plt entry +#------------------------------------------------------------------------------ + a2a0: 00006d98 \.word 0x00006d98 +#------------------------------------------------------------------------------ +#------ atf2's .plt entry +#------------------------------------------------------------------------------ + a2a4: f7fe eeb8 blx 9018 <aaf1-0xfe8> +#------------------------------------------------------------------------------ +#------ thumb entry to atf2's .plt entry +#------------------------------------------------------------------------------ + a2a8: f7fe beb4 b\.w 9014 <aaf1-0xfec> +#------------------------------------------------------------------------------ +#------ thumb entry to atf2's .plt entry +#------------------------------------------------------------------------------ + a2ac: f43e aeb2 beq\.w 9014 <aaf1-0xfec> + a2b0: 4c00 ldr r4, \[pc, #0\] ; \(a2b4 <_thumb\+0x88>\) + a2b2: 4c01 ldr r4, \[pc, #4\] ; \(a2b8 <_thumb\+0x8c>\) +#------------------------------------------------------------------------------ +#------ .got offset for atf2 +#------------------------------------------------------------------------------ + a2b4: 00000074 \.word 0x00000074 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for atf2 +#------------------------------------------------------------------------------ + a2b8: 00006dbc \.word 0x00006dbc +#------------------------------------------------------------------------------ +#------ ttf2's .plt entry +#------------------------------------------------------------------------------ + a2bc: f7fe eeb4 blx 9028 <aaf1-0xfd8> +#------------------------------------------------------------------------------ +#------ thumb entry to ttf2's .plt entry +#------------------------------------------------------------------------------ + a2c0: f7fe beb0 b\.w 9024 <aaf1-0xfdc> +#------------------------------------------------------------------------------ +#------ thumb entry to ttf2's .plt entry +#------------------------------------------------------------------------------ + a2c4: f43e aeae beq\.w 9024 <aaf1-0xfdc> + a2c8: 4c00 ldr r4, \[pc, #0\] ; \(a2cc <_thumb\+0xa0>\) + a2ca: 4c01 ldr r4, \[pc, #4\] ; \(a2d0 <_thumb\+0xa4>\) +#------------------------------------------------------------------------------ +#------ .got offset for ttf2 +#------------------------------------------------------------------------------ + a2cc: 0000007c \.word 0x0000007c +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for ttf2 +#------------------------------------------------------------------------------ + a2d0: 00006dac \.word 0x00006dac +#------------------------------------------------------------------------------ +#------ abf2's .plt entry +#------------------------------------------------------------------------------ + a2d4: f7fe eec4 blx 9060 <aaf1-0xfa0> +#------------------------------------------------------------------------------ +#------ thumb entry to abf2's .plt entry +#------------------------------------------------------------------------------ + a2d8: f7fe bec0 b\.w 905c <aaf1-0xfa4> +#------------------------------------------------------------------------------ +#------ thumb entry to abf2's .plt entry +#------------------------------------------------------------------------------ + a2dc: f43e aebe beq\.w 905c <aaf1-0xfa4> + a2e0: 4c00 ldr r4, \[pc, #0\] ; \(a2e4 <_thumb\+0xb8>\) + a2e2: 4c01 ldr r4, \[pc, #4\] ; \(a2e8 <_thumb\+0xbc>\) +#------------------------------------------------------------------------------ +#------ .got offset for abf2 +#------------------------------------------------------------------------------ + a2e4: 000000a0 \.word 0x000000a0 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for abf2 +#------------------------------------------------------------------------------ + a2e8: 00006db8 \.word 0x00006db8 +#------------------------------------------------------------------------------ +#------ tbf2's .plt entry +#------------------------------------------------------------------------------ + a2ec: f7fe eea4 blx 9038 <aaf1-0xfc8> +#------------------------------------------------------------------------------ +#------ thumb entry to tbf2's .plt entry +#------------------------------------------------------------------------------ + a2f0: f7fe bea0 b\.w 9034 <aaf1-0xfcc> +#------------------------------------------------------------------------------ +#------ thumb entry to tbf2's .plt entry +#------------------------------------------------------------------------------ + a2f4: f43e ae9e beq\.w 9034 <aaf1-0xfcc> + a2f8: 4c00 ldr r4, \[pc, #0\] ; \(a2fc <_thumb\+0xd0>\) + a2fa: 4c01 ldr r4, \[pc, #4\] ; \(a300 <_thumb\+0xd4>\) +#------------------------------------------------------------------------------ +#------ .got offset for tbf2 +#------------------------------------------------------------------------------ + a2fc: 00000080 \.word 0x00000080 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for tbf2 +#------------------------------------------------------------------------------ + a300: 00006d80 \.word 0x00006d80 +#------------------------------------------------------------------------------ +#------ atf3's .iplt entry +#------------------------------------------------------------------------------ + a304: f7fe eee6 blx 90d4 <aaf1-0xf2c> +#------------------------------------------------------------------------------ +#------ thumb entry to atf3's .iplt entry +#------------------------------------------------------------------------------ + a308: f7fe bee2 b\.w 90d0 <aaf1-0xf30> +#------------------------------------------------------------------------------ +#------ thumb entry to atf3's .iplt entry +#------------------------------------------------------------------------------ + a30c: f43e aee0 beq\.w 90d0 <aaf1-0xf30> + a310: 4c00 ldr r4, \[pc, #0\] ; \(a314 <_thumb\+0xe8>\) + a312: 4c01 ldr r4, \[pc, #4\] ; \(a318 <_thumb\+0xec>\) +#------------------------------------------------------------------------------ +#------ GP-relative offset of atf3's .igot.plt entry +#------------------------------------------------------------------------------ + a314: 00000040 \.word 0x00000040 +#------------------------------------------------------------------------------ +#------ PC-relative offset of atf3's .igot.plt entry +#------------------------------------------------------------------------------ + a318: 00006d28 \.word 0x00006d28 +#------------------------------------------------------------------------------ +#------ ttf3's .iplt entry +#------------------------------------------------------------------------------ + a31c: f7fe eeea blx 90f4 <aaf1-0xf0c> +#------------------------------------------------------------------------------ +#------ thumb entry to ttf3's .iplt entry +#------------------------------------------------------------------------------ + a320: f7fe bee6 b\.w 90f0 <aaf1-0xf10> +#------------------------------------------------------------------------------ +#------ thumb entry to ttf3's .iplt entry +#------------------------------------------------------------------------------ + a324: f43e aee4 beq\.w 90f0 <aaf1-0xf10> + a328: 4c00 ldr r4, \[pc, #0\] ; \(a32c <_thumb\+0x100>\) + a32a: 4c01 ldr r4, \[pc, #4\] ; \(a330 <_thumb\+0x104>\) +#------------------------------------------------------------------------------ +#------ GP-relative offset of ttf3's .igot.plt entry +#------------------------------------------------------------------------------ + a32c: 00000048 \.word 0x00000048 +#------------------------------------------------------------------------------ +#------ PC-relative offset of ttf3's .igot.plt entry +#------------------------------------------------------------------------------ + a330: 00006d18 \.word 0x00006d18 +#------------------------------------------------------------------------------ +#------ abf3's .iplt entry +#------------------------------------------------------------------------------ + a334: f7fe eed6 blx 90e4 <aaf1-0xf1c> +#------------------------------------------------------------------------------ +#------ thumb entry to abf3's .iplt entry +#------------------------------------------------------------------------------ + a338: f7fe bed2 b\.w 90e0 <aaf1-0xf20> +#------------------------------------------------------------------------------ +#------ thumb entry to abf3's .iplt entry +#------------------------------------------------------------------------------ + a33c: f43e aed0 beq\.w 90e0 <aaf1-0xf20> + a340: 4c00 ldr r4, \[pc, #0\] ; \(a344 <_thumb\+0x118>\) + a342: 4c01 ldr r4, \[pc, #4\] ; \(a348 <_thumb\+0x11c>\) +#------------------------------------------------------------------------------ +#------ GP-relative offset of abf3's .igot.plt entry +#------------------------------------------------------------------------------ + a344: 00000044 \.word 0x00000044 +#------------------------------------------------------------------------------ +#------ PC-relative offset of abf3's .igot.plt entry +#------------------------------------------------------------------------------ + a348: 00006cfc \.word 0x00006cfc +#------------------------------------------------------------------------------ +#------ tbf3's .iplt entry +#------------------------------------------------------------------------------ + a34c: f7fe eeda blx 9104 <aaf1-0xefc> +#------------------------------------------------------------------------------ +#------ thumb entry to tbf3's .iplt entry +#------------------------------------------------------------------------------ + a350: f7fe bed6 b\.w 9100 <aaf1-0xf00> +#------------------------------------------------------------------------------ +#------ thumb entry to tbf3's .iplt entry +#------------------------------------------------------------------------------ + a354: f43e aed4 beq\.w 9100 <aaf1-0xf00> + a358: 4c00 ldr r4, \[pc, #0\] ; \(a35c <_thumb\+0x130>\) + a35a: 4c01 ldr r4, \[pc, #4\] ; \(a360 <_thumb\+0x134>\) +#------------------------------------------------------------------------------ +#------ GP-relative offset of tbf3's .igot.plt entry +#------------------------------------------------------------------------------ + a35c: 0000004c \.word 0x0000004c +#------------------------------------------------------------------------------ +#------ PC-relative offset of tbf3's .igot.plt entry +#------------------------------------------------------------------------------ + a360: 00006cec \.word 0x00006cec +#------------------------------------------------------------------------------ +#------ atf4's .iplt entry +#------------------------------------------------------------------------------ + a364: f7fe eefa blx 915c <aaf1-0xea4> +#------------------------------------------------------------------------------ +#------ thumb entry to atf4's .iplt entry +#------------------------------------------------------------------------------ + a368: f7fe bef6 b\.w 9158 <aaf1-0xea8> +#------------------------------------------------------------------------------ +#------ thumb entry to atf4's .iplt entry +#------------------------------------------------------------------------------ + a36c: f43e aef4 beq\.w 9158 <aaf1-0xea8> + a370: 4c00 ldr r4, \[pc, #0\] ; \(a374 <_thumb\+0x148>\) + a372: 4c01 ldr r4, \[pc, #4\] ; \(a378 <_thumb\+0x14c>\) +#------------------------------------------------------------------------------ +#------ .got offset for atf4 +#------------------------------------------------------------------------------ + a374: 00000098 \.word 0x00000098 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for atf4 +#------------------------------------------------------------------------------ + a378: 00006d20 \.word 0x00006d20 +#------------------------------------------------------------------------------ +#------ ttf4's .iplt entry +#------------------------------------------------------------------------------ + a37c: f7fe eee0 blx 9140 <aaf1-0xec0> +#------------------------------------------------------------------------------ +#------ thumb entry to ttf4's .iplt entry +#------------------------------------------------------------------------------ + a380: f7fe bedc b\.w 913c <aaf1-0xec4> +#------------------------------------------------------------------------------ +#------ thumb entry to ttf4's .iplt entry +#------------------------------------------------------------------------------ + a384: f43e aeda beq\.w 913c <aaf1-0xec4> + a388: 4c00 ldr r4, \[pc, #0\] ; \(a38c <_thumb\+0x160>\) + a38a: 4c01 ldr r4, \[pc, #4\] ; \(a390 <_thumb\+0x164>\) +#------------------------------------------------------------------------------ +#------ .got offset for ttf4 +#------------------------------------------------------------------------------ + a38c: 00000094 \.word 0x00000094 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for ttf4 +#------------------------------------------------------------------------------ + a390: 00006d04 \.word 0x00006d04 +#------------------------------------------------------------------------------ +#------ abf4's .iplt entry +#------------------------------------------------------------------------------ + a394: f7fe eec4 blx 9120 <aaf1-0xee0> +#------------------------------------------------------------------------------ +#------ thumb entry to abf4's .iplt entry +#------------------------------------------------------------------------------ + a398: f7fe bec0 b\.w 911c <aaf1-0xee4> +#------------------------------------------------------------------------------ +#------ thumb entry to abf4's .iplt entry +#------------------------------------------------------------------------------ + a39c: f43e aebe beq\.w 911c <aaf1-0xee4> + a3a0: 4c00 ldr r4, \[pc, #0\] ; \(a3a4 <_thumb\+0x178>\) + a3a2: 4c01 ldr r4, \[pc, #4\] ; \(a3a8 <_thumb\+0x17c>\) +#------------------------------------------------------------------------------ +#------ .got offset for abf4 +#------------------------------------------------------------------------------ + a3a4: 0000008c \.word 0x0000008c +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for abf4 +#------------------------------------------------------------------------------ + a3a8: 00006ce4 \.word 0x00006ce4 +#------------------------------------------------------------------------------ +#------ tbf4's .iplt entry +#------------------------------------------------------------------------------ + a3ac: f7fe eec0 blx 9130 <aaf1-0xed0> +#------------------------------------------------------------------------------ +#------ thumb entry to tbf4's .iplt entry +#------------------------------------------------------------------------------ + a3b0: f7fe bebc b\.w 912c <aaf1-0xed4> +#------------------------------------------------------------------------------ +#------ thumb entry to tbf4's .iplt entry +#------------------------------------------------------------------------------ + a3b4: f43e aeba beq\.w 912c <aaf1-0xed4> + a3b8: 4c00 ldr r4, \[pc, #0\] ; \(a3bc <_thumb\+0x190>\) + a3ba: 4c01 ldr r4, \[pc, #4\] ; \(a3c0 <_thumb\+0x194>\) +#------------------------------------------------------------------------------ +#------ .got offset for tbf4 +#------------------------------------------------------------------------------ + a3bc: 00000090 \.word 0x00000090 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for tbf4 +#------------------------------------------------------------------------------ + a3c0: 00006cd0 \.word 0x00006cd0 diff --git a/ld/testsuite/ld-arm/ifunc-4.gd b/ld/testsuite/ld-arm/ifunc-4.gd new file mode 100644 index 0000000..f768c68 --- /dev/null +++ b/ld/testsuite/ld-arm/ifunc-4.gd @@ -0,0 +1,167 @@ + +.* + +Contents of section \.data: +#------------------------------------------------------------------------------ +#------ 00010000: foo +#------ 00010004: contains aaf1 [R_ARM_IRELATIVE] +#------ 00010008: contains PC-relative offset of aaf1's .iplt entry +#------ 0001000c: contains atf1 [R_ARM_IRELATIVE] +#------------------------------------------------------------------------------ + 10000 44332211 00a00000 6490ffff 04a00000 .* +#------------------------------------------------------------------------------ +#------ 00010010: contains PC-relative offset of atf1's .iplt entry +#------ 00010014: contains abf1 [R_ARM_IRELATIVE] +#------ 00010018: contains PC-relative offset of abf1's .iplt entry +#------ 0001001c: contains taf1 [R_ARM_IRELATIVE] +#------------------------------------------------------------------------------ + 10010 6c90ffff 08a00000 7490ffff 0da00000 .* +#------------------------------------------------------------------------------ +#------ 00010020: contains PC-relative offset of taf1's .iplt entry +#------ 00010024: contains ttf1 [R_ARM_IRELATIVE] +#------ 00010028: contains PC-relative offset of ttf1's .iplt entry +#------ 0001002c: contains tbf1 [R_ARM_IRELATIVE] +#------------------------------------------------------------------------------ + 10020 7890ffff 0fa00000 8090ffff 11a00000 .* +#------------------------------------------------------------------------------ +#------ 00010030: contains PC-relative offset of tbf1's .iplt entry +#------ 00010034: aaf2 [R_ARM_ABS32] +#------ 00010038: aaf2 [R_ARM_REL32] +#------ 0001003c: atf2 [R_ARM_ABS32] +#------------------------------------------------------------------------------ + 10030 8890ffff 00000000 00000000 00000000 .* +#------------------------------------------------------------------------------ +#------ 00010040: atf2 [R_ARM_REL32] +#------ 00010044: abf2 [R_ARM_ABS32] +#------ 00010048: abf2 [R_ARM_REL32] +#------ 0001004c: taf2 [R_ARM_ABS32] +#------------------------------------------------------------------------------ + 10040 00000000 00000000 00000000 00000000 .* +#------------------------------------------------------------------------------ +#------ 00010050: taf2 [R_ARM_REL32] +#------ 00010054: ttf2 [R_ARM_ABS32] +#------ 00010058: ttf2 [R_ARM_REL32] +#------ 0001005c: tbf2 [R_ARM_ABS32] +#------------------------------------------------------------------------------ + 10050 00000000 00000000 00000000 00000000 .* +#------------------------------------------------------------------------------ +#------ 00010060: tbf2 [R_ARM_REL32] +#------ 00010064: contains aaf3 [R_ARM_IRELATIVE] +#------ 00010068: contains PC-relative offset of aaf3's .iplt entry +#------ 0001006c: contains atf3 [R_ARM_IRELATIVE] +#------------------------------------------------------------------------------ + 10060 00000000 28a00000 e490ffff 2ca00000 .* +#------------------------------------------------------------------------------ +#------ 00010070: contains PC-relative offset of atf3's .iplt entry +#------ 00010074: contains abf3 [R_ARM_IRELATIVE] +#------ 00010078: contains PC-relative offset of abf3's .iplt entry +#------ 0001007c: contains taf3 [R_ARM_IRELATIVE] +#------------------------------------------------------------------------------ + 10070 6490ffff 30a00000 6c90ffff 35a00000 .* +#------------------------------------------------------------------------------ +#------ 00010080: contains PC-relative offset of taf3's .iplt entry +#------ 00010084: contains ttf3 [R_ARM_IRELATIVE] +#------ 00010088: contains PC-relative offset of ttf3's .iplt entry +#------ 0001008c: contains tbf3 [R_ARM_IRELATIVE] +#------------------------------------------------------------------------------ + 10080 9090ffff 37a00000 6c90ffff 39a00000 .* +#------------------------------------------------------------------------------ +#------ 00010090: contains PC-relative offset of tbf3's .iplt entry +#------ 00010094: aaf4 [R_ARM_ABS32] +#------ 00010098: contains PC-relative offset of aaf4's .iplt entry +#------ 0001009c: atf4 [R_ARM_ABS32] +#------------------------------------------------------------------------------ + 10090 7490ffff 00000000 2c90ffff 00000000 .* +#------------------------------------------------------------------------------ +#------ 000100a0: contains PC-relative offset of atf4's .iplt entry +#------ 000100a4: abf4 [R_ARM_ABS32] +#------ 000100a8: contains PC-relative offset of abf4's .iplt entry +#------ 000100ac: taf4 [R_ARM_ABS32] +#------------------------------------------------------------------------------ + 100a0 bc90ffff 00000000 7890ffff 00000000 .* +#------------------------------------------------------------------------------ +#------ 000100b0: contains PC-relative offset of taf4's .iplt entry +#------ 000100b4: ttf4 [R_ARM_ABS32] +#------ 000100b8: contains PC-relative offset of ttf4's .iplt entry +#------ 000100bc: tbf4 [R_ARM_ABS32] +#------------------------------------------------------------------------------ + 100b0 b890ffff 00000000 8890ffff 00000000 .* +#------------------------------------------------------------------------------ +#------ 000100c0: contains PC-relative offset of tbf4's .iplt entry +#------------------------------------------------------------------------------ + 100c0 7090ffff .* +Contents of section \.got: +#------------------------------------------------------------------------------ +#------ 00011000: .got.plt +#------ 00011004: reserved .got.plt entry +#------ 00011008: reserved .got.plt entry +#------ 0001100c: atf2's .got.plt entry [R_ARM_JUMP_SLOT] +#------------------------------------------------------------------------------ + 11000 00200100 00000000 00000000 00900000 .* +#------------------------------------------------------------------------------ +#------ 00011010: ttf2's .got.plt entry [R_ARM_JUMP_SLOT] +#------ 00011014: tbf2's .got.plt entry [R_ARM_JUMP_SLOT] +#------ 00011018: taf2's .got.plt entry [R_ARM_JUMP_SLOT] +#------ 0001101c: aaf2's .got.plt entry [R_ARM_JUMP_SLOT] +#------------------------------------------------------------------------------ + 11010 00900000 00900000 00900000 00900000 .* +#------------------------------------------------------------------------------ +#------ 00011020: abf2's .got.plt entry [R_ARM_JUMP_SLOT] +#------ 00011024: aaf1's .igot.plt entry [R_ARM_IRELATIVE] +#------ 00011028: atf1's .igot.plt entry [R_ARM_IRELATIVE] +#------ 0001102c: abf1's .igot.plt entry [R_ARM_IRELATIVE] +#------------------------------------------------------------------------------ + 11020 00900000 00a00000 04a00000 08a00000 .* +#------------------------------------------------------------------------------ +#------ 00011030: taf1's .igot.plt entry [R_ARM_IRELATIVE] +#------ 00011034: ttf1's .igot.plt entry [R_ARM_IRELATIVE] +#------ 00011038: tbf1's .igot.plt entry [R_ARM_IRELATIVE] +#------ 0001103c: aaf4's .igot.plt entry [R_ARM_IRELATIVE] +#------------------------------------------------------------------------------ + 11030 0da00000 0fa00000 11a00000 3ca00000 .* +#------------------------------------------------------------------------------ +#------ 00011040: atf3's .igot.plt entry [R_ARM_IRELATIVE] +#------ 00011044: abf3's .igot.plt entry [R_ARM_IRELATIVE] +#------ 00011048: ttf3's .igot.plt entry [R_ARM_IRELATIVE] +#------ 0001104c: tbf3's .igot.plt entry [R_ARM_IRELATIVE] +#------------------------------------------------------------------------------ + 11040 2ca00000 30a00000 37a00000 39a00000 .* +#------------------------------------------------------------------------------ +#------ 00011050: taf3's .igot.plt entry [R_ARM_IRELATIVE] +#------ 00011054: abf4's .igot.plt entry [R_ARM_IRELATIVE] +#------ 00011058: tbf4's .igot.plt entry [R_ARM_IRELATIVE] +#------ 0001105c: ttf4's .igot.plt entry [R_ARM_IRELATIVE] +#------------------------------------------------------------------------------ + 11050 35a00000 44a00000 4da00000 4ba00000 .* +#------------------------------------------------------------------------------ +#------ 00011060: aaf3's .igot.plt entry [R_ARM_IRELATIVE] +#------ 00011064: atf4's .igot.plt entry [R_ARM_IRELATIVE] +#------ 00011068: taf4's .igot.plt entry [R_ARM_IRELATIVE] +#------ 0001106c: .got entry for foo [R_ARM_RELATIVE] +#------------------------------------------------------------------------------ + 11060 28a00000 40a00000 49a00000 00000100 .* +#------------------------------------------------------------------------------ +#------ 00011070: .got entry for foo [R_ARM_RELATIVE] +#------ 00011074: .got entry for atf2 [R_ARM_GLOB_DAT] +#------ 00011078: .got entry for aaf4 [R_ARM_GLOB_DAT] +#------ 0001107c: .got entry for ttf2 [R_ARM_GLOB_DAT] +#------------------------------------------------------------------------------ + 11070 00000100 00000000 00000000 00000000 .* +#------------------------------------------------------------------------------ +#------ 00011080: .got entry for tbf2 [R_ARM_GLOB_DAT] +#------ 00011084: .got entry for taf2 [R_ARM_GLOB_DAT] +#------ 00011088: .got entry for aaf2 [R_ARM_GLOB_DAT] +#------ 0001108c: .got entry for abf4 [R_ARM_GLOB_DAT] +#------------------------------------------------------------------------------ + 11080 00000000 00000000 00000000 00000000 .* +#------------------------------------------------------------------------------ +#------ 00011090: .got entry for tbf4 [R_ARM_GLOB_DAT] +#------ 00011094: .got entry for ttf4 [R_ARM_GLOB_DAT] +#------ 00011098: .got entry for atf4 [R_ARM_GLOB_DAT] +#------ 0001109c: .got entry for taf4 [R_ARM_GLOB_DAT] +#------------------------------------------------------------------------------ + 11090 00000000 00000000 00000000 00000000 .* +#------------------------------------------------------------------------------ +#------ 000110a0: .got entry for abf2 [R_ARM_GLOB_DAT] +#------------------------------------------------------------------------------ + 110a0 00000000 .* diff --git a/ld/testsuite/ld-arm/ifunc-4.rd b/ld/testsuite/ld-arm/ifunc-4.rd new file mode 100644 index 0000000..b8079d5 --- /dev/null +++ b/ld/testsuite/ld-arm/ifunc-4.rd @@ -0,0 +1,74 @@ + +Relocation section '\.rel\.dyn' at offset 0x8000 contains 62 entries: + Offset Info Type Sym\.Value Sym\. Name +0001106c ......17 R_ARM_RELATIVE +00011070 ......17 R_ARM_RELATIVE +00010004 ......a0 R_ARM_IRELATIVE +0001000c ......a0 R_ARM_IRELATIVE +00010014 ......a0 R_ARM_IRELATIVE +0001001c ......a0 R_ARM_IRELATIVE +00010024 ......a0 R_ARM_IRELATIVE +0001002c ......a0 R_ARM_IRELATIVE +00010064 ......a0 R_ARM_IRELATIVE +0001006c ......a0 R_ARM_IRELATIVE +00010074 ......a0 R_ARM_IRELATIVE +0001007c ......a0 R_ARM_IRELATIVE +00010084 ......a0 R_ARM_IRELATIVE +0001008c ......a0 R_ARM_IRELATIVE +00011024 ......a0 R_ARM_IRELATIVE +00011028 ......a0 R_ARM_IRELATIVE +0001102c ......a0 R_ARM_IRELATIVE +00011030 ......a0 R_ARM_IRELATIVE +00011034 ......a0 R_ARM_IRELATIVE +00011038 ......a0 R_ARM_IRELATIVE +0001103c ......a0 R_ARM_IRELATIVE +00011040 ......a0 R_ARM_IRELATIVE +00011044 ......a0 R_ARM_IRELATIVE +00011048 ......a0 R_ARM_IRELATIVE +0001104c ......a0 R_ARM_IRELATIVE +00011050 ......a0 R_ARM_IRELATIVE +00011054 ......a0 R_ARM_IRELATIVE +00011058 ......a0 R_ARM_IRELATIVE +0001105c ......a0 R_ARM_IRELATIVE +00011060 ......a0 R_ARM_IRELATIVE +00011064 ......a0 R_ARM_IRELATIVE +00011068 ......a0 R_ARM_IRELATIVE +00010034 ......02 R_ARM_ABS32 aaf2\(\) aaf2 +00010038 ......03 R_ARM_REL32 aaf2\(\) aaf2 +00011088 ......15 R_ARM_GLOB_DAT aaf2\(\) aaf2 +0001003c ......02 R_ARM_ABS32 atf2\(\) atf2 +00010040 ......03 R_ARM_REL32 atf2\(\) atf2 +00011074 ......15 R_ARM_GLOB_DAT atf2\(\) atf2 +00010044 ......02 R_ARM_ABS32 abf2\(\) abf2 +00010048 ......03 R_ARM_REL32 abf2\(\) abf2 +000110a0 ......15 R_ARM_GLOB_DAT abf2\(\) abf2 +0001004c ......02 R_ARM_ABS32 taf2\(\) taf2 +00010050 ......03 R_ARM_REL32 taf2\(\) taf2 +00011084 ......15 R_ARM_GLOB_DAT taf2\(\) taf2 +00010054 ......02 R_ARM_ABS32 ttf2\(\) ttf2 +00010058 ......03 R_ARM_REL32 ttf2\(\) ttf2 +0001107c ......15 R_ARM_GLOB_DAT ttf2\(\) ttf2 +0001005c ......02 R_ARM_ABS32 tbf2\(\) tbf2 +00010060 ......03 R_ARM_REL32 tbf2\(\) tbf2 +00011080 ......15 R_ARM_GLOB_DAT tbf2\(\) tbf2 +00010094 ......02 R_ARM_ABS32 aaf4\(\) aaf4 +00011078 ......15 R_ARM_GLOB_DAT aaf4\(\) aaf4 +0001009c ......02 R_ARM_ABS32 atf4\(\) atf4 +00011098 ......15 R_ARM_GLOB_DAT atf4\(\) atf4 +000100a4 ......02 R_ARM_ABS32 abf4\(\) abf4 +0001108c ......15 R_ARM_GLOB_DAT abf4\(\) abf4 +000100ac ......02 R_ARM_ABS32 taf4\(\) taf4 +0001109c ......15 R_ARM_GLOB_DAT taf4\(\) taf4 +000100b4 ......02 R_ARM_ABS32 ttf4\(\) ttf4 +00011094 ......15 R_ARM_GLOB_DAT ttf4\(\) ttf4 +000100bc ......02 R_ARM_ABS32 tbf4\(\) tbf4 +00011090 ......15 R_ARM_GLOB_DAT tbf4\(\) tbf4 + +Relocation section '\.rel\.plt' at offset 0x81f0 contains 6 entries: + Offset Info Type Sym\.Value Sym\. Name +0001100c ......16 R_ARM_JUMP_SLOT atf2\(\) atf2 +00011010 ......16 R_ARM_JUMP_SLOT ttf2\(\) ttf2 +00011014 ......16 R_ARM_JUMP_SLOT tbf2\(\) tbf2 +00011018 ......16 R_ARM_JUMP_SLOT taf2\(\) taf2 +0001101c ......16 R_ARM_JUMP_SLOT aaf2\(\) aaf2 +00011020 ......16 R_ARM_JUMP_SLOT abf2\(\) abf2 diff --git a/ld/testsuite/ld-arm/ifunc-4.s b/ld/testsuite/ld-arm/ifunc-4.s new file mode 100644 index 0000000..7f72c8c --- /dev/null +++ b/ld/testsuite/ld-arm/ifunc-4.s @@ -0,0 +1,95 @@ + .syntax unified + .arch armv6t2 + + .macro define,name,type + .type \name,%gnu_indirect_function + \type +\name: + mov pc,lr + .size \name,.-\name + .endm + + .macro define2,name + define aa\name,.arm + define at\name,.arm + define ab\name,.arm + define ta\name,.thumb_func + define tt\name,.thumb_func + define tb\name,.thumb_func + .endm + + .macro test_relocs,name,width + bl \name(PLT) + b\width \name + beq\width \name + ldr r4,1f + ldr r4,2f +1: + .word \name(GOT) +2: + .word \name(GOT_PREL) + .endm + + .macro test_relocs2,name,type,width + test_relocs a\type\name,\width + test_relocs t\type\name,\width + test_relocs ab\name,\width + test_relocs tb\name,\width + .endm + + .macro diff,name + .word \name + .word \name-. + .endm + + .macro alldirs,doit,name + \doit aa\name + \doit at\name + \doit ab\name + \doit ta\name + \doit tt\name + \doit tb\name + .endm + + define2 f1 + define2 f2 + define2 f3 + define2 f4 + + alldirs .globl,f2 + + alldirs .globl,f3 + alldirs .hidden,f3 + + alldirs .globl,f4 + alldirs .protected,f4 + + .globl arm + .type arm,%function + .arm +arm: + test_relocs foo + test_relocs2 f1,a, + test_relocs2 f2,a, + test_relocs2 f3,a, + test_relocs2 f4,a, + .size arm,.-arm + + .globl _thumb + .type _thumb,%function + .thumb_func +_thumb: + test_relocs foo + test_relocs2 f1,t,.w + test_relocs2 f2,t,.w + test_relocs2 f3,t,.w + test_relocs2 f4,t,.w + .size _thumb,.-_thumb + + .data +foo: + .word 0x11223344 + alldirs diff,f1 + alldirs diff,f2 + alldirs diff,f3 + alldirs diff,f4 diff --git a/ld/testsuite/ld-arm/ifunc-5.dd b/ld/testsuite/ld-arm/ifunc-5.dd new file mode 100644 index 0000000..90d7b21 --- /dev/null +++ b/ld/testsuite/ld-arm/ifunc-5.dd @@ -0,0 +1,91 @@ + +.* + + +Disassembly of section \.iplt: + +00009000 <\.iplt>: +#------------------------------------------------------------------------------ +#------ f1's .iplt entry +#------------------------------------------------------------------------------ + 9000: e28fc600 add ip, pc, #0 + 9004: e28cca08 add ip, ip, #32768 ; 0x8000 + 9008: e5bcf004 ldr pc, \[ip, #4\]! +#------------------------------------------------------------------------------ +#------ f3's .iplt entry +#------------------------------------------------------------------------------ + 900c: e28fc600 add ip, pc, #0 + 9010: e28cca07 add ip, ip, #28672 ; 0x7000 + 9014: e5bcfffc ldr pc, \[ip, #4092\]! ; 0xffc +#------------------------------------------------------------------------------ +#------ f2's .iplt entry +#------------------------------------------------------------------------------ + 9018: e28fc600 add ip, pc, #0 + 901c: e28cca07 add ip, ip, #28672 ; 0x7000 + 9020: e5bcfff4 ldr pc, \[ip, #4084\]! ; 0xff4 + +Disassembly of section \.text: + +0000a000 <f1>: + a000: e1a0f00e mov pc, lr + +0000a004 <f2>: + a004: e1a0f00e mov pc, lr + +0000a008 <f3>: + a008: e1a0f00e mov pc, lr + +0000a00c <_start>: + a00c: eb0017fb bl 10000 <foo> + a010: e59f4000 ldr r4, \[pc, #0\] ; a018 <_start\+0xc> + a014: e59f4000 ldr r4, \[pc, #0\] ; a01c <_start\+0x10> +#------------------------------------------------------------------------------ +#------ .got offset for foo +#------------------------------------------------------------------------------ + a018: 0000001c \.word 0x0000001c +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for foo +#------------------------------------------------------------------------------ + a01c: 00006ffc \.word 0x00006ffc +#------------------------------------------------------------------------------ +#------ f1's .iplt entry +#------------------------------------------------------------------------------ + a020: ebfffbf6 bl 9000 <__irel_end\+0xfe8> + a024: e59f4000 ldr r4, \[pc, #0\] ; a02c <_start\+0x20> + a028: e59f4000 ldr r4, \[pc, #0\] ; a030 <_start\+0x24> +#------------------------------------------------------------------------------ +#------ GP-relative offset of f1's .igot.plt entry +#------------------------------------------------------------------------------ + a02c: 0000000c \.word 0x0000000c +#------------------------------------------------------------------------------ +#------ PC-relative offset of f1's .igot.plt entry +#------------------------------------------------------------------------------ + a030: 00006fdc \.word 0x00006fdc +#------------------------------------------------------------------------------ +#------ f2's .iplt entry +#------------------------------------------------------------------------------ + a034: ebfffbf7 bl 9018 <__irel_end\+0x1000> + a038: e59f4000 ldr r4, \[pc, #0\] ; a040 <_start\+0x34> + a03c: e59f4000 ldr r4, \[pc, #0\] ; a044 <_start\+0x38> +#------------------------------------------------------------------------------ +#------ GP-relative offset of f2's .igot.plt entry +#------------------------------------------------------------------------------ + a040: 00000014 \.word 0x00000014 +#------------------------------------------------------------------------------ +#------ PC-relative offset of f2's .igot.plt entry +#------------------------------------------------------------------------------ + a044: 00006fd0 \.word 0x00006fd0 +#------------------------------------------------------------------------------ +#------ f3's .iplt entry +#------------------------------------------------------------------------------ + a048: ebfffbef bl 900c <__irel_end\+0xff4> + a04c: e59f4000 ldr r4, \[pc, #0\] ; a054 <_start\+0x48> + a050: e59f4000 ldr r4, \[pc, #0\] ; a058 <_start\+0x4c> +#------------------------------------------------------------------------------ +#------ GP-relative offset of f3's .igot.plt entry +#------------------------------------------------------------------------------ + a054: 00000010 \.word 0x00000010 +#------------------------------------------------------------------------------ +#------ PC-relative offset of f3's .igot.plt entry +#------------------------------------------------------------------------------ + a058: 00006fb8 \.word 0x00006fb8 diff --git a/ld/testsuite/ld-arm/ifunc-5.gd b/ld/testsuite/ld-arm/ifunc-5.gd new file mode 100644 index 0000000..8cd69df --- /dev/null +++ b/ld/testsuite/ld-arm/ifunc-5.gd @@ -0,0 +1,23 @@ + +.* + +Contents of section \.data: +#------------------------------------------------------------------------------ +#------ 00010000: foo +#------------------------------------------------------------------------------ + 10000 44332211 00800000 18800000 .* +Contents of section \.got: +#------------------------------------------------------------------------------ +#------ 00011000: .got.plt +#------ 00011004: reserved .got.plt entry +#------ 00011008: reserved .got.plt entry +#------ 0001100c: f1's .igot.plt entry [R_ARM_IRELATIVE] +#------------------------------------------------------------------------------ + 11000 00000000 00000000 00000000 00a00000 .* +#------------------------------------------------------------------------------ +#------ 00011010: f3's .igot.plt entry [R_ARM_IRELATIVE] +#------ 00011014: f2's .igot.plt entry [R_ARM_IRELATIVE] +#------ 00011018: .got entry for foo +#------ 0001101c: .got entry for foo +#------------------------------------------------------------------------------ + 11010 08a00000 04a00000 00000100 00000100 .* diff --git a/ld/testsuite/ld-arm/ifunc-5.rd b/ld/testsuite/ld-arm/ifunc-5.rd new file mode 100644 index 0000000..75e6d70 --- /dev/null +++ b/ld/testsuite/ld-arm/ifunc-5.rd @@ -0,0 +1,8 @@ + +There is no dynamic section in this file\. + +Relocation section '\.rel\.dyn' at offset 0x8000 contains 3 entries: + Offset Info Type Sym\.Value Sym\. Name +0001100c ......a0 R_ARM_IRELATIVE +00011010 ......a0 R_ARM_IRELATIVE +00011014 ......a0 R_ARM_IRELATIVE diff --git a/ld/testsuite/ld-arm/ifunc-5.s b/ld/testsuite/ld-arm/ifunc-5.s new file mode 100644 index 0000000..9074c92 --- /dev/null +++ b/ld/testsuite/ld-arm/ifunc-5.s @@ -0,0 +1,39 @@ + .macro define,name + .type \name,%gnu_indirect_function +\name: + mov pc,lr + .size \name,.-\name + .endm + + .macro test_relocs,name + bl \name + ldr r4,1f + ldr r4,2f +1: + .word \name(GOT) +2: + .word \name(GOT_PREL) + .endm + + .global f2 + + .global f3 + .hidden f3 + + define f1 + define f2 + define f3 + + .globl _start +_start: + test_relocs foo + test_relocs f1 + test_relocs f2 + test_relocs f3 + .size _start,.-_start + + .data +foo: + .word 0x11223344 + .word __irel_start + .word __irel_end diff --git a/ld/testsuite/ld-arm/ifunc-6.dd b/ld/testsuite/ld-arm/ifunc-6.dd new file mode 100644 index 0000000..6715dce --- /dev/null +++ b/ld/testsuite/ld-arm/ifunc-6.dd @@ -0,0 +1,175 @@ + +.* + + +Disassembly of section \.iplt: + +00009000 <\.iplt>: +#------------------------------------------------------------------------------ +#------ thumb entry to f3's .iplt entry +#------------------------------------------------------------------------------ + 9000: 4778 bx pc + 9002: 46c0 nop ; \(mov r8, r8\) +#------------------------------------------------------------------------------ +#------ f3's .iplt entry +#------------------------------------------------------------------------------ + 9004: e28fc600 add ip, pc, #0 + 9008: e28cca08 add ip, ip, #32768 ; 0x8000 + 900c: e5bcf000 ldr pc, \[ip\]! +#------------------------------------------------------------------------------ +#------ f2's .iplt entry +#------------------------------------------------------------------------------ + 9010: e28fc600 add ip, pc, #0 + 9014: e28cca07 add ip, ip, #28672 ; 0x7000 + 9018: e5bcfff8 ldr pc, \[ip, #4088\]! ; 0xff8 +#------------------------------------------------------------------------------ +#------ thumb entry to f4's .iplt entry +#------------------------------------------------------------------------------ + 901c: 4778 bx pc + 901e: 46c0 nop ; \(mov r8, r8\) +#------------------------------------------------------------------------------ +#------ f4's .iplt entry +#------------------------------------------------------------------------------ + 9020: e28fc600 add ip, pc, #0 + 9024: e28cca07 add ip, ip, #28672 ; 0x7000 + 9028: e5bcffec ldr pc, \[ip, #4076\]! ; 0xfec +#------------------------------------------------------------------------------ +#------ f1's .iplt entry +#------------------------------------------------------------------------------ + 902c: e28fc600 add ip, pc, #0 + 9030: e28cca07 add ip, ip, #28672 ; 0x7000 + 9034: e5bcffe4 ldr pc, \[ip, #4068\]! ; 0xfe4 + +Disassembly of section \.text: + +0000a000 <f1>: + a000: e1a0f00e mov pc, lr + +0000a004 <f2>: + a004: 46f7 mov pc, lr + \.\.\. + +0000a008 <f3>: + a008: e1a0f00e mov pc, lr + +0000a00c <f4>: + a00c: 46f7 mov pc, lr + \.\.\. + +0000a010 <_start>: + a010: eb0017fa bl 10000 <foo> + a014: ea0017f9 b 10000 <foo> + a018: 0a0017f8 beq 10000 <foo> + a01c: e59f4000 ldr r4, \[pc, #0\] ; a024 <_start\+0x14> + a020: e59f4000 ldr r4, \[pc, #0\] ; a028 <_start\+0x18> +#------------------------------------------------------------------------------ +#------ .got offset for foo +#------------------------------------------------------------------------------ + a024: 00000020 \.word 0x00000020 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for foo +#------------------------------------------------------------------------------ + a028: 00006ff4 \.word 0x00006ff4 +#------------------------------------------------------------------------------ +#------ f1's .iplt entry +#------------------------------------------------------------------------------ + a02c: ebfffbfe bl 902c <__irel_end\+0x100c> +#------------------------------------------------------------------------------ +#------ f1's .iplt entry +#------------------------------------------------------------------------------ + a030: eafffbfd b 902c <__irel_end\+0x100c> +#------------------------------------------------------------------------------ +#------ f1's .iplt entry +#------------------------------------------------------------------------------ + a034: 0afffbfc beq 902c <__irel_end\+0x100c> + a038: e59f4000 ldr r4, \[pc, #0\] ; a040 <_start\+0x30> + a03c: e59f4000 ldr r4, \[pc, #0\] ; a044 <_start\+0x34> +#------------------------------------------------------------------------------ +#------ GP-relative offset of f1's .igot.plt entry +#------------------------------------------------------------------------------ + a040: 00000018 \.word 0x00000018 +#------------------------------------------------------------------------------ +#------ PC-relative offset of f1's .igot.plt entry +#------------------------------------------------------------------------------ + a044: 00006fd4 \.word 0x00006fd4 +#------------------------------------------------------------------------------ +#------ f2's .iplt entry +#------------------------------------------------------------------------------ + a048: ebfffbf0 bl 9010 <__irel_end\+0xff0> +#------------------------------------------------------------------------------ +#------ f2's .iplt entry +#------------------------------------------------------------------------------ + a04c: eafffbef b 9010 <__irel_end\+0xff0> +#------------------------------------------------------------------------------ +#------ f2's .iplt entry +#------------------------------------------------------------------------------ + a050: 0afffbee beq 9010 <__irel_end\+0xff0> + a054: e59f4000 ldr r4, \[pc, #0\] ; a05c <_start\+0x4c> + a058: e59f4000 ldr r4, \[pc, #0\] ; a060 <_start\+0x50> +#------------------------------------------------------------------------------ +#------ GP-relative offset of f2's .igot.plt entry +#------------------------------------------------------------------------------ + a05c: 00000010 \.word 0x00000010 +#------------------------------------------------------------------------------ +#------ PC-relative offset of f2's .igot.plt entry +#------------------------------------------------------------------------------ + a060: 00006fb0 \.word 0x00006fb0 + +0000a064 <_thumb>: + a064: f005 ffcc bl 10000 <foo> + a068: f005 bfca b\.w 10000 <foo> + a06c: f005 87c8 beq\.w 10000 <foo> + a070: 4c00 ldr r4, \[pc, #0\] ; \(a074 <_thumb\+0x10>\) + a072: 4c01 ldr r4, \[pc, #4\] ; \(a078 <_thumb\+0x14>\) +#------------------------------------------------------------------------------ +#------ .got offset for foo +#------------------------------------------------------------------------------ + a074: 00000020 \.word 0x00000020 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for foo +#------------------------------------------------------------------------------ + a078: 00006fa4 \.word 0x00006fa4 +#------------------------------------------------------------------------------ +#------ f3's .iplt entry +#------------------------------------------------------------------------------ + a07c: f7fe efc2 blx 9004 <__irel_end\+0xfe4> +#------------------------------------------------------------------------------ +#------ thumb entry to f3's .iplt entry +#------------------------------------------------------------------------------ + a080: f7fe bfbe b\.w 9000 <__irel_end\+0xfe0> +#------------------------------------------------------------------------------ +#------ thumb entry to f3's .iplt entry +#------------------------------------------------------------------------------ + a084: f43e afbc beq\.w 9000 <__irel_end\+0xfe0> + a088: 4c00 ldr r4, \[pc, #0\] ; \(a08c <_thumb\+0x28>\) + a08a: 4c01 ldr r4, \[pc, #4\] ; \(a090 <_thumb\+0x2c>\) +#------------------------------------------------------------------------------ +#------ GP-relative offset of f3's .igot.plt entry +#------------------------------------------------------------------------------ + a08c: 0000000c \.word 0x0000000c +#------------------------------------------------------------------------------ +#------ PC-relative offset of f3's .igot.plt entry +#------------------------------------------------------------------------------ + a090: 00006f7c \.word 0x00006f7c +#------------------------------------------------------------------------------ +#------ f4's .iplt entry +#------------------------------------------------------------------------------ + a094: f7fe efc4 blx 9020 <__irel_end\+0x1000> +#------------------------------------------------------------------------------ +#------ thumb entry to f4's .iplt entry +#------------------------------------------------------------------------------ + a098: f7fe bfc0 b\.w 901c <__irel_end\+0xffc> +#------------------------------------------------------------------------------ +#------ thumb entry to f4's .iplt entry +#------------------------------------------------------------------------------ + a09c: f43e afbe beq\.w 901c <__irel_end\+0xffc> + a0a0: 4c00 ldr r4, \[pc, #0\] ; \(a0a4 <_thumb\+0x40>\) + a0a2: 4c01 ldr r4, \[pc, #4\] ; \(a0a8 <_thumb\+0x44>\) +#------------------------------------------------------------------------------ +#------ GP-relative offset of f4's .igot.plt entry +#------------------------------------------------------------------------------ + a0a4: 00000014 \.word 0x00000014 +#------------------------------------------------------------------------------ +#------ PC-relative offset of f4's .igot.plt entry +#------------------------------------------------------------------------------ + a0a8: 00006f6c \.word 0x00006f6c diff --git a/ld/testsuite/ld-arm/ifunc-6.gd b/ld/testsuite/ld-arm/ifunc-6.gd new file mode 100644 index 0000000..45fd914 --- /dev/null +++ b/ld/testsuite/ld-arm/ifunc-6.gd @@ -0,0 +1,27 @@ + +.* + +Contents of section \.data: +#------------------------------------------------------------------------------ +#------ 00010000: foo +#------------------------------------------------------------------------------ + 10000 44332211 00800000 20800000 .* +Contents of section \.got: +#------------------------------------------------------------------------------ +#------ 00011000: .got.plt +#------ 00011004: reserved .got.plt entry +#------ 00011008: reserved .got.plt entry +#------ 0001100c: f3's .igot.plt entry [R_ARM_IRELATIVE] +#------------------------------------------------------------------------------ + 11000 00000000 00000000 00000000 08a00000 .* +#------------------------------------------------------------------------------ +#------ 00011010: f2's .igot.plt entry [R_ARM_IRELATIVE] +#------ 00011014: f4's .igot.plt entry [R_ARM_IRELATIVE] +#------ 00011018: f1's .igot.plt entry [R_ARM_IRELATIVE] +#------ 0001101c: .got entry for foo +#------------------------------------------------------------------------------ + 11010 05a00000 0da00000 00a00000 00000100 .* +#------------------------------------------------------------------------------ +#------ 00011020: .got entry for foo +#------------------------------------------------------------------------------ + 11020 00000100 .* diff --git a/ld/testsuite/ld-arm/ifunc-6.rd b/ld/testsuite/ld-arm/ifunc-6.rd new file mode 100644 index 0000000..0fbfec5 --- /dev/null +++ b/ld/testsuite/ld-arm/ifunc-6.rd @@ -0,0 +1,9 @@ + +There is no dynamic section in this file\. + +Relocation section '\.rel\.dyn' at offset 0x8000 contains 4 entries: + Offset Info Type Sym\.Value Sym\. Name +0001100c ......a0 R_ARM_IRELATIVE +00011010 ......a0 R_ARM_IRELATIVE +00011014 ......a0 R_ARM_IRELATIVE +00011018 ......a0 R_ARM_IRELATIVE diff --git a/ld/testsuite/ld-arm/ifunc-6.s b/ld/testsuite/ld-arm/ifunc-6.s new file mode 100644 index 0000000..4596fa3 --- /dev/null +++ b/ld/testsuite/ld-arm/ifunc-6.s @@ -0,0 +1,59 @@ + .syntax unified + .arch armv6t2 + + .macro define,name,type + .type \name,%gnu_indirect_function + \type +\name: + mov pc,lr + .size \name,.-\name + .endm + + .macro test_relocs,name,width + bl\width \name + b\width \name + beq\width \name + ldr r4,1f + ldr r4,2f +1: + .word \name(GOT) +2: + .word \name(GOT_PREL) + .endm + + .global f1 + .global f2 + + .global f3 + .global f4 + .hidden f3 + .hidden f4 + + define f1,.arm + define f2,.thumb_func + define f3,.arm + define f4,.thumb_func + + .globl _start + .type _start,%function + .arm +_start: + test_relocs foo + test_relocs f1, + test_relocs f2, + .size _start,.-_start + + .globl _thumb + .type _thumb,%function + .thumb_func +_thumb: + test_relocs foo + test_relocs f3,.w + test_relocs f4,.w + .size _thumb,.-_thumb + + .data +foo: + .word 0x11223344 + .word __irel_start + .word __irel_end diff --git a/ld/testsuite/ld-arm/ifunc-7.dd b/ld/testsuite/ld-arm/ifunc-7.dd new file mode 100644 index 0000000..c64e748 --- /dev/null +++ b/ld/testsuite/ld-arm/ifunc-7.dd @@ -0,0 +1,120 @@ + +.* + + +Disassembly of section \.plt: + +00009000 <\.plt>: + 9000: e52de004 push {lr} ; \(str lr, \[sp, #-4\]!\) + 9004: e59fe004 ldr lr, \[pc, #4\] ; 9010 <f1-0xff0> + 9008: e08fe00e add lr, pc, lr + 900c: e5bef008 ldr pc, \[lr, #8\]! +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got.plt +#------------------------------------------------------------------------------ + 9010: 00007ff0 \.word 0x00007ff0 +#------------------------------------------------------------------------------ +#------ f2's .plt entry +#------------------------------------------------------------------------------ + 9014: e28fc600 add ip, pc, #0 + 9018: e28cca07 add ip, ip, #28672 ; 0x7000 + 901c: e5bcfff0 ldr pc, \[ip, #4080\]! ; 0xff0 +#------------------------------------------------------------------------------ +#------ f4's .plt entry +#------------------------------------------------------------------------------ + 9020: e28fc600 add ip, pc, #0 + 9024: e28cca07 add ip, ip, #28672 ; 0x7000 + 9028: e5bcffe8 ldr pc, \[ip, #4072\]! ; 0xfe8 + +Disassembly of section \.iplt: + +0000902c <\.iplt>: +#------------------------------------------------------------------------------ +#------ f1's .iplt entry +#------------------------------------------------------------------------------ + 902c: e28fc600 add ip, pc, #0 + 9030: e28cca07 add ip, ip, #28672 ; 0x7000 + 9034: e5bcffe0 ldr pc, \[ip, #4064\]! ; 0xfe0 +#------------------------------------------------------------------------------ +#------ f3's .iplt entry +#------------------------------------------------------------------------------ + 9038: e28fc600 add ip, pc, #0 + 903c: e28cca07 add ip, ip, #28672 ; 0x7000 + 9040: e5bcffd8 ldr pc, \[ip, #4056\]! ; 0xfd8 + +Disassembly of section \.text: + +0000a000 <f1>: + a000: e1a0f00e mov pc, lr + +0000a004 <f3>: + a004: e1a0f00e mov pc, lr + +0000a008 <arm>: + a008: eb0017fc bl 10000 <foo> + a00c: e59f4000 ldr r4, \[pc, #0\] ; a014 <arm\+0xc> + a010: e59f4000 ldr r4, \[pc, #0\] ; a018 <arm\+0x10> +#------------------------------------------------------------------------------ +#------ .got offset for foo +#------------------------------------------------------------------------------ + a014: 00000020 \.word 0x00000020 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for foo +#------------------------------------------------------------------------------ + a018: 00007004 \.word 0x00007004 +#------------------------------------------------------------------------------ +#------ f1's .iplt entry +#------------------------------------------------------------------------------ + a01c: ebfffc02 bl 902c <f1-0xfd4> + a020: e59f4000 ldr r4, \[pc, #0\] ; a028 <arm\+0x20> + a024: e59f4000 ldr r4, \[pc, #0\] ; a02c <arm\+0x24> +#------------------------------------------------------------------------------ +#------ GP-relative offset of f1's .igot.plt entry +#------------------------------------------------------------------------------ + a028: 00000014 \.word 0x00000014 +#------------------------------------------------------------------------------ +#------ PC-relative offset of f1's .igot.plt entry +#------------------------------------------------------------------------------ + a02c: 00006fe8 \.word 0x00006fe8 +#------------------------------------------------------------------------------ +#------ f2's .plt entry +#------------------------------------------------------------------------------ + a030: ebfffbf7 bl 9014 <f1-0xfec> + a034: e59f4000 ldr r4, \[pc, #0\] ; a03c <arm\+0x34> + a038: e59f4000 ldr r4, \[pc, #0\] ; a040 <arm\+0x38> +#------------------------------------------------------------------------------ +#------ .got offset for f2 +#------------------------------------------------------------------------------ + a03c: 00000024 \.word 0x00000024 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for f2 +#------------------------------------------------------------------------------ + a040: 00006fe4 \.word 0x00006fe4 +#------------------------------------------------------------------------------ +#------ f3's .iplt entry +#------------------------------------------------------------------------------ + a044: ebfffbfb bl 9038 <f1-0xfc8> + a048: e59f4000 ldr r4, \[pc, #0\] ; a050 <arm\+0x48> + a04c: e59f4000 ldr r4, \[pc, #0\] ; a054 <arm\+0x4c> +#------------------------------------------------------------------------------ +#------ GP-relative offset of f3's .igot.plt entry +#------------------------------------------------------------------------------ + a050: 00000018 \.word 0x00000018 +#------------------------------------------------------------------------------ +#------ PC-relative offset of f3's .igot.plt entry +#------------------------------------------------------------------------------ + a054: 00006fc4 \.word 0x00006fc4 +#------------------------------------------------------------------------------ +#------ f4's .plt entry +#------------------------------------------------------------------------------ + a058: ebfffbf0 bl 9020 <f1-0xfe0> + a05c: e59f4000 ldr r4, \[pc, #0\] ; a064 <arm\+0x5c> + a060: e59f4000 ldr r4, \[pc, #0\] ; a068 <arm\+0x60> +#------------------------------------------------------------------------------ +#------ .got offset for f4 +#------------------------------------------------------------------------------ + a064: 00000028 \.word 0x00000028 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for f4 +#------------------------------------------------------------------------------ + a068: 00006fc0 \.word 0x00006fc0 diff --git a/ld/testsuite/ld-arm/ifunc-7.gd b/ld/testsuite/ld-arm/ifunc-7.gd new file mode 100644 index 0000000..a116aaf --- /dev/null +++ b/ld/testsuite/ld-arm/ifunc-7.gd @@ -0,0 +1,45 @@ + +.* + +Contents of section \.data: +#------------------------------------------------------------------------------ +#------ 00010000: foo +#------ 00010004: contains foo [R_ARM_RELATIVE] +#------ 00010008: contains PC-relative offset of foo +#------ 0001000c: contains f1 [R_ARM_IRELATIVE] +#------------------------------------------------------------------------------ + 10000 44332211 00000100 f8ffffff 00a00000 .* +#------------------------------------------------------------------------------ +#------ 00010010: contains PC-relative offset of f1's .iplt entry +#------ 00010014: f2 [R_ARM_ABS32] +#------ 00010018: f2 [R_ARM_REL32] +#------ 0001001c: contains f3 [R_ARM_IRELATIVE] +#------------------------------------------------------------------------------ + 10010 1c90ffff 00000000 00000000 04a00000 .* +#------------------------------------------------------------------------------ +#------ 00010020: contains PC-relative offset of f3's .iplt entry +#------ 00010024: f4 [R_ARM_ABS32] +#------ 00010028: f4 [R_ARM_REL32] +#------------------------------------------------------------------------------ + 10020 1890ffff 00000000 00000000 .* +Contents of section \.got: +#------------------------------------------------------------------------------ +#------ 00011000: .got.plt +#------ 00011004: reserved .got.plt entry +#------ 00011008: reserved .got.plt entry +#------ 0001100c: f2's .got.plt entry [R_ARM_JUMP_SLOT] +#------------------------------------------------------------------------------ + 11000 00200100 00000000 00000000 00900000 .* +#------------------------------------------------------------------------------ +#------ 00011010: f4's .got.plt entry [R_ARM_JUMP_SLOT] +#------ 00011014: f1's .igot.plt entry [R_ARM_IRELATIVE] +#------ 00011018: f3's .igot.plt entry [R_ARM_IRELATIVE] +#------ 0001101c: .got entry for foo [R_ARM_RELATIVE] +#------------------------------------------------------------------------------ + 11010 00900000 00a00000 04a00000 00000100 .* +#------------------------------------------------------------------------------ +#------ 00011020: .got entry for foo [R_ARM_RELATIVE] +#------ 00011024: .got entry for f2 [R_ARM_GLOB_DAT] +#------ 00011028: .got entry for f4 [R_ARM_GLOB_DAT] +#------------------------------------------------------------------------------ + 11020 00000100 00000000 00000000 .* diff --git a/ld/testsuite/ld-arm/ifunc-7.rd b/ld/testsuite/ld-arm/ifunc-7.rd new file mode 100644 index 0000000..a29b184 --- /dev/null +++ b/ld/testsuite/ld-arm/ifunc-7.rd @@ -0,0 +1,21 @@ + +Relocation section '\.rel\.dyn' at offset 0x8000 contains 13 entries: + Offset Info Type Sym\.Value Sym\. Name +00010004 ......17 R_ARM_RELATIVE +0001101c ......17 R_ARM_RELATIVE +00011020 ......17 R_ARM_RELATIVE +0001000c ......a0 R_ARM_IRELATIVE +0001001c ......a0 R_ARM_IRELATIVE +00011014 ......a0 R_ARM_IRELATIVE +00011018 ......a0 R_ARM_IRELATIVE +00010014 ......02 R_ARM_ABS32 00000000 f2 +00010018 ......03 R_ARM_REL32 00000000 f2 +00011024 ......15 R_ARM_GLOB_DAT 00000000 f2 +00010024 ......02 R_ARM_ABS32 00000000 f4 +00010028 ......03 R_ARM_REL32 00000000 f4 +00011028 ......15 R_ARM_GLOB_DAT 00000000 f4 + +Relocation section '\.rel\.plt' at offset 0x8068 contains 2 entries: + Offset Info Type Sym\.Value Sym\. Name +0001100c ......16 R_ARM_JUMP_SLOT 00000000 f2 +00011010 ......16 R_ARM_JUMP_SLOT 00000000 f4 diff --git a/ld/testsuite/ld-arm/ifunc-7.s b/ld/testsuite/ld-arm/ifunc-7.s new file mode 100644 index 0000000..85ffb68 --- /dev/null +++ b/ld/testsuite/ld-arm/ifunc-7.s @@ -0,0 +1,42 @@ + .macro define,name + .text + .type \name,%gnu_indirect_function +\name: + mov pc,lr + .size \name,.-\name + .endm + + .macro test_relocs,name + bl \name(PLT) + ldr r4,1f + ldr r4,2f +1: + .word \name(GOT) +2: + .word \name(GOT_PREL) + + .data + .word \name + .word \name - . + .text + .endm + + .globl f3 + .hidden f3 + + define f1 + define f3 + + .data +foo: + .word 0x11223344 + + .text + .globl arm +arm: + test_relocs foo + test_relocs f1 + test_relocs f2 + test_relocs f3 + test_relocs f4 + .size arm,.-arm diff --git a/ld/testsuite/ld-arm/ifunc-8.dd b/ld/testsuite/ld-arm/ifunc-8.dd new file mode 100644 index 0000000..67978bb --- /dev/null +++ b/ld/testsuite/ld-arm/ifunc-8.dd @@ -0,0 +1,1017 @@ + +.* + + +Disassembly of section \.plt: + +00009000 <\.plt>: + 9000: e52de004 push {lr} ; \(str lr, \[sp, #-4\]!\) + 9004: e59fe004 ldr lr, \[pc, #4\] ; 9010 <aaf1-0xff0> + 9008: e08fe00e add lr, pc, lr + 900c: e5bef008 ldr pc, \[lr, #8\]! +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got.plt +#------------------------------------------------------------------------------ + 9010: 00007ff0 \.word 0x00007ff0 +#------------------------------------------------------------------------------ +#------ thumb entry to atf2's .plt entry +#------------------------------------------------------------------------------ + 9014: 4778 bx pc + 9016: 46c0 nop ; \(mov r8, r8\) +#------------------------------------------------------------------------------ +#------ atf2's .plt entry +#------------------------------------------------------------------------------ + 9018: e28fc600 add ip, pc, #0 + 901c: e28cca07 add ip, ip, #28672 ; 0x7000 + 9020: e5bcffec ldr pc, \[ip, #4076\]! ; 0xfec +#------------------------------------------------------------------------------ +#------ aaf4's .plt entry +#------------------------------------------------------------------------------ + 9024: e28fc600 add ip, pc, #0 + 9028: e28cca07 add ip, ip, #28672 ; 0x7000 + 902c: e5bcffe4 ldr pc, \[ip, #4068\]! ; 0xfe4 +#------------------------------------------------------------------------------ +#------ thumb entry to ttf2's .plt entry +#------------------------------------------------------------------------------ + 9030: 4778 bx pc + 9032: 46c0 nop ; \(mov r8, r8\) +#------------------------------------------------------------------------------ +#------ ttf2's .plt entry +#------------------------------------------------------------------------------ + 9034: e28fc600 add ip, pc, #0 + 9038: e28cca07 add ip, ip, #28672 ; 0x7000 + 903c: e5bcffd8 ldr pc, \[ip, #4056\]! ; 0xfd8 +#------------------------------------------------------------------------------ +#------ thumb entry to tbf2's .plt entry +#------------------------------------------------------------------------------ + 9040: 4778 bx pc + 9042: 46c0 nop ; \(mov r8, r8\) +#------------------------------------------------------------------------------ +#------ tbf2's .plt entry +#------------------------------------------------------------------------------ + 9044: e28fc600 add ip, pc, #0 + 9048: e28cca07 add ip, ip, #28672 ; 0x7000 + 904c: e5bcffcc ldr pc, \[ip, #4044\]! ; 0xfcc +#------------------------------------------------------------------------------ +#------ taf2's .plt entry +#------------------------------------------------------------------------------ + 9050: e28fc600 add ip, pc, #0 + 9054: e28cca07 add ip, ip, #28672 ; 0x7000 + 9058: e5bcffc4 ldr pc, \[ip, #4036\]! ; 0xfc4 +#------------------------------------------------------------------------------ +#------ aaf2's .plt entry +#------------------------------------------------------------------------------ + 905c: e28fc600 add ip, pc, #0 + 9060: e28cca07 add ip, ip, #28672 ; 0x7000 + 9064: e5bcffbc ldr pc, \[ip, #4028\]! ; 0xfbc +#------------------------------------------------------------------------------ +#------ thumb entry to abf4's .plt entry +#------------------------------------------------------------------------------ + 9068: 4778 bx pc + 906a: 46c0 nop ; \(mov r8, r8\) +#------------------------------------------------------------------------------ +#------ abf4's .plt entry +#------------------------------------------------------------------------------ + 906c: e28fc600 add ip, pc, #0 + 9070: e28cca07 add ip, ip, #28672 ; 0x7000 + 9074: e5bcffb0 ldr pc, \[ip, #4016\]! ; 0xfb0 +#------------------------------------------------------------------------------ +#------ thumb entry to tbf4's .plt entry +#------------------------------------------------------------------------------ + 9078: 4778 bx pc + 907a: 46c0 nop ; \(mov r8, r8\) +#------------------------------------------------------------------------------ +#------ tbf4's .plt entry +#------------------------------------------------------------------------------ + 907c: e28fc600 add ip, pc, #0 + 9080: e28cca07 add ip, ip, #28672 ; 0x7000 + 9084: e5bcffa4 ldr pc, \[ip, #4004\]! ; 0xfa4 +#------------------------------------------------------------------------------ +#------ thumb entry to ttf4's .plt entry +#------------------------------------------------------------------------------ + 9088: 4778 bx pc + 908a: 46c0 nop ; \(mov r8, r8\) +#------------------------------------------------------------------------------ +#------ ttf4's .plt entry +#------------------------------------------------------------------------------ + 908c: e28fc600 add ip, pc, #0 + 9090: e28cca07 add ip, ip, #28672 ; 0x7000 + 9094: e5bcff98 ldr pc, \[ip, #3992\]! ; 0xf98 +#------------------------------------------------------------------------------ +#------ thumb entry to atf4's .plt entry +#------------------------------------------------------------------------------ + 9098: 4778 bx pc + 909a: 46c0 nop ; \(mov r8, r8\) +#------------------------------------------------------------------------------ +#------ atf4's .plt entry +#------------------------------------------------------------------------------ + 909c: e28fc600 add ip, pc, #0 + 90a0: e28cca07 add ip, ip, #28672 ; 0x7000 + 90a4: e5bcff8c ldr pc, \[ip, #3980\]! ; 0xf8c +#------------------------------------------------------------------------------ +#------ taf4's .plt entry +#------------------------------------------------------------------------------ + 90a8: e28fc600 add ip, pc, #0 + 90ac: e28cca07 add ip, ip, #28672 ; 0x7000 + 90b0: e5bcff84 ldr pc, \[ip, #3972\]! ; 0xf84 +#------------------------------------------------------------------------------ +#------ thumb entry to abf2's .plt entry +#------------------------------------------------------------------------------ + 90b4: 4778 bx pc + 90b6: 46c0 nop ; \(mov r8, r8\) +#------------------------------------------------------------------------------ +#------ abf2's .plt entry +#------------------------------------------------------------------------------ + 90b8: e28fc600 add ip, pc, #0 + 90bc: e28cca07 add ip, ip, #28672 ; 0x7000 + 90c0: e5bcff78 ldr pc, \[ip, #3960\]! ; 0xf78 + +Disassembly of section \.iplt: + +000090c4 <\.iplt>: +#------------------------------------------------------------------------------ +#------ aaf1's .iplt entry +#------------------------------------------------------------------------------ + 90c4: e28fc600 add ip, pc, #0 + 90c8: e28cca07 add ip, ip, #28672 ; 0x7000 + 90cc: e5bcff70 ldr pc, \[ip, #3952\]! ; 0xf70 +#------------------------------------------------------------------------------ +#------ thumb entry to atf1's .iplt entry +#------------------------------------------------------------------------------ + 90d0: 4778 bx pc + 90d2: 46c0 nop ; \(mov r8, r8\) +#------------------------------------------------------------------------------ +#------ atf1's .iplt entry +#------------------------------------------------------------------------------ + 90d4: e28fc600 add ip, pc, #0 + 90d8: e28cca07 add ip, ip, #28672 ; 0x7000 + 90dc: e5bcff64 ldr pc, \[ip, #3940\]! ; 0xf64 +#------------------------------------------------------------------------------ +#------ thumb entry to abf1's .iplt entry +#------------------------------------------------------------------------------ + 90e0: 4778 bx pc + 90e2: 46c0 nop ; \(mov r8, r8\) +#------------------------------------------------------------------------------ +#------ abf1's .iplt entry +#------------------------------------------------------------------------------ + 90e4: e28fc600 add ip, pc, #0 + 90e8: e28cca07 add ip, ip, #28672 ; 0x7000 + 90ec: e5bcff58 ldr pc, \[ip, #3928\]! ; 0xf58 +#------------------------------------------------------------------------------ +#------ taf1's .iplt entry +#------------------------------------------------------------------------------ + 90f0: e28fc600 add ip, pc, #0 + 90f4: e28cca07 add ip, ip, #28672 ; 0x7000 + 90f8: e5bcff50 ldr pc, \[ip, #3920\]! ; 0xf50 +#------------------------------------------------------------------------------ +#------ thumb entry to ttf1's .iplt entry +#------------------------------------------------------------------------------ + 90fc: 4778 bx pc + 90fe: 46c0 nop ; \(mov r8, r8\) +#------------------------------------------------------------------------------ +#------ ttf1's .iplt entry +#------------------------------------------------------------------------------ + 9100: e28fc600 add ip, pc, #0 + 9104: e28cca07 add ip, ip, #28672 ; 0x7000 + 9108: e5bcff44 ldr pc, \[ip, #3908\]! ; 0xf44 +#------------------------------------------------------------------------------ +#------ thumb entry to tbf1's .iplt entry +#------------------------------------------------------------------------------ + 910c: 4778 bx pc + 910e: 46c0 nop ; \(mov r8, r8\) +#------------------------------------------------------------------------------ +#------ tbf1's .iplt entry +#------------------------------------------------------------------------------ + 9110: e28fc600 add ip, pc, #0 + 9114: e28cca07 add ip, ip, #28672 ; 0x7000 + 9118: e5bcff38 ldr pc, \[ip, #3896\]! ; 0xf38 +#------------------------------------------------------------------------------ +#------ thumb entry to atf3's .iplt entry +#------------------------------------------------------------------------------ + 911c: 4778 bx pc + 911e: 46c0 nop ; \(mov r8, r8\) +#------------------------------------------------------------------------------ +#------ atf3's .iplt entry +#------------------------------------------------------------------------------ + 9120: e28fc600 add ip, pc, #0 + 9124: e28cca07 add ip, ip, #28672 ; 0x7000 + 9128: e5bcff2c ldr pc, \[ip, #3884\]! ; 0xf2c +#------------------------------------------------------------------------------ +#------ thumb entry to abf3's .iplt entry +#------------------------------------------------------------------------------ + 912c: 4778 bx pc + 912e: 46c0 nop ; \(mov r8, r8\) +#------------------------------------------------------------------------------ +#------ abf3's .iplt entry +#------------------------------------------------------------------------------ + 9130: e28fc600 add ip, pc, #0 + 9134: e28cca07 add ip, ip, #28672 ; 0x7000 + 9138: e5bcff20 ldr pc, \[ip, #3872\]! ; 0xf20 +#------------------------------------------------------------------------------ +#------ thumb entry to ttf3's .iplt entry +#------------------------------------------------------------------------------ + 913c: 4778 bx pc + 913e: 46c0 nop ; \(mov r8, r8\) +#------------------------------------------------------------------------------ +#------ ttf3's .iplt entry +#------------------------------------------------------------------------------ + 9140: e28fc600 add ip, pc, #0 + 9144: e28cca07 add ip, ip, #28672 ; 0x7000 + 9148: e5bcff14 ldr pc, \[ip, #3860\]! ; 0xf14 +#------------------------------------------------------------------------------ +#------ thumb entry to tbf3's .iplt entry +#------------------------------------------------------------------------------ + 914c: 4778 bx pc + 914e: 46c0 nop ; \(mov r8, r8\) +#------------------------------------------------------------------------------ +#------ tbf3's .iplt entry +#------------------------------------------------------------------------------ + 9150: e28fc600 add ip, pc, #0 + 9154: e28cca07 add ip, ip, #28672 ; 0x7000 + 9158: e5bcff08 ldr pc, \[ip, #3848\]! ; 0xf08 +#------------------------------------------------------------------------------ +#------ taf3's .iplt entry +#------------------------------------------------------------------------------ + 915c: e28fc600 add ip, pc, #0 + 9160: e28cca07 add ip, ip, #28672 ; 0x7000 + 9164: e5bcff00 ldr pc, \[ip, #3840\]! ; 0xf00 +#------------------------------------------------------------------------------ +#------ aaf3's .iplt entry +#------------------------------------------------------------------------------ + 9168: e28fc600 add ip, pc, #0 + 916c: e28cca07 add ip, ip, #28672 ; 0x7000 + 9170: e5bcfef8 ldr pc, \[ip, #3832\]! ; 0xef8 + +Disassembly of section \.text: + +0000a000 <aaf1>: + a000: e1a0f00e mov pc, lr + +0000a004 <atf1>: + a004: e1a0f00e mov pc, lr + +0000a008 <abf1>: + a008: e1a0f00e mov pc, lr + +0000a00c <taf1>: + a00c: 46f7 mov pc, lr + +0000a00e <ttf1>: + a00e: 46f7 mov pc, lr + +0000a010 <tbf1>: + a010: 46f7 mov pc, lr + \.\.\. + +0000a014 <aaf3>: + a014: e1a0f00e mov pc, lr + +0000a018 <atf3>: + a018: e1a0f00e mov pc, lr + +0000a01c <abf3>: + a01c: e1a0f00e mov pc, lr + +0000a020 <taf3>: + a020: 46f7 mov pc, lr + +0000a022 <ttf3>: + a022: 46f7 mov pc, lr + +0000a024 <tbf3>: + a024: 46f7 mov pc, lr + \.\.\. + +0000a028 <arm>: + a028: eb0017f4 bl 10000 <foo> + a02c: ea0017f3 b 10000 <foo> + a030: 0a0017f2 beq 10000 <foo> + a034: e59f4000 ldr r4, \[pc, #0\] ; a03c <arm\+0x14> + a038: e59f4000 ldr r4, \[pc, #0\] ; a040 <arm\+0x18> +#------------------------------------------------------------------------------ +#------ .got offset for foo +#------------------------------------------------------------------------------ + a03c: 00000070 \.word 0x00000070 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for foo +#------------------------------------------------------------------------------ + a040: 0000702c \.word 0x0000702c +#------------------------------------------------------------------------------ +#------ aaf1's .iplt entry +#------------------------------------------------------------------------------ + a044: ebfffc1e bl 90c4 <aaf1-0xf3c> +#------------------------------------------------------------------------------ +#------ aaf1's .iplt entry +#------------------------------------------------------------------------------ + a048: eafffc1d b 90c4 <aaf1-0xf3c> +#------------------------------------------------------------------------------ +#------ aaf1's .iplt entry +#------------------------------------------------------------------------------ + a04c: 0afffc1c beq 90c4 <aaf1-0xf3c> + a050: e59f4000 ldr r4, \[pc, #0\] ; a058 <arm\+0x30> + a054: e59f4000 ldr r4, \[pc, #0\] ; a05c <arm\+0x34> +#------------------------------------------------------------------------------ +#------ GP-relative offset of aaf1's .igot.plt entry +#------------------------------------------------------------------------------ + a058: 0000003c \.word 0x0000003c +#------------------------------------------------------------------------------ +#------ PC-relative offset of aaf1's .igot.plt entry +#------------------------------------------------------------------------------ + a05c: 00006fe0 \.word 0x00006fe0 +#------------------------------------------------------------------------------ +#------ taf1's .iplt entry +#------------------------------------------------------------------------------ + a060: ebfffc22 bl 90f0 <aaf1-0xf10> +#------------------------------------------------------------------------------ +#------ taf1's .iplt entry +#------------------------------------------------------------------------------ + a064: eafffc21 b 90f0 <aaf1-0xf10> +#------------------------------------------------------------------------------ +#------ taf1's .iplt entry +#------------------------------------------------------------------------------ + a068: 0afffc20 beq 90f0 <aaf1-0xf10> + a06c: e59f4000 ldr r4, \[pc, #0\] ; a074 <arm\+0x4c> + a070: e59f4000 ldr r4, \[pc, #0\] ; a078 <arm\+0x50> +#------------------------------------------------------------------------------ +#------ GP-relative offset of taf1's .igot.plt entry +#------------------------------------------------------------------------------ + a074: 00000048 \.word 0x00000048 +#------------------------------------------------------------------------------ +#------ PC-relative offset of taf1's .igot.plt entry +#------------------------------------------------------------------------------ + a078: 00006fd0 \.word 0x00006fd0 +#------------------------------------------------------------------------------ +#------ abf1's .iplt entry +#------------------------------------------------------------------------------ + a07c: ebfffc18 bl 90e4 <aaf1-0xf1c> +#------------------------------------------------------------------------------ +#------ abf1's .iplt entry +#------------------------------------------------------------------------------ + a080: eafffc17 b 90e4 <aaf1-0xf1c> +#------------------------------------------------------------------------------ +#------ abf1's .iplt entry +#------------------------------------------------------------------------------ + a084: 0afffc16 beq 90e4 <aaf1-0xf1c> + a088: e59f4000 ldr r4, \[pc, #0\] ; a090 <arm\+0x68> + a08c: e59f4000 ldr r4, \[pc, #0\] ; a094 <arm\+0x6c> +#------------------------------------------------------------------------------ +#------ GP-relative offset of abf1's .igot.plt entry +#------------------------------------------------------------------------------ + a090: 00000044 \.word 0x00000044 +#------------------------------------------------------------------------------ +#------ PC-relative offset of abf1's .igot.plt entry +#------------------------------------------------------------------------------ + a094: 00006fb0 \.word 0x00006fb0 +#------------------------------------------------------------------------------ +#------ tbf1's .iplt entry +#------------------------------------------------------------------------------ + a098: ebfffc1c bl 9110 <aaf1-0xef0> +#------------------------------------------------------------------------------ +#------ tbf1's .iplt entry +#------------------------------------------------------------------------------ + a09c: eafffc1b b 9110 <aaf1-0xef0> +#------------------------------------------------------------------------------ +#------ tbf1's .iplt entry +#------------------------------------------------------------------------------ + a0a0: 0afffc1a beq 9110 <aaf1-0xef0> + a0a4: e59f4000 ldr r4, \[pc, #0\] ; a0ac <arm\+0x84> + a0a8: e59f4000 ldr r4, \[pc, #0\] ; a0b0 <arm\+0x88> +#------------------------------------------------------------------------------ +#------ GP-relative offset of tbf1's .igot.plt entry +#------------------------------------------------------------------------------ + a0ac: 00000050 \.word 0x00000050 +#------------------------------------------------------------------------------ +#------ PC-relative offset of tbf1's .igot.plt entry +#------------------------------------------------------------------------------ + a0b0: 00006fa0 \.word 0x00006fa0 +#------------------------------------------------------------------------------ +#------ aaf2's .plt entry +#------------------------------------------------------------------------------ + a0b4: ebfffbe8 bl 905c <aaf1-0xfa4> +#------------------------------------------------------------------------------ +#------ aaf2's .plt entry +#------------------------------------------------------------------------------ + a0b8: eafffbe7 b 905c <aaf1-0xfa4> +#------------------------------------------------------------------------------ +#------ aaf2's .plt entry +#------------------------------------------------------------------------------ + a0bc: 0afffbe6 beq 905c <aaf1-0xfa4> + a0c0: e59f4000 ldr r4, \[pc, #0\] ; a0c8 <arm\+0xa0> + a0c4: e59f4000 ldr r4, \[pc, #0\] ; a0cc <arm\+0xa4> +#------------------------------------------------------------------------------ +#------ .got offset for aaf2 +#------------------------------------------------------------------------------ + a0c8: 00000088 \.word 0x00000088 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for aaf2 +#------------------------------------------------------------------------------ + a0cc: 00006fbc \.word 0x00006fbc +#------------------------------------------------------------------------------ +#------ taf2's .plt entry +#------------------------------------------------------------------------------ + a0d0: ebfffbde bl 9050 <aaf1-0xfb0> +#------------------------------------------------------------------------------ +#------ taf2's .plt entry +#------------------------------------------------------------------------------ + a0d4: eafffbdd b 9050 <aaf1-0xfb0> +#------------------------------------------------------------------------------ +#------ taf2's .plt entry +#------------------------------------------------------------------------------ + a0d8: 0afffbdc beq 9050 <aaf1-0xfb0> + a0dc: e59f4000 ldr r4, \[pc, #0\] ; a0e4 <arm\+0xbc> + a0e0: e59f4000 ldr r4, \[pc, #0\] ; a0e8 <arm\+0xc0> +#------------------------------------------------------------------------------ +#------ .got offset for taf2 +#------------------------------------------------------------------------------ + a0e4: 00000084 \.word 0x00000084 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for taf2 +#------------------------------------------------------------------------------ + a0e8: 00006f9c \.word 0x00006f9c +#------------------------------------------------------------------------------ +#------ abf2's .plt entry +#------------------------------------------------------------------------------ + a0ec: ebfffbf1 bl 90b8 <aaf1-0xf48> +#------------------------------------------------------------------------------ +#------ abf2's .plt entry +#------------------------------------------------------------------------------ + a0f0: eafffbf0 b 90b8 <aaf1-0xf48> +#------------------------------------------------------------------------------ +#------ abf2's .plt entry +#------------------------------------------------------------------------------ + a0f4: 0afffbef beq 90b8 <aaf1-0xf48> + a0f8: e59f4000 ldr r4, \[pc, #0\] ; a100 <arm\+0xd8> + a0fc: e59f4000 ldr r4, \[pc, #0\] ; a104 <arm\+0xdc> +#------------------------------------------------------------------------------ +#------ .got offset for abf2 +#------------------------------------------------------------------------------ + a100: 000000a0 \.word 0x000000a0 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for abf2 +#------------------------------------------------------------------------------ + a104: 00006f9c \.word 0x00006f9c +#------------------------------------------------------------------------------ +#------ tbf2's .plt entry +#------------------------------------------------------------------------------ + a108: ebfffbcd bl 9044 <aaf1-0xfbc> +#------------------------------------------------------------------------------ +#------ tbf2's .plt entry +#------------------------------------------------------------------------------ + a10c: eafffbcc b 9044 <aaf1-0xfbc> +#------------------------------------------------------------------------------ +#------ tbf2's .plt entry +#------------------------------------------------------------------------------ + a110: 0afffbcb beq 9044 <aaf1-0xfbc> + a114: e59f4000 ldr r4, \[pc, #0\] ; a11c <arm\+0xf4> + a118: e59f4000 ldr r4, \[pc, #0\] ; a120 <arm\+0xf8> +#------------------------------------------------------------------------------ +#------ .got offset for tbf2 +#------------------------------------------------------------------------------ + a11c: 00000080 \.word 0x00000080 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for tbf2 +#------------------------------------------------------------------------------ + a120: 00006f60 \.word 0x00006f60 +#------------------------------------------------------------------------------ +#------ aaf3's .iplt entry +#------------------------------------------------------------------------------ + a124: ebfffc0f bl 9168 <aaf1-0xe98> +#------------------------------------------------------------------------------ +#------ aaf3's .iplt entry +#------------------------------------------------------------------------------ + a128: eafffc0e b 9168 <aaf1-0xe98> +#------------------------------------------------------------------------------ +#------ aaf3's .iplt entry +#------------------------------------------------------------------------------ + a12c: 0afffc0d beq 9168 <aaf1-0xe98> + a130: e59f4000 ldr r4, \[pc, #0\] ; a138 <arm\+0x110> + a134: e59f4000 ldr r4, \[pc, #0\] ; a13c <arm\+0x114> +#------------------------------------------------------------------------------ +#------ GP-relative offset of aaf3's .igot.plt entry +#------------------------------------------------------------------------------ + a138: 00000068 \.word 0x00000068 +#------------------------------------------------------------------------------ +#------ PC-relative offset of aaf3's .igot.plt entry +#------------------------------------------------------------------------------ + a13c: 00006f2c \.word 0x00006f2c +#------------------------------------------------------------------------------ +#------ taf3's .iplt entry +#------------------------------------------------------------------------------ + a140: ebfffc05 bl 915c <aaf1-0xea4> +#------------------------------------------------------------------------------ +#------ taf3's .iplt entry +#------------------------------------------------------------------------------ + a144: eafffc04 b 915c <aaf1-0xea4> +#------------------------------------------------------------------------------ +#------ taf3's .iplt entry +#------------------------------------------------------------------------------ + a148: 0afffc03 beq 915c <aaf1-0xea4> + a14c: e59f4000 ldr r4, \[pc, #0\] ; a154 <arm\+0x12c> + a150: e59f4000 ldr r4, \[pc, #0\] ; a158 <arm\+0x130> +#------------------------------------------------------------------------------ +#------ GP-relative offset of taf3's .igot.plt entry +#------------------------------------------------------------------------------ + a154: 00000064 \.word 0x00000064 +#------------------------------------------------------------------------------ +#------ PC-relative offset of taf3's .igot.plt entry +#------------------------------------------------------------------------------ + a158: 00006f0c \.word 0x00006f0c +#------------------------------------------------------------------------------ +#------ abf3's .iplt entry +#------------------------------------------------------------------------------ + a15c: ebfffbf3 bl 9130 <aaf1-0xed0> +#------------------------------------------------------------------------------ +#------ abf3's .iplt entry +#------------------------------------------------------------------------------ + a160: eafffbf2 b 9130 <aaf1-0xed0> +#------------------------------------------------------------------------------ +#------ abf3's .iplt entry +#------------------------------------------------------------------------------ + a164: 0afffbf1 beq 9130 <aaf1-0xed0> + a168: e59f4000 ldr r4, \[pc, #0\] ; a170 <arm\+0x148> + a16c: e59f4000 ldr r4, \[pc, #0\] ; a174 <arm\+0x14c> +#------------------------------------------------------------------------------ +#------ GP-relative offset of abf3's .igot.plt entry +#------------------------------------------------------------------------------ + a170: 00000058 \.word 0x00000058 +#------------------------------------------------------------------------------ +#------ PC-relative offset of abf3's .igot.plt entry +#------------------------------------------------------------------------------ + a174: 00006ee4 \.word 0x00006ee4 +#------------------------------------------------------------------------------ +#------ tbf3's .iplt entry +#------------------------------------------------------------------------------ + a178: ebfffbf4 bl 9150 <aaf1-0xeb0> +#------------------------------------------------------------------------------ +#------ tbf3's .iplt entry +#------------------------------------------------------------------------------ + a17c: eafffbf3 b 9150 <aaf1-0xeb0> +#------------------------------------------------------------------------------ +#------ tbf3's .iplt entry +#------------------------------------------------------------------------------ + a180: 0afffbf2 beq 9150 <aaf1-0xeb0> + a184: e59f4000 ldr r4, \[pc, #0\] ; a18c <arm\+0x164> + a188: e59f4000 ldr r4, \[pc, #0\] ; a190 <arm\+0x168> +#------------------------------------------------------------------------------ +#------ GP-relative offset of tbf3's .igot.plt entry +#------------------------------------------------------------------------------ + a18c: 00000060 \.word 0x00000060 +#------------------------------------------------------------------------------ +#------ PC-relative offset of tbf3's .igot.plt entry +#------------------------------------------------------------------------------ + a190: 00006ed0 \.word 0x00006ed0 +#------------------------------------------------------------------------------ +#------ aaf4's .plt entry +#------------------------------------------------------------------------------ + a194: ebfffba2 bl 9024 <aaf1-0xfdc> +#------------------------------------------------------------------------------ +#------ aaf4's .plt entry +#------------------------------------------------------------------------------ + a198: eafffba1 b 9024 <aaf1-0xfdc> +#------------------------------------------------------------------------------ +#------ aaf4's .plt entry +#------------------------------------------------------------------------------ + a19c: 0afffba0 beq 9024 <aaf1-0xfdc> + a1a0: e59f4000 ldr r4, \[pc, #0\] ; a1a8 <arm\+0x180> + a1a4: e59f4000 ldr r4, \[pc, #0\] ; a1ac <arm\+0x184> +#------------------------------------------------------------------------------ +#------ .got offset for aaf4 +#------------------------------------------------------------------------------ + a1a8: 00000078 \.word 0x00000078 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for aaf4 +#------------------------------------------------------------------------------ + a1ac: 00006ecc \.word 0x00006ecc +#------------------------------------------------------------------------------ +#------ taf4's .plt entry +#------------------------------------------------------------------------------ + a1b0: ebfffbbc bl 90a8 <aaf1-0xf58> +#------------------------------------------------------------------------------ +#------ taf4's .plt entry +#------------------------------------------------------------------------------ + a1b4: eafffbbb b 90a8 <aaf1-0xf58> +#------------------------------------------------------------------------------ +#------ taf4's .plt entry +#------------------------------------------------------------------------------ + a1b8: 0afffbba beq 90a8 <aaf1-0xf58> + a1bc: e59f4000 ldr r4, \[pc, #0\] ; a1c4 <arm\+0x19c> + a1c0: e59f4000 ldr r4, \[pc, #0\] ; a1c8 <arm\+0x1a0> +#------------------------------------------------------------------------------ +#------ .got offset for taf4 +#------------------------------------------------------------------------------ + a1c4: 0000009c \.word 0x0000009c +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for taf4 +#------------------------------------------------------------------------------ + a1c8: 00006ed4 \.word 0x00006ed4 +#------------------------------------------------------------------------------ +#------ abf4's .plt entry +#------------------------------------------------------------------------------ + a1cc: ebfffba6 bl 906c <aaf1-0xf94> +#------------------------------------------------------------------------------ +#------ abf4's .plt entry +#------------------------------------------------------------------------------ + a1d0: eafffba5 b 906c <aaf1-0xf94> +#------------------------------------------------------------------------------ +#------ abf4's .plt entry +#------------------------------------------------------------------------------ + a1d4: 0afffba4 beq 906c <aaf1-0xf94> + a1d8: e59f4000 ldr r4, \[pc, #0\] ; a1e0 <arm\+0x1b8> + a1dc: e59f4000 ldr r4, \[pc, #0\] ; a1e4 <arm\+0x1bc> +#------------------------------------------------------------------------------ +#------ .got offset for abf4 +#------------------------------------------------------------------------------ + a1e0: 0000008c \.word 0x0000008c +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for abf4 +#------------------------------------------------------------------------------ + a1e4: 00006ea8 \.word 0x00006ea8 +#------------------------------------------------------------------------------ +#------ tbf4's .plt entry +#------------------------------------------------------------------------------ + a1e8: ebfffba3 bl 907c <aaf1-0xf84> +#------------------------------------------------------------------------------ +#------ tbf4's .plt entry +#------------------------------------------------------------------------------ + a1ec: eafffba2 b 907c <aaf1-0xf84> +#------------------------------------------------------------------------------ +#------ tbf4's .plt entry +#------------------------------------------------------------------------------ + a1f0: 0afffba1 beq 907c <aaf1-0xf84> + a1f4: e59f4000 ldr r4, \[pc, #0\] ; a1fc <arm\+0x1d4> + a1f8: e59f4000 ldr r4, \[pc, #0\] ; a200 <arm\+0x1d8> +#------------------------------------------------------------------------------ +#------ .got offset for tbf4 +#------------------------------------------------------------------------------ + a1fc: 00000090 \.word 0x00000090 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for tbf4 +#------------------------------------------------------------------------------ + a200: 00006e90 \.word 0x00006e90 + +0000a204 <_thumb>: + a204: f005 fefc bl 10000 <foo> + a208: f005 befa b\.w 10000 <foo> + a20c: f005 86f8 beq\.w 10000 <foo> + a210: 4c00 ldr r4, \[pc, #0\] ; \(a214 <_thumb\+0x10>\) + a212: 4c01 ldr r4, \[pc, #4\] ; \(a218 <_thumb\+0x14>\) +#------------------------------------------------------------------------------ +#------ .got offset for foo +#------------------------------------------------------------------------------ + a214: 00000070 \.word 0x00000070 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for foo +#------------------------------------------------------------------------------ + a218: 00006e54 \.word 0x00006e54 +#------------------------------------------------------------------------------ +#------ atf1's .iplt entry +#------------------------------------------------------------------------------ + a21c: f7fe ef5a blx 90d4 <aaf1-0xf2c> +#------------------------------------------------------------------------------ +#------ thumb entry to atf1's .iplt entry +#------------------------------------------------------------------------------ + a220: f7fe bf56 b\.w 90d0 <aaf1-0xf30> +#------------------------------------------------------------------------------ +#------ thumb entry to atf1's .iplt entry +#------------------------------------------------------------------------------ + a224: f43e af54 beq\.w 90d0 <aaf1-0xf30> + a228: 4c00 ldr r4, \[pc, #0\] ; \(a22c <_thumb\+0x28>\) + a22a: 4c01 ldr r4, \[pc, #4\] ; \(a230 <_thumb\+0x2c>\) +#------------------------------------------------------------------------------ +#------ GP-relative offset of atf1's .igot.plt entry +#------------------------------------------------------------------------------ + a22c: 00000040 \.word 0x00000040 +#------------------------------------------------------------------------------ +#------ PC-relative offset of atf1's .igot.plt entry +#------------------------------------------------------------------------------ + a230: 00006e10 \.word 0x00006e10 +#------------------------------------------------------------------------------ +#------ ttf1's .iplt entry +#------------------------------------------------------------------------------ + a234: f7fe ef64 blx 9100 <aaf1-0xf00> +#------------------------------------------------------------------------------ +#------ thumb entry to ttf1's .iplt entry +#------------------------------------------------------------------------------ + a238: f7fe bf60 b\.w 90fc <aaf1-0xf04> +#------------------------------------------------------------------------------ +#------ thumb entry to ttf1's .iplt entry +#------------------------------------------------------------------------------ + a23c: f43e af5e beq\.w 90fc <aaf1-0xf04> + a240: 4c00 ldr r4, \[pc, #0\] ; \(a244 <_thumb\+0x40>\) + a242: 4c01 ldr r4, \[pc, #4\] ; \(a248 <_thumb\+0x44>\) +#------------------------------------------------------------------------------ +#------ GP-relative offset of ttf1's .igot.plt entry +#------------------------------------------------------------------------------ + a244: 0000004c \.word 0x0000004c +#------------------------------------------------------------------------------ +#------ PC-relative offset of ttf1's .igot.plt entry +#------------------------------------------------------------------------------ + a248: 00006e04 \.word 0x00006e04 +#------------------------------------------------------------------------------ +#------ abf1's .iplt entry +#------------------------------------------------------------------------------ + a24c: f7fe ef4a blx 90e4 <aaf1-0xf1c> +#------------------------------------------------------------------------------ +#------ thumb entry to abf1's .iplt entry +#------------------------------------------------------------------------------ + a250: f7fe bf46 b\.w 90e0 <aaf1-0xf20> +#------------------------------------------------------------------------------ +#------ thumb entry to abf1's .iplt entry +#------------------------------------------------------------------------------ + a254: f43e af44 beq\.w 90e0 <aaf1-0xf20> + a258: 4c00 ldr r4, \[pc, #0\] ; \(a25c <_thumb\+0x58>\) + a25a: 4c01 ldr r4, \[pc, #4\] ; \(a260 <_thumb\+0x5c>\) +#------------------------------------------------------------------------------ +#------ GP-relative offset of abf1's .igot.plt entry +#------------------------------------------------------------------------------ + a25c: 00000044 \.word 0x00000044 +#------------------------------------------------------------------------------ +#------ PC-relative offset of abf1's .igot.plt entry +#------------------------------------------------------------------------------ + a260: 00006de4 \.word 0x00006de4 +#------------------------------------------------------------------------------ +#------ tbf1's .iplt entry +#------------------------------------------------------------------------------ + a264: f7fe ef54 blx 9110 <aaf1-0xef0> +#------------------------------------------------------------------------------ +#------ thumb entry to tbf1's .iplt entry +#------------------------------------------------------------------------------ + a268: f7fe bf50 b\.w 910c <aaf1-0xef4> +#------------------------------------------------------------------------------ +#------ thumb entry to tbf1's .iplt entry +#------------------------------------------------------------------------------ + a26c: f43e af4e beq\.w 910c <aaf1-0xef4> + a270: 4c00 ldr r4, \[pc, #0\] ; \(a274 <_thumb\+0x70>\) + a272: 4c01 ldr r4, \[pc, #4\] ; \(a278 <_thumb\+0x74>\) +#------------------------------------------------------------------------------ +#------ GP-relative offset of tbf1's .igot.plt entry +#------------------------------------------------------------------------------ + a274: 00000050 \.word 0x00000050 +#------------------------------------------------------------------------------ +#------ PC-relative offset of tbf1's .igot.plt entry +#------------------------------------------------------------------------------ + a278: 00006dd8 \.word 0x00006dd8 +#------------------------------------------------------------------------------ +#------ atf2's .plt entry +#------------------------------------------------------------------------------ + a27c: f7fe eecc blx 9018 <aaf1-0xfe8> +#------------------------------------------------------------------------------ +#------ thumb entry to atf2's .plt entry +#------------------------------------------------------------------------------ + a280: f7fe bec8 b\.w 9014 <aaf1-0xfec> +#------------------------------------------------------------------------------ +#------ thumb entry to atf2's .plt entry +#------------------------------------------------------------------------------ + a284: f43e aec6 beq\.w 9014 <aaf1-0xfec> + a288: 4c00 ldr r4, \[pc, #0\] ; \(a28c <_thumb\+0x88>\) + a28a: 4c01 ldr r4, \[pc, #4\] ; \(a290 <_thumb\+0x8c>\) +#------------------------------------------------------------------------------ +#------ .got offset for atf2 +#------------------------------------------------------------------------------ + a28c: 00000074 \.word 0x00000074 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for atf2 +#------------------------------------------------------------------------------ + a290: 00006de4 \.word 0x00006de4 +#------------------------------------------------------------------------------ +#------ ttf2's .plt entry +#------------------------------------------------------------------------------ + a294: f7fe eece blx 9034 <aaf1-0xfcc> +#------------------------------------------------------------------------------ +#------ thumb entry to ttf2's .plt entry +#------------------------------------------------------------------------------ + a298: f7fe beca b\.w 9030 <aaf1-0xfd0> +#------------------------------------------------------------------------------ +#------ thumb entry to ttf2's .plt entry +#------------------------------------------------------------------------------ + a29c: f43e aec8 beq\.w 9030 <aaf1-0xfd0> + a2a0: 4c00 ldr r4, \[pc, #0\] ; \(a2a4 <_thumb\+0xa0>\) + a2a2: 4c01 ldr r4, \[pc, #4\] ; \(a2a8 <_thumb\+0xa4>\) +#------------------------------------------------------------------------------ +#------ .got offset for ttf2 +#------------------------------------------------------------------------------ + a2a4: 0000007c \.word 0x0000007c +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for ttf2 +#------------------------------------------------------------------------------ + a2a8: 00006dd4 \.word 0x00006dd4 +#------------------------------------------------------------------------------ +#------ abf2's .plt entry +#------------------------------------------------------------------------------ + a2ac: f7fe ef04 blx 90b8 <aaf1-0xf48> +#------------------------------------------------------------------------------ +#------ thumb entry to abf2's .plt entry +#------------------------------------------------------------------------------ + a2b0: f7fe bf00 b\.w 90b4 <aaf1-0xf4c> +#------------------------------------------------------------------------------ +#------ thumb entry to abf2's .plt entry +#------------------------------------------------------------------------------ + a2b4: f43e aefe beq\.w 90b4 <aaf1-0xf4c> + a2b8: 4c00 ldr r4, \[pc, #0\] ; \(a2bc <_thumb\+0xb8>\) + a2ba: 4c01 ldr r4, \[pc, #4\] ; \(a2c0 <_thumb\+0xbc>\) +#------------------------------------------------------------------------------ +#------ .got offset for abf2 +#------------------------------------------------------------------------------ + a2bc: 000000a0 \.word 0x000000a0 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for abf2 +#------------------------------------------------------------------------------ + a2c0: 00006de0 \.word 0x00006de0 +#------------------------------------------------------------------------------ +#------ tbf2's .plt entry +#------------------------------------------------------------------------------ + a2c4: f7fe eebe blx 9044 <aaf1-0xfbc> +#------------------------------------------------------------------------------ +#------ thumb entry to tbf2's .plt entry +#------------------------------------------------------------------------------ + a2c8: f7fe beba b\.w 9040 <aaf1-0xfc0> +#------------------------------------------------------------------------------ +#------ thumb entry to tbf2's .plt entry +#------------------------------------------------------------------------------ + a2cc: f43e aeb8 beq\.w 9040 <aaf1-0xfc0> + a2d0: 4c00 ldr r4, \[pc, #0\] ; \(a2d4 <_thumb\+0xd0>\) + a2d2: 4c01 ldr r4, \[pc, #4\] ; \(a2d8 <_thumb\+0xd4>\) +#------------------------------------------------------------------------------ +#------ .got offset for tbf2 +#------------------------------------------------------------------------------ + a2d4: 00000080 \.word 0x00000080 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for tbf2 +#------------------------------------------------------------------------------ + a2d8: 00006da8 \.word 0x00006da8 +#------------------------------------------------------------------------------ +#------ atf3's .iplt entry +#------------------------------------------------------------------------------ + a2dc: f7fe ef20 blx 9120 <aaf1-0xee0> +#------------------------------------------------------------------------------ +#------ thumb entry to atf3's .iplt entry +#------------------------------------------------------------------------------ + a2e0: f7fe bf1c b\.w 911c <aaf1-0xee4> +#------------------------------------------------------------------------------ +#------ thumb entry to atf3's .iplt entry +#------------------------------------------------------------------------------ + a2e4: f43e af1a beq\.w 911c <aaf1-0xee4> + a2e8: 4c00 ldr r4, \[pc, #0\] ; \(a2ec <_thumb\+0xe8>\) + a2ea: 4c01 ldr r4, \[pc, #4\] ; \(a2f0 <_thumb\+0xec>\) +#------------------------------------------------------------------------------ +#------ GP-relative offset of atf3's .igot.plt entry +#------------------------------------------------------------------------------ + a2ec: 00000054 \.word 0x00000054 +#------------------------------------------------------------------------------ +#------ PC-relative offset of atf3's .igot.plt entry +#------------------------------------------------------------------------------ + a2f0: 00006d64 \.word 0x00006d64 +#------------------------------------------------------------------------------ +#------ ttf3's .iplt entry +#------------------------------------------------------------------------------ + a2f4: f7fe ef24 blx 9140 <aaf1-0xec0> +#------------------------------------------------------------------------------ +#------ thumb entry to ttf3's .iplt entry +#------------------------------------------------------------------------------ + a2f8: f7fe bf20 b\.w 913c <aaf1-0xec4> +#------------------------------------------------------------------------------ +#------ thumb entry to ttf3's .iplt entry +#------------------------------------------------------------------------------ + a2fc: f43e af1e beq\.w 913c <aaf1-0xec4> + a300: 4c00 ldr r4, \[pc, #0\] ; \(a304 <_thumb\+0x100>\) + a302: 4c01 ldr r4, \[pc, #4\] ; \(a308 <_thumb\+0x104>\) +#------------------------------------------------------------------------------ +#------ GP-relative offset of ttf3's .igot.plt entry +#------------------------------------------------------------------------------ + a304: 0000005c \.word 0x0000005c +#------------------------------------------------------------------------------ +#------ PC-relative offset of ttf3's .igot.plt entry +#------------------------------------------------------------------------------ + a308: 00006d54 \.word 0x00006d54 +#------------------------------------------------------------------------------ +#------ abf3's .iplt entry +#------------------------------------------------------------------------------ + a30c: f7fe ef10 blx 9130 <aaf1-0xed0> +#------------------------------------------------------------------------------ +#------ thumb entry to abf3's .iplt entry +#------------------------------------------------------------------------------ + a310: f7fe bf0c b\.w 912c <aaf1-0xed4> +#------------------------------------------------------------------------------ +#------ thumb entry to abf3's .iplt entry +#------------------------------------------------------------------------------ + a314: f43e af0a beq\.w 912c <aaf1-0xed4> + a318: 4c00 ldr r4, \[pc, #0\] ; \(a31c <_thumb\+0x118>\) + a31a: 4c01 ldr r4, \[pc, #4\] ; \(a320 <_thumb\+0x11c>\) +#------------------------------------------------------------------------------ +#------ GP-relative offset of abf3's .igot.plt entry +#------------------------------------------------------------------------------ + a31c: 00000058 \.word 0x00000058 +#------------------------------------------------------------------------------ +#------ PC-relative offset of abf3's .igot.plt entry +#------------------------------------------------------------------------------ + a320: 00006d38 \.word 0x00006d38 +#------------------------------------------------------------------------------ +#------ tbf3's .iplt entry +#------------------------------------------------------------------------------ + a324: f7fe ef14 blx 9150 <aaf1-0xeb0> +#------------------------------------------------------------------------------ +#------ thumb entry to tbf3's .iplt entry +#------------------------------------------------------------------------------ + a328: f7fe bf10 b\.w 914c <aaf1-0xeb4> +#------------------------------------------------------------------------------ +#------ thumb entry to tbf3's .iplt entry +#------------------------------------------------------------------------------ + a32c: f43e af0e beq\.w 914c <aaf1-0xeb4> + a330: 4c00 ldr r4, \[pc, #0\] ; \(a334 <_thumb\+0x130>\) + a332: 4c01 ldr r4, \[pc, #4\] ; \(a338 <_thumb\+0x134>\) +#------------------------------------------------------------------------------ +#------ GP-relative offset of tbf3's .igot.plt entry +#------------------------------------------------------------------------------ + a334: 00000060 \.word 0x00000060 +#------------------------------------------------------------------------------ +#------ PC-relative offset of tbf3's .igot.plt entry +#------------------------------------------------------------------------------ + a338: 00006d28 \.word 0x00006d28 +#------------------------------------------------------------------------------ +#------ atf4's .plt entry +#------------------------------------------------------------------------------ + a33c: f7fe eeae blx 909c <aaf1-0xf64> +#------------------------------------------------------------------------------ +#------ thumb entry to atf4's .plt entry +#------------------------------------------------------------------------------ + a340: f7fe beaa b\.w 9098 <aaf1-0xf68> +#------------------------------------------------------------------------------ +#------ thumb entry to atf4's .plt entry +#------------------------------------------------------------------------------ + a344: f43e aea8 beq\.w 9098 <aaf1-0xf68> + a348: 4c00 ldr r4, \[pc, #0\] ; \(a34c <_thumb\+0x148>\) + a34a: 4c01 ldr r4, \[pc, #4\] ; \(a350 <_thumb\+0x14c>\) +#------------------------------------------------------------------------------ +#------ .got offset for atf4 +#------------------------------------------------------------------------------ + a34c: 00000098 \.word 0x00000098 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for atf4 +#------------------------------------------------------------------------------ + a350: 00006d48 \.word 0x00006d48 +#------------------------------------------------------------------------------ +#------ ttf4's .plt entry +#------------------------------------------------------------------------------ + a354: f7fe ee9a blx 908c <aaf1-0xf74> +#------------------------------------------------------------------------------ +#------ thumb entry to ttf4's .plt entry +#------------------------------------------------------------------------------ + a358: f7fe be96 b\.w 9088 <aaf1-0xf78> +#------------------------------------------------------------------------------ +#------ thumb entry to ttf4's .plt entry +#------------------------------------------------------------------------------ + a35c: f43e ae94 beq\.w 9088 <aaf1-0xf78> + a360: 4c00 ldr r4, \[pc, #0\] ; \(a364 <_thumb\+0x160>\) + a362: 4c01 ldr r4, \[pc, #4\] ; \(a368 <_thumb\+0x164>\) +#------------------------------------------------------------------------------ +#------ .got offset for ttf4 +#------------------------------------------------------------------------------ + a364: 00000094 \.word 0x00000094 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for ttf4 +#------------------------------------------------------------------------------ + a368: 00006d2c \.word 0x00006d2c +#------------------------------------------------------------------------------ +#------ abf4's .plt entry +#------------------------------------------------------------------------------ + a36c: f7fe ee7e blx 906c <aaf1-0xf94> +#------------------------------------------------------------------------------ +#------ thumb entry to abf4's .plt entry +#------------------------------------------------------------------------------ + a370: f7fe be7a b\.w 9068 <aaf1-0xf98> +#------------------------------------------------------------------------------ +#------ thumb entry to abf4's .plt entry +#------------------------------------------------------------------------------ + a374: f43e ae78 beq\.w 9068 <aaf1-0xf98> + a378: 4c00 ldr r4, \[pc, #0\] ; \(a37c <_thumb\+0x178>\) + a37a: 4c01 ldr r4, \[pc, #4\] ; \(a380 <_thumb\+0x17c>\) +#------------------------------------------------------------------------------ +#------ .got offset for abf4 +#------------------------------------------------------------------------------ + a37c: 0000008c \.word 0x0000008c +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for abf4 +#------------------------------------------------------------------------------ + a380: 00006d0c \.word 0x00006d0c +#------------------------------------------------------------------------------ +#------ tbf4's .plt entry +#------------------------------------------------------------------------------ + a384: f7fe ee7a blx 907c <aaf1-0xf84> +#------------------------------------------------------------------------------ +#------ thumb entry to tbf4's .plt entry +#------------------------------------------------------------------------------ + a388: f7fe be76 b\.w 9078 <aaf1-0xf88> +#------------------------------------------------------------------------------ +#------ thumb entry to tbf4's .plt entry +#------------------------------------------------------------------------------ + a38c: f43e ae74 beq\.w 9078 <aaf1-0xf88> + a390: 4c00 ldr r4, \[pc, #0\] ; \(a394 <_thumb\+0x190>\) + a392: 4c01 ldr r4, \[pc, #4\] ; \(a398 <_thumb\+0x194>\) +#------------------------------------------------------------------------------ +#------ .got offset for tbf4 +#------------------------------------------------------------------------------ + a394: 00000090 \.word 0x00000090 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for tbf4 +#------------------------------------------------------------------------------ + a398: 00006cf8 \.word 0x00006cf8 diff --git a/ld/testsuite/ld-arm/ifunc-8.gd b/ld/testsuite/ld-arm/ifunc-8.gd new file mode 100644 index 0000000..7efefa0 --- /dev/null +++ b/ld/testsuite/ld-arm/ifunc-8.gd @@ -0,0 +1,167 @@ + +.* + +Contents of section \.data: +#------------------------------------------------------------------------------ +#------ 00010000: foo +#------ 00010004: contains aaf1 [R_ARM_IRELATIVE] +#------ 00010008: contains PC-relative offset of aaf1's .iplt entry +#------ 0001000c: contains atf1 [R_ARM_IRELATIVE] +#------------------------------------------------------------------------------ + 10000 44332211 00a00000 bc90ffff 04a00000 .* +#------------------------------------------------------------------------------ +#------ 00010010: contains PC-relative offset of atf1's .iplt entry +#------ 00010014: contains abf1 [R_ARM_IRELATIVE] +#------ 00010018: contains PC-relative offset of abf1's .iplt entry +#------ 0001001c: contains taf1 [R_ARM_IRELATIVE] +#------------------------------------------------------------------------------ + 10010 c490ffff 08a00000 cc90ffff 0da00000 .* +#------------------------------------------------------------------------------ +#------ 00010020: contains PC-relative offset of taf1's .iplt entry +#------ 00010024: contains ttf1 [R_ARM_IRELATIVE] +#------ 00010028: contains PC-relative offset of ttf1's .iplt entry +#------ 0001002c: contains tbf1 [R_ARM_IRELATIVE] +#------------------------------------------------------------------------------ + 10020 d090ffff 0fa00000 d890ffff 11a00000 .* +#------------------------------------------------------------------------------ +#------ 00010030: contains PC-relative offset of tbf1's .iplt entry +#------ 00010034: aaf2 [R_ARM_ABS32] +#------ 00010038: aaf2 [R_ARM_REL32] +#------ 0001003c: atf2 [R_ARM_ABS32] +#------------------------------------------------------------------------------ + 10030 e090ffff 00000000 00000000 00000000 .* +#------------------------------------------------------------------------------ +#------ 00010040: atf2 [R_ARM_REL32] +#------ 00010044: abf2 [R_ARM_ABS32] +#------ 00010048: abf2 [R_ARM_REL32] +#------ 0001004c: taf2 [R_ARM_ABS32] +#------------------------------------------------------------------------------ + 10040 00000000 00000000 00000000 00000000 .* +#------------------------------------------------------------------------------ +#------ 00010050: taf2 [R_ARM_REL32] +#------ 00010054: ttf2 [R_ARM_ABS32] +#------ 00010058: ttf2 [R_ARM_REL32] +#------ 0001005c: tbf2 [R_ARM_ABS32] +#------------------------------------------------------------------------------ + 10050 00000000 00000000 00000000 00000000 .* +#------------------------------------------------------------------------------ +#------ 00010060: tbf2 [R_ARM_REL32] +#------ 00010064: contains aaf3 [R_ARM_IRELATIVE] +#------ 00010068: contains PC-relative offset of aaf3's .iplt entry +#------ 0001006c: contains atf3 [R_ARM_IRELATIVE] +#------------------------------------------------------------------------------ + 10060 00000000 14a00000 0091ffff 18a00000 .* +#------------------------------------------------------------------------------ +#------ 00010070: contains PC-relative offset of atf3's .iplt entry +#------ 00010074: contains abf3 [R_ARM_IRELATIVE] +#------ 00010078: contains PC-relative offset of abf3's .iplt entry +#------ 0001007c: contains taf3 [R_ARM_IRELATIVE] +#------------------------------------------------------------------------------ + 10070 b090ffff 1ca00000 b890ffff 21a00000 .* +#------------------------------------------------------------------------------ +#------ 00010080: contains PC-relative offset of taf3's .iplt entry +#------ 00010084: contains ttf3 [R_ARM_IRELATIVE] +#------ 00010088: contains PC-relative offset of ttf3's .iplt entry +#------ 0001008c: contains tbf3 [R_ARM_IRELATIVE] +#------------------------------------------------------------------------------ + 10080 dc90ffff 23a00000 b890ffff 25a00000 .* +#------------------------------------------------------------------------------ +#------ 00010090: contains PC-relative offset of tbf3's .iplt entry +#------ 00010094: aaf4 [R_ARM_ABS32] +#------ 00010098: aaf4 [R_ARM_REL32] +#------ 0001009c: atf4 [R_ARM_ABS32] +#------------------------------------------------------------------------------ + 10090 c090ffff 00000000 00000000 00000000 .* +#------------------------------------------------------------------------------ +#------ 000100a0: atf4 [R_ARM_REL32] +#------ 000100a4: abf4 [R_ARM_ABS32] +#------ 000100a8: abf4 [R_ARM_REL32] +#------ 000100ac: taf4 [R_ARM_ABS32] +#------------------------------------------------------------------------------ + 100a0 00000000 00000000 00000000 00000000 .* +#------------------------------------------------------------------------------ +#------ 000100b0: taf4 [R_ARM_REL32] +#------ 000100b4: ttf4 [R_ARM_ABS32] +#------ 000100b8: ttf4 [R_ARM_REL32] +#------ 000100bc: tbf4 [R_ARM_ABS32] +#------------------------------------------------------------------------------ + 100b0 00000000 00000000 00000000 00000000 .* +#------------------------------------------------------------------------------ +#------ 000100c0: tbf4 [R_ARM_REL32] +#------------------------------------------------------------------------------ + 100c0 00000000 .* +Contents of section \.got: +#------------------------------------------------------------------------------ +#------ 00011000: .got.plt +#------ 00011004: reserved .got.plt entry +#------ 00011008: reserved .got.plt entry +#------ 0001100c: atf2's .got.plt entry [R_ARM_JUMP_SLOT] +#------------------------------------------------------------------------------ + 11000 00200100 00000000 00000000 00900000 .* +#------------------------------------------------------------------------------ +#------ 00011010: aaf4's .got.plt entry [R_ARM_JUMP_SLOT] +#------ 00011014: ttf2's .got.plt entry [R_ARM_JUMP_SLOT] +#------ 00011018: tbf2's .got.plt entry [R_ARM_JUMP_SLOT] +#------ 0001101c: taf2's .got.plt entry [R_ARM_JUMP_SLOT] +#------------------------------------------------------------------------------ + 11010 00900000 00900000 00900000 00900000 .* +#------------------------------------------------------------------------------ +#------ 00011020: aaf2's .got.plt entry [R_ARM_JUMP_SLOT] +#------ 00011024: abf4's .got.plt entry [R_ARM_JUMP_SLOT] +#------ 00011028: tbf4's .got.plt entry [R_ARM_JUMP_SLOT] +#------ 0001102c: ttf4's .got.plt entry [R_ARM_JUMP_SLOT] +#------------------------------------------------------------------------------ + 11020 00900000 00900000 00900000 00900000 .* +#------------------------------------------------------------------------------ +#------ 00011030: atf4's .got.plt entry [R_ARM_JUMP_SLOT] +#------ 00011034: taf4's .got.plt entry [R_ARM_JUMP_SLOT] +#------ 00011038: abf2's .got.plt entry [R_ARM_JUMP_SLOT] +#------ 0001103c: aaf1's .igot.plt entry [R_ARM_IRELATIVE] +#------------------------------------------------------------------------------ + 11030 00900000 00900000 00900000 00a00000 .* +#------------------------------------------------------------------------------ +#------ 00011040: atf1's .igot.plt entry [R_ARM_IRELATIVE] +#------ 00011044: abf1's .igot.plt entry [R_ARM_IRELATIVE] +#------ 00011048: taf1's .igot.plt entry [R_ARM_IRELATIVE] +#------ 0001104c: ttf1's .igot.plt entry [R_ARM_IRELATIVE] +#------------------------------------------------------------------------------ + 11040 04a00000 08a00000 0da00000 0fa00000 .* +#------------------------------------------------------------------------------ +#------ 00011050: tbf1's .igot.plt entry [R_ARM_IRELATIVE] +#------ 00011054: atf3's .igot.plt entry [R_ARM_IRELATIVE] +#------ 00011058: abf3's .igot.plt entry [R_ARM_IRELATIVE] +#------ 0001105c: ttf3's .igot.plt entry [R_ARM_IRELATIVE] +#------------------------------------------------------------------------------ + 11050 11a00000 18a00000 1ca00000 23a00000 .* +#------------------------------------------------------------------------------ +#------ 00011060: tbf3's .igot.plt entry [R_ARM_IRELATIVE] +#------ 00011064: taf3's .igot.plt entry [R_ARM_IRELATIVE] +#------ 00011068: aaf3's .igot.plt entry [R_ARM_IRELATIVE] +#------ 0001106c: .got entry for foo [R_ARM_RELATIVE] +#------------------------------------------------------------------------------ + 11060 25a00000 21a00000 14a00000 00000100 .* +#------------------------------------------------------------------------------ +#------ 00011070: .got entry for foo [R_ARM_RELATIVE] +#------ 00011074: .got entry for atf2 [R_ARM_GLOB_DAT] +#------ 00011078: .got entry for aaf4 [R_ARM_GLOB_DAT] +#------ 0001107c: .got entry for ttf2 [R_ARM_GLOB_DAT] +#------------------------------------------------------------------------------ + 11070 00000100 00000000 00000000 00000000 .* +#------------------------------------------------------------------------------ +#------ 00011080: .got entry for tbf2 [R_ARM_GLOB_DAT] +#------ 00011084: .got entry for taf2 [R_ARM_GLOB_DAT] +#------ 00011088: .got entry for aaf2 [R_ARM_GLOB_DAT] +#------ 0001108c: .got entry for abf4 [R_ARM_GLOB_DAT] +#------------------------------------------------------------------------------ + 11080 00000000 00000000 00000000 00000000 .* +#------------------------------------------------------------------------------ +#------ 00011090: .got entry for tbf4 [R_ARM_GLOB_DAT] +#------ 00011094: .got entry for ttf4 [R_ARM_GLOB_DAT] +#------ 00011098: .got entry for atf4 [R_ARM_GLOB_DAT] +#------ 0001109c: .got entry for taf4 [R_ARM_GLOB_DAT] +#------------------------------------------------------------------------------ + 11090 00000000 00000000 00000000 00000000 .* +#------------------------------------------------------------------------------ +#------ 000110a0: .got entry for abf2 [R_ARM_GLOB_DAT] +#------------------------------------------------------------------------------ + 110a0 00000000 .* diff --git a/ld/testsuite/ld-arm/ifunc-8.rd b/ld/testsuite/ld-arm/ifunc-8.rd new file mode 100644 index 0000000..a8ad1f2 --- /dev/null +++ b/ld/testsuite/ld-arm/ifunc-8.rd @@ -0,0 +1,80 @@ + +Relocation section '\.rel\.dyn' at offset 0x8000 contains 62 entries: + Offset Info Type Sym\.Value Sym\. Name +0001106c ......17 R_ARM_RELATIVE +00011070 ......17 R_ARM_RELATIVE +00010004 ......a0 R_ARM_IRELATIVE +0001000c ......a0 R_ARM_IRELATIVE +00010014 ......a0 R_ARM_IRELATIVE +0001001c ......a0 R_ARM_IRELATIVE +00010024 ......a0 R_ARM_IRELATIVE +0001002c ......a0 R_ARM_IRELATIVE +00010064 ......a0 R_ARM_IRELATIVE +0001006c ......a0 R_ARM_IRELATIVE +00010074 ......a0 R_ARM_IRELATIVE +0001007c ......a0 R_ARM_IRELATIVE +00010084 ......a0 R_ARM_IRELATIVE +0001008c ......a0 R_ARM_IRELATIVE +0001103c ......a0 R_ARM_IRELATIVE +00011040 ......a0 R_ARM_IRELATIVE +00011044 ......a0 R_ARM_IRELATIVE +00011048 ......a0 R_ARM_IRELATIVE +0001104c ......a0 R_ARM_IRELATIVE +00011050 ......a0 R_ARM_IRELATIVE +00011054 ......a0 R_ARM_IRELATIVE +00011058 ......a0 R_ARM_IRELATIVE +0001105c ......a0 R_ARM_IRELATIVE +00011060 ......a0 R_ARM_IRELATIVE +00011064 ......a0 R_ARM_IRELATIVE +00011068 ......a0 R_ARM_IRELATIVE +00010034 ......02 R_ARM_ABS32 00000000 aaf2 +00010038 ......03 R_ARM_REL32 00000000 aaf2 +00011088 ......15 R_ARM_GLOB_DAT 00000000 aaf2 +0001003c ......02 R_ARM_ABS32 00000000 atf2 +00010040 ......03 R_ARM_REL32 00000000 atf2 +00011074 ......15 R_ARM_GLOB_DAT 00000000 atf2 +00010044 ......02 R_ARM_ABS32 00000000 abf2 +00010048 ......03 R_ARM_REL32 00000000 abf2 +000110a0 ......15 R_ARM_GLOB_DAT 00000000 abf2 +0001004c ......02 R_ARM_ABS32 00000000 taf2 +00010050 ......03 R_ARM_REL32 00000000 taf2 +00011084 ......15 R_ARM_GLOB_DAT 00000000 taf2 +00010054 ......02 R_ARM_ABS32 00000000 ttf2 +00010058 ......03 R_ARM_REL32 00000000 ttf2 +0001107c ......15 R_ARM_GLOB_DAT 00000000 ttf2 +0001005c ......02 R_ARM_ABS32 00000000 tbf2 +00010060 ......03 R_ARM_REL32 00000000 tbf2 +00011080 ......15 R_ARM_GLOB_DAT 00000000 tbf2 +00010094 ......02 R_ARM_ABS32 00000000 aaf4 +00010098 ......03 R_ARM_REL32 00000000 aaf4 +00011078 ......15 R_ARM_GLOB_DAT 00000000 aaf4 +0001009c ......02 R_ARM_ABS32 00000000 atf4 +000100a0 ......03 R_ARM_REL32 00000000 atf4 +00011098 ......15 R_ARM_GLOB_DAT 00000000 atf4 +000100a4 ......02 R_ARM_ABS32 00000000 abf4 +000100a8 ......03 R_ARM_REL32 00000000 abf4 +0001108c ......15 R_ARM_GLOB_DAT 00000000 abf4 +000100ac ......02 R_ARM_ABS32 00000000 taf4 +000100b0 ......03 R_ARM_REL32 00000000 taf4 +0001109c ......15 R_ARM_GLOB_DAT 00000000 taf4 +000100b4 ......02 R_ARM_ABS32 00000000 ttf4 +000100b8 ......03 R_ARM_REL32 00000000 ttf4 +00011094 ......15 R_ARM_GLOB_DAT 00000000 ttf4 +000100bc ......02 R_ARM_ABS32 00000000 tbf4 +000100c0 ......03 R_ARM_REL32 00000000 tbf4 +00011090 ......15 R_ARM_GLOB_DAT 00000000 tbf4 + +Relocation section '\.rel\.plt' at offset 0x81f0 contains 12 entries: + Offset Info Type Sym\.Value Sym\. Name +0001100c ......16 R_ARM_JUMP_SLOT 00000000 atf2 +00011010 ......16 R_ARM_JUMP_SLOT 00000000 aaf4 +00011014 ......16 R_ARM_JUMP_SLOT 00000000 ttf2 +00011018 ......16 R_ARM_JUMP_SLOT 00000000 tbf2 +0001101c ......16 R_ARM_JUMP_SLOT 00000000 taf2 +00011020 ......16 R_ARM_JUMP_SLOT 00000000 aaf2 +00011024 ......16 R_ARM_JUMP_SLOT 00000000 abf4 +00011028 ......16 R_ARM_JUMP_SLOT 00000000 tbf4 +0001102c ......16 R_ARM_JUMP_SLOT 00000000 ttf4 +00011030 ......16 R_ARM_JUMP_SLOT 00000000 atf4 +00011034 ......16 R_ARM_JUMP_SLOT 00000000 taf4 +00011038 ......16 R_ARM_JUMP_SLOT 00000000 abf2 diff --git a/ld/testsuite/ld-arm/ifunc-8.s b/ld/testsuite/ld-arm/ifunc-8.s new file mode 100644 index 0000000..3947f7f --- /dev/null +++ b/ld/testsuite/ld-arm/ifunc-8.s @@ -0,0 +1,88 @@ + .syntax unified + .arch armv6t2 + + .macro define,name,type + .type \name,%gnu_indirect_function + \type +\name: + mov pc,lr + .size \name,.-\name + .endm + + .macro define2,name + define aa\name,.arm + define at\name,.arm + define ab\name,.arm + define ta\name,.thumb_func + define tt\name,.thumb_func + define tb\name,.thumb_func + .endm + + .macro test_relocs,name,width + bl \name(PLT) + b\width \name + beq\width \name + ldr r4,1f + ldr r4,2f +1: + .word \name(GOT) +2: + .word \name(GOT_PREL) + .endm + + .macro test_relocs2,name,type,width + test_relocs a\type\name,\width + test_relocs t\type\name,\width + test_relocs ab\name,\width + test_relocs tb\name,\width + .endm + + .macro diff,name + .word \name + .word \name-. + .endm + + .macro alldirs,doit,name + \doit aa\name + \doit at\name + \doit ab\name + \doit ta\name + \doit tt\name + \doit tb\name + .endm + + define2 f1 + define2 f3 + + alldirs .globl,f3 + alldirs .hidden,f3 + + .globl arm + .type arm,%function + .arm +arm: + test_relocs foo + test_relocs2 f1,a, + test_relocs2 f2,a, + test_relocs2 f3,a, + test_relocs2 f4,a, + .size arm,.-arm + + .globl _thumb + .type _thumb,%function + .thumb_func +_thumb: + test_relocs foo + test_relocs2 f1,t,.w + test_relocs2 f2,t,.w + test_relocs2 f3,t,.w + test_relocs2 f4,t,.w + .size _thumb,.-_thumb + + .data +foo: + .word 0x11223344 + alldirs diff,f1 + alldirs diff,f2 + alldirs diff,f3 + alldirs diff,f4 diff --git a/ld/testsuite/ld-arm/ifunc-9.dd b/ld/testsuite/ld-arm/ifunc-9.dd new file mode 100644 index 0000000..be8f3d0 --- /dev/null +++ b/ld/testsuite/ld-arm/ifunc-9.dd @@ -0,0 +1,154 @@ + +.* + + +Disassembly of section \.plt: + +00009000 <\.plt>: + 9000: e52de004 push {lr} ; \(str lr, \[sp, #-4\]!\) + 9004: e59fe004 ldr lr, \[pc, #4\] ; 9010 <f3-0x1c> + 9008: e08fe00e add lr, pc, lr + 900c: e5bef008 ldr pc, \[lr, #8\]! +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got.plt +#------------------------------------------------------------------------------ + 9010: 00007ff0 \.word 0x00007ff0 +#------------------------------------------------------------------------------ +#------ f2's .plt entry +#------------------------------------------------------------------------------ + 9014: e28fc600 add ip, pc, #0 + 9018: e28cca07 add ip, ip, #28672 ; 0x7000 + 901c: e5bcfff0 ldr pc, \[ip, #4080\]! ; 0xff0 + +Disassembly of section \.iplt: + +00009020 <f3-0xc>: +#------------------------------------------------------------------------------ +#------ f1's .iplt entry +#------------------------------------------------------------------------------ + 9020: e28fc600 add ip, pc, #0 + 9024: e28cca07 add ip, ip, #28672 ; 0x7000 + 9028: e5bcffe8 ldr pc, \[ip, #4072\]! ; 0xfe8 + +0000902c <f3>: + 902c: e28fc600 add ip, pc, #0 + 9030: e28cca07 add ip, ip, #28672 ; 0x7000 + 9034: e5bcffe0 ldr pc, \[ip, #4064\]! ; 0xfe0 + +Disassembly of section \.text: + +0000a000 <f1>: + a000: e1a0f00e mov pc, lr + a004: e1a0f00e mov pc, lr + +0000a008 <_start>: + a008: eb0017fc bl 10000 <foo> + a00c: e59f400c ldr r4, \[pc, #12\] ; a020 <_start\+0x18> + a010: e59f400c ldr r4, \[pc, #12\] ; a024 <_start\+0x1c> + a014: e59f400c ldr r4, \[pc, #12\] ; a028 <_start\+0x20> + a018: e59f400c ldr r4, \[pc, #12\] ; a02c <_start\+0x24> + a01c: e59f500c ldr r5, \[pc, #12\] ; a030 <_start\+0x28> +#------------------------------------------------------------------------------ +#------ foo +#------------------------------------------------------------------------------ + a020: 00010000 \.word 0x00010000 +#------------------------------------------------------------------------------ +#------ PC-relative offset of foo +#------------------------------------------------------------------------------ + a024: 00005fdc \.word 0x00005fdc +#------------------------------------------------------------------------------ +#------ GP-relative offset of foo +#------------------------------------------------------------------------------ + a028: fffff000 \.word 0xfffff000 +#------------------------------------------------------------------------------ +#------ .got offset for foo +#------------------------------------------------------------------------------ + a02c: 00000020 \.word 0x00000020 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for foo +#------------------------------------------------------------------------------ + a030: 00006fe8 \.word 0x00006fe8 +#------------------------------------------------------------------------------ +#------ f1's .iplt entry +#------------------------------------------------------------------------------ + a034: ebfffbf9 bl 9020 <f3-0xc> + a038: e59f400c ldr r4, \[pc, #12\] ; a04c <_start\+0x44> + a03c: e59f400c ldr r4, \[pc, #12\] ; a050 <_start\+0x48> + a040: e59f400c ldr r4, \[pc, #12\] ; a054 <_start\+0x4c> + a044: e59f400c ldr r4, \[pc, #12\] ; a058 <_start\+0x50> + a048: e59f500c ldr r5, \[pc, #12\] ; a05c <_start\+0x54> +#------------------------------------------------------------------------------ +#------ f1's .iplt entry +#------------------------------------------------------------------------------ + a04c: 00009020 \.word 0x00009020 +#------------------------------------------------------------------------------ +#------ PC-relative offset of f1's .iplt entry +#------------------------------------------------------------------------------ + a050: ffffefd0 \.word 0xffffefd0 +#------------------------------------------------------------------------------ +#------ GP-relative offset of f1's .iplt entry +#------------------------------------------------------------------------------ + a054: ffff8020 \.word 0xffff8020 +#------------------------------------------------------------------------------ +#------ .got offset for f1's .iplt entry +#------------------------------------------------------------------------------ + a058: 0000001c \.word 0x0000001c +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for f1's .iplt entry +#------------------------------------------------------------------------------ + a05c: 00006fc0 \.word 0x00006fc0 +#------------------------------------------------------------------------------ +#------ f2's .plt entry +#------------------------------------------------------------------------------ + a060: ebfffbeb bl 9014 <f3-0x18> + a064: e59f400c ldr r4, \[pc, #12\] ; a078 <_start\+0x70> + a068: e59f400c ldr r4, \[pc, #12\] ; a07c <_start\+0x74> + a06c: e59f400c ldr r4, \[pc, #12\] ; a080 <_start\+0x78> + a070: e59f400c ldr r4, \[pc, #12\] ; a084 <_start\+0x7c> + a074: e59f500c ldr r5, \[pc, #12\] ; a088 <_start\+0x80> +#------------------------------------------------------------------------------ +#------ f2's .plt entry +#------------------------------------------------------------------------------ + a078: 00009014 \.word 0x00009014 +#------------------------------------------------------------------------------ +#------ PC-relative offset of f2's .plt entry +#------------------------------------------------------------------------------ + a07c: ffffef98 \.word 0xffffef98 +#------------------------------------------------------------------------------ +#------ GP-relative offset of f2's .plt entry +#------------------------------------------------------------------------------ + a080: ffff8014 \.word 0xffff8014 +#------------------------------------------------------------------------------ +#------ .got offset for f2 +#------------------------------------------------------------------------------ + a084: 00000028 \.word 0x00000028 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for f2 +#------------------------------------------------------------------------------ + a088: 00006fa0 \.word 0x00006fa0 + a08c: ebfffbe6 bl 902c <f3> + a090: e59f400c ldr r4, \[pc, #12\] ; a0a4 <_start\+0x9c> + a094: e59f400c ldr r4, \[pc, #12\] ; a0a8 <_start\+0xa0> + a098: e59f400c ldr r4, \[pc, #12\] ; a0ac <_start\+0xa4> + a09c: e59f400c ldr r4, \[pc, #12\] ; a0b0 <_start\+0xa8> + a0a0: e59f500c ldr r5, \[pc, #12\] ; a0b4 <_start\+0xac> +#------------------------------------------------------------------------------ +#------ f3 +#------------------------------------------------------------------------------ + a0a4: 0000902c \.word 0x0000902c +#------------------------------------------------------------------------------ +#------ PC-relative offset of f3 +#------------------------------------------------------------------------------ + a0a8: ffffef84 \.word 0xffffef84 +#------------------------------------------------------------------------------ +#------ GP-relative offset of f3 +#------------------------------------------------------------------------------ + a0ac: ffff802c \.word 0xffff802c +#------------------------------------------------------------------------------ +#------ .got offset for f3 +#------------------------------------------------------------------------------ + a0b0: 00000024 \.word 0x00000024 +#------------------------------------------------------------------------------ +#------ PC-relative offset of .got entry for f3 +#------------------------------------------------------------------------------ + a0b4: 00006f70 \.word 0x00006f70 diff --git a/ld/testsuite/ld-arm/ifunc-9.gd b/ld/testsuite/ld-arm/ifunc-9.gd new file mode 100644 index 0000000..6f220d1 --- /dev/null +++ b/ld/testsuite/ld-arm/ifunc-9.gd @@ -0,0 +1,29 @@ + +.* + +Contents of section \.data: +#------------------------------------------------------------------------------ +#------ 00010000: foo +#------------------------------------------------------------------------------ + 10000 44332211 .* +Contents of section \.got: +#------------------------------------------------------------------------------ +#------ 00011000: .got.plt +#------ 00011004: reserved .got.plt entry +#------ 00011008: reserved .got.plt entry +#------ 0001100c: f2's .got.plt entry [R_ARM_JUMP_SLOT] +#------------------------------------------------------------------------------ + 11000 00200100 00000000 00000000 00900000 .* +#------------------------------------------------------------------------------ +#------ 00011010: f1's .igot.plt entry [R_ARM_IRELATIVE] +#------ 00011014: f3's .igot.plt pointer to 0xa004 [R_ARM_IRELATIVE] +#------ 00011018: .got entry for foo +#------ 0001101c: .got entry for f1's .iplt entry +#------------------------------------------------------------------------------ + 11010 00a00000 04a00000 00000100 20900000 .* +#------------------------------------------------------------------------------ +#------ 00011020: .got entry for foo +#------ 00011024: .got entry for f3 +#------ 00011028: .got entry for f2 [R_ARM_GLOB_DAT] +#------------------------------------------------------------------------------ + 11020 00000100 2c900000 00000000 .* diff --git a/ld/testsuite/ld-arm/ifunc-9.rd b/ld/testsuite/ld-arm/ifunc-9.rd new file mode 100644 index 0000000..689f663 --- /dev/null +++ b/ld/testsuite/ld-arm/ifunc-9.rd @@ -0,0 +1,10 @@ + +Relocation section '\.rel\.dyn' at offset 0x8000 contains 3 entries: + Offset Info Type Sym\.Value Sym\. Name +00011010 ......a0 R_ARM_IRELATIVE +00011014 ......a0 R_ARM_IRELATIVE +00011028 ......15 R_ARM_GLOB_DAT 00009014 f2 + +Relocation section '\.rel\.plt' at offset 0x8018 contains 1 entries: + Offset Info Type Sym\.Value Sym\. Name +0001100c ......16 R_ARM_JUMP_SLOT 00009014 f2 diff --git a/ld/testsuite/ld-arm/ifunc-9.s b/ld/testsuite/ld-arm/ifunc-9.s new file mode 100644 index 0000000..25b682f --- /dev/null +++ b/ld/testsuite/ld-arm/ifunc-9.s @@ -0,0 +1,44 @@ + .macro define,name + .type \name,%gnu_indirect_function +\name: + mov pc,lr + .size \name,.-\name + .endm + + .macro test_relocs,name + bl \name + ldr r4,1f + ldr r4,2f + ldr r4,3f + ldr r4,4f + ldr r5,5f +1: + .word \name +2: + .word \name-. +3: + .word \name(GOTOFF) +4: + .word \name(GOT) +5: + .word \name(GOT_PREL) + .endm + + .global f3 + .hidden f3 + + define f1 + # f2 provided by ifunc-3.so + define f3 + + .globl _start +_start: + test_relocs foo + test_relocs f1 + test_relocs f2 + test_relocs f3 + .size _start,.-_start + + .data +foo: + .word 0x11223344 diff --git a/ld/testsuite/ld-arm/ifunc-dynamic.ld b/ld/testsuite/ld-arm/ifunc-dynamic.ld new file mode 100644 index 0000000..1e030d8 --- /dev/null +++ b/ld/testsuite/ld-arm/ifunc-dynamic.ld @@ -0,0 +1,33 @@ +OUTPUT_ARCH(arm) +ENTRY(_start) +SECTIONS +{ + . = 0x07000; + .hash : { *(.hash) } + .gnu.hash : { *(.gnu.hash) } + .dynsym : { *(.dynsym) } + .dynstr : { *(.dynstr) } + . = 0x08000; + .rel.dyn : { + *(.rel.dyn) + *(.rel.data) + *(.rel.got) + PROVIDE_HIDDEN (__irel_start = .); + *(.rel.iplt) + PROVIDE_HIDDEN (__irel_end = .); + } + .rel.plt : { *(.rel.plt) } + . = 0x09000; + .plt : { *(.plt) } + .iplt : { *(.iplt) } + . = 0x0A000; + .text : { *(.text) } + . = 0x10000; + .data : { *(.data) } + . = 0x11000; + .got : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) } + . = 0x12000; + .dynamic : { *(.dynamic) } + . = 0x13000; + .bss : { *(.bss) } +} diff --git a/ld/testsuite/ld-arm/ifunc-static.ld b/ld/testsuite/ld-arm/ifunc-static.ld new file mode 100644 index 0000000..80cf6a2 --- /dev/null +++ b/ld/testsuite/ld-arm/ifunc-static.ld @@ -0,0 +1,21 @@ +OUTPUT_ARCH(arm) +ENTRY(_start) +SECTIONS +{ + . = 0x08000; + .rel.dyn : { + PROVIDE_HIDDEN (__irel_start = .); + *(.rel.iplt) + PROVIDE_HIDDEN (__irel_end = .); + } + . = 0x09000; + .iplt : { *(.iplt) } + . = 0x0A000; + .text : { *(.text) } + . = 0x10000; + .data : { *(.data) } + . = 0x11000; + .got : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) } + . = 0x12000; + .bss : { *(.bss) } +} |