From: Tamar Christina Date: Tue, 20 Aug 2019 15:34:26 +0000 (+0100) Subject: Arm: Fix performance issue with thumb-2 tailcalls X-Git-Tag: binutils-2_33~162 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=b4e87f2c1eee99dee805e3828514f8afa162f9ba;p=thirdparty%2Fbinutils-gdb.git Arm: Fix performance issue with thumb-2 tailcalls We currently use a padding NOP after a Thumb to Arm interworking veneer (BX pc). The NOP is never executed but may result in a performance penalty on some cores. For this reason this patch changes the NOPs after Thumb to Arm veneers into B .-2 and adds a note to this in the source code for future reference. bfd/ChangeLog: * elf32-arm.c (elf32_thumb2_plt_entry, elf32_arm_plt_thumb_stub, elf32_arm_stub_long_branch_v4t_thumb_thumb, elf32_arm_stub_long_branch_v4t_thumb_arm, elf32_arm_stub_short_branch_v4t_thumb_arm, elf32_arm_stub_long_branch_v4t_thumb_arm_pic, elf32_arm_stub_long_branch_v4t_thumb_thumb_pic, elf32_arm_stub_long_branch_v4t_thumb_tls_pic): Change nop to branch to previous instruction. ld/ChangeLog: * testsuite/ld-arm/cortex-a8-fix-b-plt.d: Update Testcase. * testsuite/ld-arm/cortex-a8-fix-b-rel-arm.d: Likewise. * testsuite/ld-arm/cortex-a8-fix-bcc-plt.d: Likewise. * testsuite/ld-arm/farcall-cond-thumb-arm.d: Likewise. * testsuite/ld-arm/farcall-mixed-app.d: Likewise. * testsuite/ld-arm/farcall-mixed-app2.d: Likewise. * testsuite/ld-arm/farcall-mixed-lib-v4t.d: Likewise. * testsuite/ld-arm/farcall-thumb-arm-pic-veneer.d: Likewise. * testsuite/ld-arm/farcall-thumb-arm-short.d: Likewise. * testsuite/ld-arm/farcall-thumb-arm.d: Likewise. * testsuite/ld-arm/farcall-thumb-thumb-pic-veneer.d: Likewise. * testsuite/ld-arm/farcall-thumb-thumb.d: Likewise. * testsuite/ld-arm/fix-arm1176-on.d: Likewise. * testsuite/ld-arm/ifunc-10.dd: Likewise. * testsuite/ld-arm/ifunc-2.dd: Likewise. * testsuite/ld-arm/ifunc-4.dd: Likewise. * testsuite/ld-arm/ifunc-6.dd: Likewise. * testsuite/ld-arm/ifunc-8.dd: Likewise. * testsuite/ld-arm/jump-reloc-veneers-long.d: Likewise. * testsuite/ld-arm/mixed-app.d: Likewise. * testsuite/ld-arm/thumb2-b-interwork.d: Likewise. * testsuite/ld-arm/tls-longplt.d: Likewise. * testsuite/ld-arm/tls-thumb1.d: Likewise. --- diff --git a/bfd/ChangeLog b/bfd/ChangeLog index bfaec7b5d80..e566656e613 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,14 @@ +2019-08-20 Tamar Christina + + * elf32-arm.c (elf32_thumb2_plt_entry, elf32_arm_plt_thumb_stub, + elf32_arm_stub_long_branch_v4t_thumb_thumb, + elf32_arm_stub_long_branch_v4t_thumb_arm, + elf32_arm_stub_short_branch_v4t_thumb_arm, + elf32_arm_stub_long_branch_v4t_thumb_arm_pic, + elf32_arm_stub_long_branch_v4t_thumb_thumb_pic, + elf32_arm_stub_long_branch_v4t_thumb_tls_pic): Change nop to branch to + previous instruction. + 2019-08-19 Tom Tromey * dwarf2.c (_bfd_dwarf2_find_symbol_bias): Create hash table diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c index f1895df2788..d1548d6db33 100644 --- a/bfd/elf32-arm.c +++ b/bfd/elf32-arm.c @@ -2329,6 +2329,11 @@ static const unsigned long dl_tlsdesc_lazy_trampoline [] = 0x00000018, /* 4: .word _GLOBAL_OFFSET_TABLE_ - 2b - 8 */ }; +/* NOTE: [Thumb nop sequence] + When adding code that transitions from Thumb to Arm the instruction that + should be used for the alignment padding should be 0xe7fd (b .-2) instead of + a nop for performance reasons. */ + /* ARM FDPIC PLT entry. */ /* The last 5 words contain PLT lazy fragment code and data. */ static const bfd_vma elf32_arm_fdpic_plt_entry [] = @@ -2446,8 +2451,8 @@ static const bfd_vma elf32_thumb2_plt_entry [] = 0x0c00f240, /* movw ip, #0xNNNN */ 0x0c00f2c0, /* movt ip, #0xNNNN */ 0xf8dc44fc, /* add ip, pc */ - 0xbf00f000 /* ldr.w pc, [ip] */ - /* nop */ + 0xe7fdf000 /* ldr.w pc, [ip] */ + /* b .-2 */ }; /* The format of the first entry in the procedure linkage table @@ -2487,7 +2492,7 @@ static const bfd_vma elf32_arm_vxworks_shared_plt_entry[] = static const bfd_vma elf32_arm_plt_thumb_stub [] = { 0x4778, /* bx pc */ - 0x46c0 /* nop */ + 0xe7fd /* b .-2 */ }; /* The entries in a PLT when using a DLL-based target with multiple @@ -2574,6 +2579,8 @@ typedef struct int reloc_addend; } insn_sequence; +/* See note [Thumb nop sequence] when adding a veneer. */ + /* Arm/Thumb -> Arm/Thumb long branch stub. On V5T and above, use blx to reach the stub if necessary. */ static const insn_sequence elf32_arm_stub_long_branch_any_any[] = @@ -2624,7 +2631,7 @@ static const insn_sequence elf32_arm_stub_long_branch_thumb2_only_pure[] = static const insn_sequence elf32_arm_stub_long_branch_v4t_thumb_thumb[] = { THUMB16_INSN (0x4778), /* bx pc */ - THUMB16_INSN (0x46c0), /* nop */ + THUMB16_INSN (0xe7fd), /* b .-2 */ ARM_INSN (0xe59fc000), /* ldr ip, [pc, #0] */ ARM_INSN (0xe12fff1c), /* bx ip */ DATA_WORD (0, R_ARM_ABS32, 0), /* dcd R_ARM_ABS32(X) */ @@ -2635,7 +2642,7 @@ static const insn_sequence elf32_arm_stub_long_branch_v4t_thumb_thumb[] = static const insn_sequence elf32_arm_stub_long_branch_v4t_thumb_arm[] = { THUMB16_INSN (0x4778), /* bx pc */ - THUMB16_INSN (0x46c0), /* nop */ + THUMB16_INSN (0xe7fd), /* b .-2 */ ARM_INSN (0xe51ff004), /* ldr pc, [pc, #-4] */ DATA_WORD (0, R_ARM_ABS32, 0), /* dcd R_ARM_ABS32(X) */ }; @@ -2645,7 +2652,7 @@ static const insn_sequence elf32_arm_stub_long_branch_v4t_thumb_arm[] = static const insn_sequence elf32_arm_stub_short_branch_v4t_thumb_arm[] = { THUMB16_INSN (0x4778), /* bx pc */ - THUMB16_INSN (0x46c0), /* nop */ + THUMB16_INSN (0xe7fd), /* b .-2 */ ARM_REL_INSN (0xea000000, -8), /* b (X-8) */ }; @@ -2683,7 +2690,7 @@ static const insn_sequence elf32_arm_stub_long_branch_v4t_arm_thumb_pic[] = static const insn_sequence elf32_arm_stub_long_branch_v4t_thumb_arm_pic[] = { THUMB16_INSN (0x4778), /* bx pc */ - THUMB16_INSN (0x46c0), /* nop */ + THUMB16_INSN (0xe7fd), /* b .-2 */ ARM_INSN (0xe59fc000), /* ldr ip, [pc, #0] */ ARM_INSN (0xe08cf00f), /* add pc, ip, pc */ DATA_WORD (0, R_ARM_REL32, -4), /* dcd R_ARM_REL32(X) */ @@ -2707,7 +2714,7 @@ static const insn_sequence elf32_arm_stub_long_branch_thumb_only_pic[] = static const insn_sequence elf32_arm_stub_long_branch_v4t_thumb_thumb_pic[] = { THUMB16_INSN (0x4778), /* bx pc */ - THUMB16_INSN (0x46c0), /* nop */ + THUMB16_INSN (0xe7fd), /* b .-2 */ ARM_INSN (0xe59fc004), /* ldr ip, [pc, #4] */ ARM_INSN (0xe08fc00c), /* add ip, pc, ip */ ARM_INSN (0xe12fff1c), /* bx ip */ @@ -2728,7 +2735,7 @@ static const insn_sequence elf32_arm_stub_long_branch_any_tls_pic[] = static const insn_sequence elf32_arm_stub_long_branch_v4t_thumb_tls_pic[] = { THUMB16_INSN (0x4778), /* bx pc */ - THUMB16_INSN (0x46c0), /* nop */ + THUMB16_INSN (0xe7fd), /* b .-2 */ ARM_INSN (0xe59f1000), /* ldr r1, [pc, #0] */ ARM_INSN (0xe081f00f), /* add pc, r1, pc */ DATA_WORD (0, R_ARM_REL32, -4), /* dcd R_ARM_REL32(X) */ diff --git a/ld/ChangeLog b/ld/ChangeLog index 4837aac2203..4f71ce81bd3 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,29 @@ +2019-08-20 Tamar Christina + + * testsuite/ld-arm/cortex-a8-fix-b-plt.d: Update Testcase. + * testsuite/ld-arm/cortex-a8-fix-b-rel-arm.d: Likewise. + * testsuite/ld-arm/cortex-a8-fix-bcc-plt.d: Likewise. + * testsuite/ld-arm/farcall-cond-thumb-arm.d: Likewise. + * testsuite/ld-arm/farcall-mixed-app.d: Likewise. + * testsuite/ld-arm/farcall-mixed-app2.d: Likewise. + * testsuite/ld-arm/farcall-mixed-lib-v4t.d: Likewise. + * testsuite/ld-arm/farcall-thumb-arm-pic-veneer.d: Likewise. + * testsuite/ld-arm/farcall-thumb-arm-short.d: Likewise. + * testsuite/ld-arm/farcall-thumb-arm.d: Likewise. + * testsuite/ld-arm/farcall-thumb-thumb-pic-veneer.d: Likewise. + * testsuite/ld-arm/farcall-thumb-thumb.d: Likewise. + * testsuite/ld-arm/fix-arm1176-on.d: Likewise. + * testsuite/ld-arm/ifunc-10.dd: Likewise. + * testsuite/ld-arm/ifunc-2.dd: Likewise. + * testsuite/ld-arm/ifunc-4.dd: Likewise. + * testsuite/ld-arm/ifunc-6.dd: Likewise. + * testsuite/ld-arm/ifunc-8.dd: Likewise. + * testsuite/ld-arm/jump-reloc-veneers-long.d: Likewise. + * testsuite/ld-arm/mixed-app.d: Likewise. + * testsuite/ld-arm/thumb2-b-interwork.d: Likewise. + * testsuite/ld-arm/tls-longplt.d: Likewise. + * testsuite/ld-arm/tls-thumb1.d: Likewise. + 2019-08-16 H.J. Lu PR ld/24905 diff --git a/ld/testsuite/ld-arm/cortex-a8-fix-b-plt.d b/ld/testsuite/ld-arm/cortex-a8-fix-b-plt.d index bbf68398d6c..54f56e4ccbc 100644 --- a/ld/testsuite/ld-arm/cortex-a8-fix-b-plt.d +++ b/ld/testsuite/ld-arm/cortex-a8-fix-b-plt.d @@ -12,7 +12,7 @@ Disassembly of section \.plt: 8010: 00000ffc \.word 0x00000ffc 00008014 : 8014: 4778 bx pc - 8016: 46c0 nop ; \(mov r8, r8\) + 8016: e7fd b.n .+ <.+> 8018: e28fc600 add ip, pc, #0, 12 801c: e28cca00 add ip, ip, #0, 20 8020: e5bcfff8 ldr pc, \[ip, #4088\]! ; 0xff8 diff --git a/ld/testsuite/ld-arm/cortex-a8-fix-b-rel-arm.d b/ld/testsuite/ld-arm/cortex-a8-fix-b-rel-arm.d index 3e52a495563..afa1e4897a3 100644 --- a/ld/testsuite/ld-arm/cortex-a8-fix-b-rel-arm.d +++ b/ld/testsuite/ld-arm/cortex-a8-fix-b-rel-arm.d @@ -79,5 +79,5 @@ Disassembly of section \.text: 00009010 <__targetfn_from_thumb>: 9010: 4778 bx pc - 9012: 46c0 nop ; \(mov r8, r8\) + 9012: e7fd b.n .+ <.+> 9014: eaffffb9 b 8f00 diff --git a/ld/testsuite/ld-arm/cortex-a8-fix-bcc-plt.d b/ld/testsuite/ld-arm/cortex-a8-fix-bcc-plt.d index 079c928ea04..425c10207f6 100644 --- a/ld/testsuite/ld-arm/cortex-a8-fix-bcc-plt.d +++ b/ld/testsuite/ld-arm/cortex-a8-fix-bcc-plt.d @@ -12,7 +12,7 @@ Disassembly of section \.plt: 8010: 00001004 \.word 0x00001004 00008014 : 8014: 4778 bx pc - 8016: 46c0 nop ; \(mov r8, r8\) + 8016: e7fd b.n .+ <.+> 8018: e28fc600 add ip, pc, #0, 12 801c: e28cca01 add ip, ip, #4096 ; 0x1000 8020: e5bcf000 ldr pc, \[ip, #0\]! diff --git a/ld/testsuite/ld-arm/farcall-cond-thumb-arm.d b/ld/testsuite/ld-arm/farcall-cond-thumb-arm.d index 0b0172b75ef..c0d96523f45 100644 --- a/ld/testsuite/ld-arm/farcall-cond-thumb-arm.d +++ b/ld/testsuite/ld-arm/farcall-cond-thumb-arm.d @@ -9,7 +9,7 @@ Disassembly of section .text: 00058008 <__bar_from_thumb>: 58008: 4778 bx pc - 5800a: 46c0 nop ; \(mov r8, r8\) + 5800a: e7fd b.n .+ <.+> 5800c: ea02fffb b 118000 Disassembly of section .foo: diff --git a/ld/testsuite/ld-arm/farcall-mixed-app.d b/ld/testsuite/ld-arm/farcall-mixed-app.d index f3be54f1342..0160f46d3a4 100644 --- a/ld/testsuite/ld-arm/farcall-mixed-app.d +++ b/ld/testsuite/ld-arm/farcall-mixed-app.d @@ -14,7 +14,7 @@ Disassembly of section .plt: .*: .* .* : .*: 4778 bx pc - .*: 46c0 nop ; \(mov r8, r8\) + .*: e7fd b.n .+ <.+> .*: e28fc6.* add ip, pc, #.* .*: e28cca.* add ip, ip, #.* ; 0x.* .*: e5bcf.* ldr pc, \[ip, #.*\]!.* @@ -82,7 +82,7 @@ Disassembly of section .far_thumb: .* <__lib_func2_from_thumb>: .*: 4778 bx pc - .*: 46c0 nop ; \(mov r8, r8\) + .*: e7fd b.n .+ <.+> .*: e51ff004 ldr pc, \[pc, #-4\] ; 2200018 <__lib_func2_from_thumb\+0x8> .*: 000081e0 .word 0x000081e0 .*: 00000000 .word 0x00000000 diff --git a/ld/testsuite/ld-arm/farcall-mixed-app2.d b/ld/testsuite/ld-arm/farcall-mixed-app2.d index 535710d0bdd..0c701485152 100644 --- a/ld/testsuite/ld-arm/farcall-mixed-app2.d +++ b/ld/testsuite/ld-arm/farcall-mixed-app2.d @@ -14,7 +14,7 @@ Disassembly of section .plt: .*: .* .* : .*: 4778 bx pc - .*: 46c0 nop ; \(mov r8, r8\) + .*: e7fd b.n .+ <.+> .*: e28fc6.* add ip, pc, #.* .*: e28cca.* add ip, ip, #.* ; 0x.* .*: e5bcf.* ldr pc, \[ip, #.*\]!.* @@ -56,7 +56,7 @@ Disassembly of section .mid_thumb: .* <__lib_func2_from_thumb>: .*: 4778 bx pc - .*: 46c0 nop ; \(mov r8, r8\) + .*: e7fd b.n .+ <.+> .*: e51ff004 ldr pc, \[pc, #-4\] ; 10081e8 <__lib_func2_from_thumb\+0x8> .*: 000081e0 .word 0x000081e0 .*: 00000000 .word 0x00000000 diff --git a/ld/testsuite/ld-arm/farcall-mixed-lib-v4t.d b/ld/testsuite/ld-arm/farcall-mixed-lib-v4t.d index 3d12e0ae644..1b15879b253 100644 --- a/ld/testsuite/ld-arm/farcall-mixed-lib-v4t.d +++ b/ld/testsuite/ld-arm/farcall-mixed-lib-v4t.d @@ -13,25 +13,25 @@ Disassembly of section .plt: .*: .* .word .* .* : .*: 4778 bx pc - .*: 46c0 nop ; \(mov r8, r8\) + .*: e7fd b.n .+ <.+> .*: e28fc6.* add ip, pc, #.* .*: e28cca.* add ip, ip, #.* ; 0x.* .*: e5bcf.* ldr pc, \[ip, #.*\]! ; .* .* : .*: 4778 bx pc - .*: 46c0 nop ; \(mov r8, r8\) + .*: e7fd b.n .+ <.+> .*: e28fc6.* add ip, pc, #.* .*: e28cca.* add ip, ip, #.* ; 0x.* .*: e5bcf.* ldr pc, \[ip, #.*\]! ; 0x.* .* : .*: 4778 bx pc - .*: 46c0 nop ; \(mov r8, r8\) + .*: e7fd b.n .+ <.+> .*: e28fc6.* add ip, pc, #.* .*: e28cca.* add ip, ip, #.* ; 0x.* .*: e5bcf.* ldr pc, \[ip, #.*\]! ; 0x.* .* : .*: 4778 bx pc - .*: 46c0 nop ; \(mov r8, r8\) + .*: e7fd b.n .+ <.+> .*: e28fc6.* add ip, pc, #.* .*: e28cca.* add ip, ip, #.* ; 0x.* .*: e5bcf.* ldr pc, \[ip, #.*\]! ; 0x.* @@ -59,28 +59,28 @@ Disassembly of section .text: .* <__app_func_from_thumb>: .*: 4778 bx pc - .*: 46c0 nop ; \(mov r8, r8\) + .*: e7fd b.n .+ <.+> .*: e59fc000 ldr ip, \[pc\] ; .* <__app_func_from_thumb\+0xc> .*: e08cf00f add pc, ip, pc .*: feffff.. .word 0xfeffff.. .* <__lib_func4_from_thumb>: .*: 4778 bx pc - .*: 46c0 nop ; \(mov r8, r8\) + .*: e7fd b.n .+ <.+> .*: e59fc000 ldr ip, \[pc\] ; .* <__lib_func4_from_thumb\+0xc> .*: e08cf00f add pc, ip, pc .*: feffff.. .word 0xfeffff.. .* <__app_func_weak_from_thumb>: .*: 4778 bx pc - .*: 46c0 nop ; \(mov r8, r8\) + .*: e7fd b.n .+ <.+> .*: e59fc000 ldr ip, \[pc\] ; .* <__app_func_weak_from_thumb\+0xc> .*: e08cf00f add pc, ip, pc .*: feffff.. .word 0xfeffff.. .* <__lib_func3_from_thumb>: .*: 4778 bx pc - .*: 46c0 nop ; \(mov r8, r8\) + .*: e7fd b.n .+ <.+> .*: e59fc000 ldr ip, \[pc\] ; .* <__lib_func3_from_thumb\+0xc> .*: e08cf00f add pc, ip, pc .*: feffff.. .word 0xfeffff.. @@ -94,14 +94,14 @@ Disassembly of section .text: .* <__app_func_weak_from_thumb>: .*: 4778 bx pc - .*: 46c0 nop ; \(mov r8, r8\) + .*: e7fd b.n .+ <.+> .*: e59fc000 ldr ip, \[pc\] ; .* <__app_func_weak_from_thumb\+0xc> .*: e08cf00f add pc, ip, pc .*: fdffff34 .word 0xfdffff34 .* <__app_func_from_thumb>: .*: 4778 bx pc - .*: 46c0 nop ; \(mov r8, r8\) + .*: e7fd b.n .+ <.+> .*: e59fc000 ldr ip, \[pc\] ; .* <__app_func_from_thumb\+0xc> .*: e08cf00f add pc, ip, pc .*: fdffff14 .word 0xfdffff14 diff --git a/ld/testsuite/ld-arm/farcall-thumb-arm-pic-veneer.d b/ld/testsuite/ld-arm/farcall-thumb-arm-pic-veneer.d index aff4df79bc4..f96d467cea2 100644 --- a/ld/testsuite/ld-arm/farcall-thumb-arm-pic-veneer.d +++ b/ld/testsuite/ld-arm/farcall-thumb-arm-pic-veneer.d @@ -9,7 +9,7 @@ Disassembly of section .text: 01f01018 <__bar_from_thumb>: 1f01018: 4778 bx pc - 1f0101a: 46c0 nop ; \(mov r8, r8\) + 1f0101a: e7fd b.n .+ <.+> 1f0101c: e59fc000 ldr ip, \[pc\] ; 1f01024 <__bar_from_thumb\+0xc> 1f01020: e08cf00f add pc, ip, pc 1f01024: 000fffec .word 0x000fffec diff --git a/ld/testsuite/ld-arm/farcall-thumb-arm-short.d b/ld/testsuite/ld-arm/farcall-thumb-arm-short.d index 4e190394336..b74f385c968 100644 --- a/ld/testsuite/ld-arm/farcall-thumb-arm-short.d +++ b/ld/testsuite/ld-arm/farcall-thumb-arm-short.d @@ -9,7 +9,7 @@ Disassembly of section .text: 00001008 <__bar_from_thumb>: 1008: 4778 bx pc - 100a: 46c0 nop ; \(mov r8, r8\) + 100a: e7fd b.n .+ <.+> 100c: ea000400 b 2014 Disassembly of section .foo: diff --git a/ld/testsuite/ld-arm/farcall-thumb-arm.d b/ld/testsuite/ld-arm/farcall-thumb-arm.d index 5dc377a0b06..d62649d838a 100644 --- a/ld/testsuite/ld-arm/farcall-thumb-arm.d +++ b/ld/testsuite/ld-arm/farcall-thumb-arm.d @@ -9,13 +9,13 @@ Disassembly of section .text: 01f01018 <__bar_from_thumb>: 1f01018: 4778 bx pc - 1f0101a: 46c0 nop ; \(mov r8, r8\) + 1f0101a: e7fd b.n .+ <.+> 1f0101c: e51ff004 ldr pc, \[pc, #-4\] ; 1f01020 <__bar_from_thumb\+0x8> 1f01020: 02001014 .word 0x02001014 01f01024 <__bar_from_thumb>: 1f01024: 4778 bx pc - 1f01026: 46c0 nop ; \(mov r8, r8\) + 1f01026: e7fd b.n .+ <.+> 1f01028: ea03fff9 b 2001014 1f0102c: 00000000 andeq r0, r0, r0 diff --git a/ld/testsuite/ld-arm/farcall-thumb-thumb-pic-veneer.d b/ld/testsuite/ld-arm/farcall-thumb-thumb-pic-veneer.d index 8b14599a530..0b7184bba2c 100644 --- a/ld/testsuite/ld-arm/farcall-thumb-thumb-pic-veneer.d +++ b/ld/testsuite/ld-arm/farcall-thumb-thumb-pic-veneer.d @@ -9,7 +9,7 @@ Disassembly of section .text: 00001008 <__bar_veneer>: 1008: 4778 bx pc - 100a: 46c0 nop ; \(mov r8, r8\) + 100a: e7fd b.n .+ <.+> 100c: e59fc004 ldr ip, \[pc, #4\] ; 1018 <__bar_veneer\+0x10> 1010: e08fc00c add ip, pc, ip 1014: e12fff1c bx ip diff --git a/ld/testsuite/ld-arm/farcall-thumb-thumb.d b/ld/testsuite/ld-arm/farcall-thumb-thumb.d index 4f4c2c9bd6f..0d9a898eff4 100644 --- a/ld/testsuite/ld-arm/farcall-thumb-thumb.d +++ b/ld/testsuite/ld-arm/farcall-thumb-thumb.d @@ -9,7 +9,7 @@ Disassembly of section .text: 00001008 <__bar_veneer>: 1008: 4778 bx pc - 100a: 46c0 nop ; \(mov r8, r8\) + 100a: e7fd b.n .+ <.+> 100c: e59fc000 ldr ip, \[pc\] ; 1014 <__bar_veneer\+0xc> 1010: e12fff1c bx ip 1014: 02001015 .word 0x02001015 diff --git a/ld/testsuite/ld-arm/fix-arm1176-on.d b/ld/testsuite/ld-arm/fix-arm1176-on.d index 834618e89c9..46510dc73d0 100644 --- a/ld/testsuite/ld-arm/fix-arm1176-on.d +++ b/ld/testsuite/ld-arm/fix-arm1176-on.d @@ -9,7 +9,7 @@ Disassembly of section .foo: [0-9a-f]+ <__func_to_branch_to_veneer>: +[0-9a-f]+: 4778 bx pc - +[0-9a-f]+: 46c0 nop ; \(mov r8, r8\) + +[0-9a-f]+: e7fd b.n .+ <.+> +[0-9a-f]+: e51ff004 ldr pc, \[pc, #-4\] ; 2001020 <__func_to_branch_to_veneer\+0x8> +[0-9a-f]+: ........ .word 0x........ +[0-9a-f]+: 00000000 .word 0x00000000 diff --git a/ld/testsuite/ld-arm/ifunc-10.dd b/ld/testsuite/ld-arm/ifunc-10.dd index 05e4be5b59b..6b9771f6c06 100644 --- a/ld/testsuite/ld-arm/ifunc-10.dd +++ b/ld/testsuite/ld-arm/ifunc-10.dd @@ -18,7 +18,7 @@ Disassembly of section \.plt: #------------------------------------------------------------------------------ 00009014 : 9014: 4778 bx pc - 9016: 46c0 nop ; \(mov r8, r8\) + 9016: e7fd b.n .+ <.+> #------------------------------------------------------------------------------ #------ atf2's .plt entry #------------------------------------------------------------------------------ @@ -37,7 +37,7 @@ Disassembly of section \.plt: #------------------------------------------------------------------------------ 00009030 : 9030: 4778 bx pc - 9032: 46c0 nop ; \(mov r8, r8\) + 9032: e7fd b.n .+ <.+> #------------------------------------------------------------------------------ #------ ttf2's .plt entry #------------------------------------------------------------------------------ @@ -49,7 +49,7 @@ Disassembly of section \.plt: #------------------------------------------------------------------------------ 00009040 : 9040: 4778 bx pc - 9042: 46c0 nop ; \(mov r8, r8\) + 9042: e7fd b.n .+ <.+> #------------------------------------------------------------------------------ #------ tbf2's .plt entry #------------------------------------------------------------------------------ @@ -75,7 +75,7 @@ Disassembly of section \.plt: #------------------------------------------------------------------------------ 00009068 : 9068: 4778 bx pc - 906a: 46c0 nop ; \(mov r8, r8\) + 906a: e7fd b.n .+ <.+> #------------------------------------------------------------------------------ #------ abf4's .plt entry #------------------------------------------------------------------------------ @@ -87,7 +87,7 @@ Disassembly of section \.plt: #------------------------------------------------------------------------------ 00009078 : 9078: 4778 bx pc - 907a: 46c0 nop ; \(mov r8, r8\) + 907a: e7fd b.n .+ <.+> #------------------------------------------------------------------------------ #------ tbf4's .plt entry #------------------------------------------------------------------------------ @@ -99,7 +99,7 @@ Disassembly of section \.plt: #------------------------------------------------------------------------------ 00009088 : 9088: 4778 bx pc - 908a: 46c0 nop ; \(mov r8, r8\) + 908a: e7fd b.n .+ <.+> #------------------------------------------------------------------------------ #------ ttf4's .plt entry #------------------------------------------------------------------------------ @@ -111,7 +111,7 @@ Disassembly of section \.plt: #------------------------------------------------------------------------------ 00009098 : 9098: 4778 bx pc - 909a: 46c0 nop ; \(mov r8, r8\) + 909a: e7fd b.n .+ <.+> #------------------------------------------------------------------------------ #------ atf4's .plt entry #------------------------------------------------------------------------------ @@ -130,7 +130,7 @@ Disassembly of section \.plt: #------------------------------------------------------------------------------ 000090b4 : 90b4: 4778 bx pc - 90b6: 46c0 nop ; \(mov r8, r8\) + 90b6: e7fd b.n .+ <.+> #------------------------------------------------------------------------------ #------ abf2's .plt entry #------------------------------------------------------------------------------ @@ -151,7 +151,7 @@ Disassembly of section \.iplt: #------ thumb entry to atf1's .iplt entry #------------------------------------------------------------------------------ 90d0: 4778 bx pc - 90d2: 46c0 nop ; \(mov r8, r8\) + 90d2: e7fd b.n .+ <.+> #------------------------------------------------------------------------------ #------ atf1's .iplt entry #------------------------------------------------------------------------------ @@ -162,7 +162,7 @@ Disassembly of section \.iplt: #------ thumb entry to abf1's .iplt entry #------------------------------------------------------------------------------ 90e0: 4778 bx pc - 90e2: 46c0 nop ; \(mov r8, r8\) + 90e2: e7fd b.n .+ <.+> #------------------------------------------------------------------------------ #------ abf1's .iplt entry #------------------------------------------------------------------------------ @@ -179,7 +179,7 @@ Disassembly of section \.iplt: #------ thumb entry to ttf1's .iplt entry #------------------------------------------------------------------------------ 90fc: 4778 bx pc - 90fe: 46c0 nop ; \(mov r8, r8\) + 90fe: e7fd b.n .+ <.+> #------------------------------------------------------------------------------ #------ ttf1's .iplt entry #------------------------------------------------------------------------------ @@ -190,7 +190,7 @@ Disassembly of section \.iplt: #------ thumb entry to tbf1's .iplt entry #------------------------------------------------------------------------------ 910c: 4778 bx pc - 910e: 46c0 nop ; \(mov r8, r8\) + 910e: e7fd b.n .+ <.+> #------------------------------------------------------------------------------ #------ tbf1's .iplt entry #------------------------------------------------------------------------------ @@ -201,7 +201,7 @@ Disassembly of section \.iplt: #------ thumb entry to atf3 #------------------------------------------------------------------------------ 911c: 4778 bx pc - 911e: 46c0 nop ; \(mov r8, r8\) + 911e: e7fd b.n .+ <.+> 00009120 : 9120: e28fc600 add ip, pc, #0, 12 @@ -211,7 +211,7 @@ Disassembly of section \.iplt: #------ thumb entry to abf3 #------------------------------------------------------------------------------ 912c: 4778 bx pc - 912e: 46c0 nop ; \(mov r8, r8\) + 912e: e7fd b.n .+ <.+> 00009130 : 9130: e28fc600 add ip, pc, #0, 12 @@ -221,7 +221,7 @@ Disassembly of section \.iplt: #------ thumb entry to ttf3 #------------------------------------------------------------------------------ 913c: 4778 bx pc - 913e: 46c0 nop ; \(mov r8, r8\) + 913e: e7fd b.n .+ <.+> 00009140 : 9140: e28fc600 add ip, pc, #0, 12 @@ -231,7 +231,7 @@ Disassembly of section \.iplt: #------ thumb entry to tbf3 #------------------------------------------------------------------------------ 914c: 4778 bx pc - 914e: 46c0 nop ; \(mov r8, r8\) + 914e: e7fd b.n .+ <.+> 00009150 : 9150: e28fc600 add ip, pc, #0, 12 diff --git a/ld/testsuite/ld-arm/ifunc-2.dd b/ld/testsuite/ld-arm/ifunc-2.dd index 91eab540d29..a60ef2b0277 100644 --- a/ld/testsuite/ld-arm/ifunc-2.dd +++ b/ld/testsuite/ld-arm/ifunc-2.dd @@ -21,7 +21,7 @@ Disassembly of section \.iplt: #------ thumb entry to f3's .iplt entry #------------------------------------------------------------------------------ 9018: 4778 bx pc - 901a: 46c0 nop ; \(mov r8, r8\) + 901a: e7fd b.n .+ <.+> #------------------------------------------------------------------------------ #------ f3's .iplt entry #------------------------------------------------------------------------------ @@ -32,7 +32,7 @@ Disassembly of section \.iplt: #------ thumb entry to f4's .iplt entry #------------------------------------------------------------------------------ 9028: 4778 bx pc - 902a: 46c0 nop ; \(mov r8, r8\) + 902a: e7fd b.n .+ <.+> #------------------------------------------------------------------------------ #------ f4's .iplt entry #------------------------------------------------------------------------------ @@ -43,7 +43,7 @@ Disassembly of section \.iplt: #------ thumb entry to f7 #------------------------------------------------------------------------------ 9038: 4778 bx pc - 903a: 46c0 nop ; \(mov r8, r8\) + 903a: e7fd b.n .+ <.+> 0000903c : 903c: e28fc600 add ip, pc, #0, 12 @@ -58,7 +58,7 @@ Disassembly of section \.iplt: #------ thumb entry to f8 #------------------------------------------------------------------------------ 9054: 4778 bx pc - 9056: 46c0 nop ; \(mov r8, r8\) + 9056: e7fd b.n .+ <.+> 00009058 : 9058: e28fc600 add ip, pc, #0, 12 diff --git a/ld/testsuite/ld-arm/ifunc-4.dd b/ld/testsuite/ld-arm/ifunc-4.dd index 647a340855d..89fc34b85df 100644 --- a/ld/testsuite/ld-arm/ifunc-4.dd +++ b/ld/testsuite/ld-arm/ifunc-4.dd @@ -18,7 +18,7 @@ Disassembly of section \.plt: #------------------------------------------------------------------------------ 00009014 : 9014: 4778 bx pc - 9016: 46c0 nop ; \(mov r8, r8\) + 9016: e7fd b.n .+ <.+> #------------------------------------------------------------------------------ #------ atf2's .plt entry #------------------------------------------------------------------------------ @@ -30,7 +30,7 @@ Disassembly of section \.plt: #------------------------------------------------------------------------------ 00009024 : 9024: 4778 bx pc - 9026: 46c0 nop ; \(mov r8, r8\) + 9026: e7fd b.n .+ <.+> #------------------------------------------------------------------------------ #------ ttf2's .plt entry #------------------------------------------------------------------------------ @@ -42,7 +42,7 @@ Disassembly of section \.plt: #------------------------------------------------------------------------------ 00009034 : 9034: 4778 bx pc - 9036: 46c0 nop ; \(mov r8, r8\) + 9036: e7fd b.n .+ <.+> #------------------------------------------------------------------------------ #------ tbf2's .plt entry #------------------------------------------------------------------------------ @@ -68,7 +68,7 @@ Disassembly of section \.plt: #------------------------------------------------------------------------------ 0000905c : 905c: 4778 bx pc - 905e: 46c0 nop ; \(mov r8, r8\) + 905e: e7fd b.n .+ <.+> #------------------------------------------------------------------------------ #------ abf2's .plt entry #------------------------------------------------------------------------------ @@ -89,7 +89,7 @@ Disassembly of section \.iplt: #------ thumb entry to atf1's .iplt entry #------------------------------------------------------------------------------ 9078: 4778 bx pc - 907a: 46c0 nop ; \(mov r8, r8\) + 907a: e7fd b.n .+ <.+> #------------------------------------------------------------------------------ #------ atf1's .iplt entry #------------------------------------------------------------------------------ @@ -100,7 +100,7 @@ Disassembly of section \.iplt: #------ thumb entry to abf1's .iplt entry #------------------------------------------------------------------------------ 9088: 4778 bx pc - 908a: 46c0 nop ; \(mov r8, r8\) + 908a: e7fd b.n .+ <.+> #------------------------------------------------------------------------------ #------ abf1's .iplt entry #------------------------------------------------------------------------------ @@ -117,7 +117,7 @@ Disassembly of section \.iplt: #------ thumb entry to ttf1's .iplt entry #------------------------------------------------------------------------------ 90a4: 4778 bx pc - 90a6: 46c0 nop ; \(mov r8, r8\) + 90a6: e7fd b.n .+ <.+> #------------------------------------------------------------------------------ #------ ttf1's .iplt entry #------------------------------------------------------------------------------ @@ -128,7 +128,7 @@ Disassembly of section \.iplt: #------ thumb entry to tbf1's .iplt entry #------------------------------------------------------------------------------ 90b4: 4778 bx pc - 90b6: 46c0 nop ; \(mov r8, r8\) + 90b6: e7fd b.n .+ <.+> #------------------------------------------------------------------------------ #------ tbf1's .iplt entry #------------------------------------------------------------------------------ @@ -145,7 +145,7 @@ Disassembly of section \.iplt: #------ thumb entry to atf3's .iplt entry #------------------------------------------------------------------------------ 90d0: 4778 bx pc - 90d2: 46c0 nop ; \(mov r8, r8\) + 90d2: e7fd b.n .+ <.+> #------------------------------------------------------------------------------ #------ atf3's .iplt entry #------------------------------------------------------------------------------ @@ -156,7 +156,7 @@ Disassembly of section \.iplt: #------ thumb entry to abf3's .iplt entry #------------------------------------------------------------------------------ 90e0: 4778 bx pc - 90e2: 46c0 nop ; \(mov r8, r8\) + 90e2: e7fd b.n .+ <.+> #------------------------------------------------------------------------------ #------ abf3's .iplt entry #------------------------------------------------------------------------------ @@ -167,7 +167,7 @@ Disassembly of section \.iplt: #------ thumb entry to ttf3's .iplt entry #------------------------------------------------------------------------------ 90f0: 4778 bx pc - 90f2: 46c0 nop ; \(mov r8, r8\) + 90f2: e7fd b.n .+ <.+> #------------------------------------------------------------------------------ #------ ttf3's .iplt entry #------------------------------------------------------------------------------ @@ -178,7 +178,7 @@ Disassembly of section \.iplt: #------ thumb entry to tbf3's .iplt entry #------------------------------------------------------------------------------ 9100: 4778 bx pc - 9102: 46c0 nop ; \(mov r8, r8\) + 9102: e7fd b.n .+ <.+> #------------------------------------------------------------------------------ #------ tbf3's .iplt entry #------------------------------------------------------------------------------ @@ -195,7 +195,7 @@ Disassembly of section \.iplt: #------ thumb entry to abf4's .iplt entry #------------------------------------------------------------------------------ 911c: 4778 bx pc - 911e: 46c0 nop ; \(mov r8, r8\) + 911e: e7fd b.n .+ <.+> #------------------------------------------------------------------------------ #------ abf4's .iplt entry #------------------------------------------------------------------------------ @@ -206,7 +206,7 @@ Disassembly of section \.iplt: #------ thumb entry to tbf4's .iplt entry #------------------------------------------------------------------------------ 912c: 4778 bx pc - 912e: 46c0 nop ; \(mov r8, r8\) + 912e: e7fd b.n .+ <.+> #------------------------------------------------------------------------------ #------ tbf4's .iplt entry #------------------------------------------------------------------------------ @@ -217,7 +217,7 @@ Disassembly of section \.iplt: #------ thumb entry to ttf4's .iplt entry #------------------------------------------------------------------------------ 913c: 4778 bx pc - 913e: 46c0 nop ; \(mov r8, r8\) + 913e: e7fd b.n .+ <.+> #------------------------------------------------------------------------------ #------ ttf4's .iplt entry #------------------------------------------------------------------------------ @@ -234,7 +234,7 @@ Disassembly of section \.iplt: #------ thumb entry to atf4's .iplt entry #------------------------------------------------------------------------------ 9158: 4778 bx pc - 915a: 46c0 nop ; \(mov r8, r8\) + 915a: e7fd b.n .+ <.+> #------------------------------------------------------------------------------ #------ atf4's .iplt entry #------------------------------------------------------------------------------ diff --git a/ld/testsuite/ld-arm/ifunc-6.dd b/ld/testsuite/ld-arm/ifunc-6.dd index 3c9cbd5351d..c060cb20516 100644 --- a/ld/testsuite/ld-arm/ifunc-6.dd +++ b/ld/testsuite/ld-arm/ifunc-6.dd @@ -9,7 +9,7 @@ Disassembly of section \.iplt: #------ thumb entry to f3's .iplt entry #------------------------------------------------------------------------------ 9000: 4778 bx pc - 9002: 46c0 nop ; \(mov r8, r8\) + 9002: e7fd b.n .+ <.+> #------------------------------------------------------------------------------ #------ f3's .iplt entry #------------------------------------------------------------------------------ @@ -26,7 +26,7 @@ Disassembly of section \.iplt: #------ thumb entry to f4's .iplt entry #------------------------------------------------------------------------------ 901c: 4778 bx pc - 901e: 46c0 nop ; \(mov r8, r8\) + 901e: e7fd b.n .+ <.+> #------------------------------------------------------------------------------ #------ f4's .iplt entry #------------------------------------------------------------------------------ diff --git a/ld/testsuite/ld-arm/ifunc-8.dd b/ld/testsuite/ld-arm/ifunc-8.dd index 50a91770926..8216eb148de 100644 --- a/ld/testsuite/ld-arm/ifunc-8.dd +++ b/ld/testsuite/ld-arm/ifunc-8.dd @@ -15,7 +15,7 @@ Disassembly of section \.iplt: #------ thumb entry to atf1's .iplt entry #------------------------------------------------------------------------------ 900c: 4778 bx pc - 900e: 46c0 nop ; \(mov r8, r8\) + 900e: e7fd b.n .+ <.+> #------------------------------------------------------------------------------ #------ atf1's .iplt entry #------------------------------------------------------------------------------ @@ -26,7 +26,7 @@ Disassembly of section \.iplt: #------ thumb entry to abf1's .iplt entry #------------------------------------------------------------------------------ 901c: 4778 bx pc - 901e: 46c0 nop ; \(mov r8, r8\) + 901e: e7fd b.n .+ <.+> #------------------------------------------------------------------------------ #------ abf1's .iplt entry #------------------------------------------------------------------------------ @@ -43,7 +43,7 @@ Disassembly of section \.iplt: #------ thumb entry to ttf1's .iplt entry #------------------------------------------------------------------------------ 9038: 4778 bx pc - 903a: 46c0 nop ; \(mov r8, r8\) + 903a: e7fd b.n .+ <.+> #------------------------------------------------------------------------------ #------ ttf1's .iplt entry #------------------------------------------------------------------------------ @@ -54,7 +54,7 @@ Disassembly of section \.iplt: #------ thumb entry to tbf1's .iplt entry #------------------------------------------------------------------------------ 9048: 4778 bx pc - 904a: 46c0 nop ; \(mov r8, r8\) + 904a: e7fd b.n .+ <.+> #------------------------------------------------------------------------------ #------ tbf1's .iplt entry #------------------------------------------------------------------------------ @@ -65,7 +65,7 @@ Disassembly of section \.iplt: #------ thumb entry to atf3's .iplt entry #------------------------------------------------------------------------------ 9058: 4778 bx pc - 905a: 46c0 nop ; \(mov r8, r8\) + 905a: e7fd b.n .+ <.+> #------------------------------------------------------------------------------ #------ atf3's .iplt entry #------------------------------------------------------------------------------ @@ -76,7 +76,7 @@ Disassembly of section \.iplt: #------ thumb entry to abf3's .iplt entry #------------------------------------------------------------------------------ 9068: 4778 bx pc - 906a: 46c0 nop ; \(mov r8, r8\) + 906a: e7fd b.n .+ <.+> #------------------------------------------------------------------------------ #------ abf3's .iplt entry #------------------------------------------------------------------------------ @@ -87,7 +87,7 @@ Disassembly of section \.iplt: #------ thumb entry to ttf3's .iplt entry #------------------------------------------------------------------------------ 9078: 4778 bx pc - 907a: 46c0 nop ; \(mov r8, r8\) + 907a: e7fd b.n .+ <.+> #------------------------------------------------------------------------------ #------ ttf3's .iplt entry #------------------------------------------------------------------------------ @@ -98,7 +98,7 @@ Disassembly of section \.iplt: #------ thumb entry to tbf3's .iplt entry #------------------------------------------------------------------------------ 9088: 4778 bx pc - 908a: 46c0 nop ; \(mov r8, r8\) + 908a: e7fd b.n .+ <.+> #------------------------------------------------------------------------------ #------ tbf3's .iplt entry #------------------------------------------------------------------------------ diff --git a/ld/testsuite/ld-arm/jump-reloc-veneers-long.d b/ld/testsuite/ld-arm/jump-reloc-veneers-long.d index ae176bed8ac..1edb1b37729 100644 --- a/ld/testsuite/ld-arm/jump-reloc-veneers-long.d +++ b/ld/testsuite/ld-arm/jump-reloc-veneers-long.d @@ -16,7 +16,7 @@ Disassembly of section .text: 000080.. <[^>]*>: 80..: 4778 bx pc - 80..: 46c0 nop ; \(mov r8, r8\) + 80..: e7fd b.n .+ <.+> 80..: e59fc000 ldr ip, \[pc\] ; 80.. <__dest_veneer\+0xc> 80..: e12fff1c bx ip 80..: 09000001 .word 0x09000001 diff --git a/ld/testsuite/ld-arm/mixed-app.d b/ld/testsuite/ld-arm/mixed-app.d index 4bcbdad8ded..99c6e5dcf63 100644 --- a/ld/testsuite/ld-arm/mixed-app.d +++ b/ld/testsuite/ld-arm/mixed-app.d @@ -14,7 +14,7 @@ Disassembly of section .plt: .*: .* .* : .*: 4778 bx pc - .*: 46c0 nop ; \(mov r8, r8\) + .*: e7fd b.n .+ <.+> .*: e28fc6.* add ip, pc, #.* .*: e28cca.* add ip, ip, #.* ; 0x.* .*: e5bcf.* ldr pc, \[ip, #.*\]!.* diff --git a/ld/testsuite/ld-arm/thumb2-b-interwork.d b/ld/testsuite/ld-arm/thumb2-b-interwork.d index 67cb8638ec3..e01ef505412 100644 --- a/ld/testsuite/ld-arm/thumb2-b-interwork.d +++ b/ld/testsuite/ld-arm/thumb2-b-interwork.d @@ -11,6 +11,6 @@ Disassembly of section .text: [0-9a-f]+ <__bar_from_thumb>: +[0-9a-f]+: 4778 bx pc - +[0-9a-f]+: 46c0 nop ; \(mov r8, r8\) + +[0-9a-f]+: e7fd b.n .+ <.+> +[0-9a-f]+: eafffffc b [0-9a-f]+ diff --git a/ld/testsuite/ld-arm/tls-longplt.d b/ld/testsuite/ld-arm/tls-longplt.d index 066467228b7..c7fad340257 100644 --- a/ld/testsuite/ld-arm/tls-longplt.d +++ b/ld/testsuite/ld-arm/tls-longplt.d @@ -58,7 +58,7 @@ Disassembly of section .foo: 04001038 <__unnamed_veneer>: 4001038: 4778 bx pc - 400103a: 46c0 nop ; .* + 400103a: e7fd b.n .+ <.+> 400103c: e51ff004 ldr pc, \[pc, #-4\] ; .* 4001040: 000081b0 .word 0x000081b0 4001044: 00000000 .word 0x00000000 diff --git a/ld/testsuite/ld-arm/tls-thumb1.d b/ld/testsuite/ld-arm/tls-thumb1.d index 3b39f656042..41d5f8c1b88 100644 --- a/ld/testsuite/ld-arm/tls-thumb1.d +++ b/ld/testsuite/ld-arm/tls-thumb1.d @@ -38,7 +38,7 @@ Disassembly of section .text: 000081a0 <__unnamed_veneer>: .*: 4778 bx pc -.*: 46c0 nop ; .* +.*: e7fd b.n .+ <.+> .*: e59f1000 ldr r1, \[pc\] ; .* .*: e081f00f add pc, r1, pc .*: ffffffa0 .word 0xffffffa0 @@ -67,7 +67,7 @@ Disassembly of section .foo: 0400103c <__unnamed_veneer>: .*: 4778 bx pc -.*: 46c0 nop ; .* +.*: e7fd b.n .+ <.+> .*: e59f1000 ldr r1, \[pc\] ; .* .*: e081f00f add pc, r1, pc .*: fc007104 .word 0xfc007104