brintos

brintos / llvm-project-archived public Read only

0
0
Text · 16.1 KiB · a01be31 Raw
358 lines · plain
1// REQUIRES: arm2// RUN: llvm-mc -arm-add-build-attributes -filetype=obj -triple=armv7a-none-linux-gnueabi %s -o %t3// RUN: echo "SECTIONS { \4// RUN:       . = SIZEOF_HEADERS; \5// RUN:       .R_ARM_JUMP24_callee_1 : { *(.R_ARM_JUMP24_callee_low) } \6// RUN:       .R_ARM_THM_JUMP_callee_1 : { *(.R_ARM_THM_JUMP_callee_low)} \7// RUN:       .text : { *(.text) } \8// RUN:       .arm_caller : { *(.arm_caller) } \9// RUN:       .thumb_caller : { *(.thumb_caller) } \10// RUN:       .R_ARM_JUMP24_callee_2 : { *(.R_ARM_JUMP24_callee_high) } \11// RUN:       .R_ARM_THM_JUMP_callee_2 : { *(.R_ARM_THM_JUMP_callee_high) } \12// RUN:       .got.plt 0x18b4 : {  }  } " > %t.script13// RUN: ld.lld --script %t.script %t -o %t214// RUN: llvm-objdump --no-print-imm-hex -d --no-show-raw-insn %t2 | FileCheck --check-prefix=CHECK-THUMB --check-prefix=CHECK-ABS-THUMB %s15// RUN: llvm-objdump --no-print-imm-hex -d --no-show-raw-insn --triple=armv7a-none-linux-gnueabi %t2 | FileCheck --check-prefix=CHECK-ARM --check-prefix=CHECK-ARM-ABS-ARM %s16// RUN: ld.lld --script %t.script %t -pie -o %t317// RUN: llvm-objdump --no-print-imm-hex -d --no-show-raw-insn %t3 | FileCheck --check-prefix=CHECK-THUMB --check-prefix=CHECK-PI-THUMB %s18// RUN: llvm-objdump --no-print-imm-hex -d --no-show-raw-insn --triple=armv7a-none-linux-gnueabi %t3 | FileCheck --check-prefix=CHECK-ARM --check-prefix=CHECK-PI-ARM %s19// RUN: ld.lld --script %t.script %t --shared -o %t420// RUN: llvm-readobj -S -r %t4 | FileCheck -check-prefix=CHECK-DSO-REL %s21// RUN: llvm-objdump --no-print-imm-hex -d --no-show-raw-insn --triple=armv7a-none-linux-gnueabi %t4 | FileCheck -check-prefix=CHECK-ARM-PLT %s22/// Test ARM Thumb Interworking23/// The file is linked and checked 3 times to check the following contexts24/// - Absolute executables, absolute Thunks are used.25/// - Position independent executables, position independent Thunks are used.26/// - Shared object, position independent Thunks to PLT entries are used.27 28 .syntax unified29 30/// Target Sections for thunks at a lower address than the callers.31.section .R_ARM_JUMP24_callee_low, "ax", %progbits32 .thumb33 .balign 0x100034 .globl thumb_callee135 .type thumb_callee1, %function36thumb_callee1:37 bx lr38 39// CHECK-THUMB: Disassembly of section .R_ARM_JUMP24_callee_1:40// CHECK-THUMB-EMPTY:41// CHECK-THUMB: <thumb_callee1>:42// CHECK-THUMB: 1000: bx      lr43 .section .R_ARM_THM_JUMP_callee_low, "ax", %progbits44 .arm45 .balign 0x10046 .globl arm_callee147 .type arm_callee1, %function48arm_callee1:49 bx lr50// Disassembly of section .R_ARM_THM_JUMP_callee_1:51// CHECK-ARM: <arm_callee1>:52// CHECK-ARM-NEXT: 1100: bx      lr53 54/// Calling sections55/// At present ARM and Thumb interworking thunks are always added to the calling56/// section.57 .section .arm_caller, "ax", %progbits58 .arm59 .balign 0x10060 .globl arm_caller61 .type arm_caller, %function62arm_caller:63/// If target supports BLX and target is in range we don't need an64/// interworking thunk for a BL or BLX instruction.65 bl thumb_callee166 blx thumb_callee167/// A B instruction can't be transformed into a BLX and needs an interworking68/// thunk.69 b thumb_callee170/// As long as the thunk is in range it can be reused.71 b thumb_callee172/// There can be more than one thunk associated with a section.73 b thumb_callee274 b thumb_callee375/// In range ARM targets do not require interworking thunks.76 b arm_callee177 beq arm_callee278 bne arm_callee379 bx lr80// CHECK-ARM-ABS-ARM: Disassembly of section .arm_caller:81// CHECK-ARM-ABS-ARM-EMPTY:82// CHECK-ARM-ABS-ARM-NEXT: <arm_caller>:83// CHECK-ARM-ABS-ARM-NEXT: 1300: blx     0x1000 <thumb_callee1>84// CHECK-ARM-ABS-ARM-NEXT: 1304: blx     0x1000 <thumb_callee1>85// CHECK-ARM-ABS-ARM-NEXT: 1308: b       0x1328 <__ARMv7ABSLongThunk_thumb_callee1>86// CHECK-ARM-ABS-ARM-NEXT: 130c: b       0x1328 <__ARMv7ABSLongThunk_thumb_callee1>87// CHECK-ARM-ABS-ARM-NEXT: 1310: b       0x1334 <__ARMv7ABSLongThunk_thumb_callee2>88// CHECK-ARM-ABS-ARM-NEXT: 1314: b       0x1340 <__ARMv7ABSLongThunk_thumb_callee3>89// CHECK-ARM-ABS-ARM-NEXT: 1318: b       0x1100 <arm_callee1>90// CHECK-ARM-ABS-ARM-NEXT: 131c: beq     0x1600 <arm_callee2>91// CHECK-ARM-ABS-ARM-NEXT: 1320: bne     0x1604 <arm_callee3>92// CHECK-ARM-ABS-ARM-NEXT: 1324: bx      lr93// CHECK-ARM-ABS-ARM:      <__ARMv7ABSLongThunk_thumb_callee1>:94// 0x1001 = thumb_callee195// CHECK-ARM-ABS-ARM-NEXT: 1328: movw    r12, #409796// CHECK-ARM-ABS-ARM-NEXT: 132c: movt    r12, #097// CHECK-ARM-ABS-ARM-NEXT: 1330: bx      r1298// 0x1501 = thumb_callee299// CHECK-ARM-ABS-ARM:      <__ARMv7ABSLongThunk_thumb_callee2>:100// CHECK-ARM-ABS-ARM-NEXT: 1334: movw    r12, #5377101// CHECK-ARM-ABS-ARM-NEXT: 1338: movt    r12, #0102// CHECK-ARM-ABS-ARM-NEXT: 133c: bx      r12103// 0x1503 = thumb_callee3104// CHECK-ARM-ABS-ARM:      <__ARMv7ABSLongThunk_thumb_callee3>:105// CHECK-ARM-ABS-ARM-NEXT: 1340: movw    r12, #5379106// CHECK-ARM-ABS-ARM-NEXT: 1344: movt    r12, #0107// CHECK-ARM-ABS-ARM-NEXT: 1348: bx      r12108 109// CHECK-PI-ARM: Disassembly of section .arm_caller:110// CHECK-PI-ARM-EMPTY:111// CHECK-PI-ARM-NEXT: <arm_caller>:112// CHECK-PI-ARM-NEXT: 1300: blx     0x1000 <thumb_callee1>113// CHECK-PI-ARM-NEXT: 1304: blx     0x1000 <thumb_callee1>114// CHECK-PI-ARM-NEXT: 1308: b       0x1328 <__ARMV7PILongThunk_thumb_callee1>115// CHECK-PI-ARM-NEXT: 130c: b       0x1328 <__ARMV7PILongThunk_thumb_callee1>116// CHECK-PI-ARM-NEXT: 1310: b       0x1338 <__ARMV7PILongThunk_thumb_callee2>117// CHECK-PI-ARM-NEXT: 1314: b       0x1348 <__ARMV7PILongThunk_thumb_callee3>118// CHECK-PI-ARM-NEXT: 1318: b       0x1100 <arm_callee1>119// CHECK-PI-ARM-NEXT: 131c: beq     0x1600 <arm_callee2>120// CHECK-PI-ARM-NEXT: 1320: bne     0x1604 <arm_callee3>121// CHECK-PI-ARM-NEXT: 1324: bx      lr122// CHECK-PI-ARM: <__ARMV7PILongThunk_thumb_callee1>:123// CHECK-PI-ARM-NEXT: 1328: movw    r12, #64713124// CHECK-PI-ARM-NEXT: 132c: movt    r12, #65535125// CHECK-PI-ARM-NEXT: 1330: add     r12, r12, pc126// CHECK-PI-ARM-NEXT: 1334: bx      r12127// CHECK-PI-ARM: <__ARMV7PILongThunk_thumb_callee2>:128// CHECK-PI-ARM-NEXT: 1338: movw    r12, #441129// CHECK-PI-ARM-NEXT: 133c: movt    r12, #0130// CHECK-PI-ARM-NEXT: 1340: add     r12, r12, pc131// CHECK-PI-ARM-NEXT: 1344: bx      r12132// CHECK-PI-ARM: <__ARMV7PILongThunk_thumb_callee3>:133// CHECK-PI-ARM-NEXT: 1348: movw    r12, #427134// CHECK-PI-ARM-NEXT: 134c: movt    r12, #0135// CHECK-PI-ARM-NEXT: 1350: add     r12, r12, pc136// CHECK-PI-ARM-NEXT: 1354: bx      r12137 138/// All PLT entries are ARM, callers via PLT no need for interworking thunks.139// CHECK-ARM-PLT: Disassembly of section .arm_caller:140// CHECK-ARM-PLT-EMPTY:141// CHECK-ARM-PLT-NEXT: <arm_caller>:142// CHECK-ARM-PLT-NEXT: 1300:        bl      0x1630143// CHECK-ARM-PLT-NEXT: 1304:        bl      0x1630144// CHECK-ARM-PLT-NEXT: 1308:        b       0x1630145// CHECK-ARM-PLT-NEXT: 130c:        b       0x1630146// CHECK-ARM-PLT-NEXT: 1310:        b       0x1660147// CHECK-ARM-PLT-NEXT: 1314:        b       0x1670148// CHECK-ARM-PLT-NEXT: 1318:        b       0x1640149// CHECK-ARM-PLT-NEXT: 131c:        beq     0x1680150// CHECK-ARM-PLT-NEXT: 1320:        bne     0x1690151// CHECK-ARM-PLT-NEXT: 1324:        bx      lr152 153 .section .thumb_caller, "ax", %progbits154 .balign 0x100155 .thumb156 .globl thumb_caller157 .type thumb_caller, %function158thumb_caller:159/// If target supports BLX and target is in range we don't need an160/// interworking thunk for a BL or BLX instruction.161 bl arm_callee1162 blx arm_callee1163/// A B instruction can't be transformed into a BLX and needs an interworking164/// thunk165 b.w arm_callee1166/// As long as the thunk is in range it can be reused167 b.w arm_callee2168/// There can be more than one thunk associated with a section169 b.w arm_callee3170/// Conditional branches also require interworking thunks, they can use the171/// same interworking thunks.172 beq.w arm_callee1173 beq.w arm_callee2174 bne.w arm_callee3175// CHECK-ABS-THUMB: Disassembly of section .thumb_caller:176// CHECK-ABS-THUMB-EMPTY:177// CHECK-ABS-THUMB-NEXT: <thumb_caller>:178// CHECK-ABS-THUMB-NEXT: 1400: blx     0x1100 <arm_callee1>179// CHECK-ABS-THUMB-NEXT: 1404: blx     0x1100 <arm_callee1>180// CHECK-ABS-THUMB-NEXT: 1408: b.w     0x1420 <__Thumbv7ABSLongThunk_arm_callee1>181// CHECK-ABS-THUMB-NEXT: 140c: b.w     0x142a <__Thumbv7ABSLongThunk_arm_callee2>182// CHECK-ABS-THUMB-NEXT: 1410: b.w     0x1434 <__Thumbv7ABSLongThunk_arm_callee3>183// CHECK-ABS-THUMB-NEXT: 1414: beq.w   0x1420 <__Thumbv7ABSLongThunk_arm_callee1>184// CHECK-ABS-THUMB-NEXT: 1418: beq.w   0x142a <__Thumbv7ABSLongThunk_arm_callee2>185// CHECK-ABS-THUMB-NEXT: 141c: bne.w   0x1434 <__Thumbv7ABSLongThunk_arm_callee3>186// CHECK-ABS-THUMB: <__Thumbv7ABSLongThunk_arm_callee1>:187// CHECK-ABS-THUMB-NEXT: 1420: movw    r12, #4352188// CHECK-ABS-THUMB-NEXT: 1424: movt    r12, #0189// CHECK-ABS-THUMB-NEXT: 1428: bx      r12190// CHECK-ABS-THUMB: <__Thumbv7ABSLongThunk_arm_callee2>:191// CHECK-ABS-THUMB-NEXT: 142a: movw    r12, #5632192// CHECK-ABS-THUMB-NEXT: 142e: movt    r12, #0193// CHECK-ABS-THUMB-NEXT: 1432: bx      r12194// CHECK-ABS-THUMB: <__Thumbv7ABSLongThunk_arm_callee3>:195// CHECK-ABS-THUMB-NEXT: 1434: movw    r12, #5636196// CHECK-ABS-THUMB-NEXT: 1438: movt    r12, #0197// CHECK-ABS-THUMB-NEXT: 143c: bx      r12198 199// CHECK-PI-THUMB: Disassembly of section .thumb_caller:200// CHECK-PI-THUMB-EMPTY:201// CHECK-PI-THUMB-NEXT: <thumb_caller>:202// CHECK-PI-THUMB-NEXT: 1400: blx     0x1100 <arm_callee1>203// CHECK-PI-THUMB-NEXT: 1404: blx     0x1100 <arm_callee1>204// CHECK-PI-THUMB-NEXT: 1408: b.w     0x1420 <__ThumbV7PILongThunk_arm_callee1>205// CHECK-PI-THUMB-NEXT: 140c: b.w     0x142c <__ThumbV7PILongThunk_arm_callee2>206// CHECK-PI-THUMB-NEXT: 1410: b.w     0x1438 <__ThumbV7PILongThunk_arm_callee3>207// CHECK-PI-THUMB-NEXT: 1414: beq.w   0x1420 <__ThumbV7PILongThunk_arm_callee1>208// CHECK-PI-THUMB-NEXT: 1418: beq.w   0x142c <__ThumbV7PILongThunk_arm_callee2>209// CHECK-PI-THUMB-NEXT: 141c: bne.w   0x1438 <__ThumbV7PILongThunk_arm_callee3>210// CHECK-PI-THUMB: <__ThumbV7PILongThunk_arm_callee1>:211// CHECK-PI-THUMB-NEXT: 1420: movw    r12, #64724212// CHECK-PI-THUMB-NEXT: 1424: movt    r12, #65535213// CHECK-PI-THUMB-NEXT: 1428: add     r12, pc214// CHECK-PI-THUMB-NEXT: 142a: bx      r12215// CHECK-PI-THUMB: <__ThumbV7PILongThunk_arm_callee2>:216// CHECK-PI-THUMB-NEXT: 142c: movw    r12, #456217// CHECK-PI-THUMB-NEXT: 1430: movt    r12, #0218// CHECK-PI-THUMB-NEXT: 1434: add     r12, pc219// CHECK-PI-THUMB-NEXT: 1436: bx      r12220// CHECK-PI-THUMB: <__ThumbV7PILongThunk_arm_callee3>:221// CHECK-PI-THUMB-NEXT: 1438: movw    r12, #448222// CHECK-PI-THUMB-NEXT: 143c: movt    r12, #0223// CHECK-PI-THUMB-NEXT: 1440: add     r12, pc224// CHECK-PI-THUMB-NEXT: 1442: bx      r12225 226/// Thumb calls need to change state to reach PLT227/// bl can change to blx to PLT entries, branches228/// need a state change thunk.229// CHECK-ARM-PLT: Disassembly of section .thumb_caller:230// CHECK-ARM-PLT-EMPTY:231// CHECK-ARM-PLT-NEXT: <thumb_caller>:232// CHECK-ARM-PLT-NEXT: 1400: blx     0x1640233// CHECK-ARM-PLT-NEXT: 1404: blx     0x1640234// CHECK-ARM-PLT-NEXT: 1408: b.w     0x1420 <__ThumbV7PILongThunk_arm_callee1>235// CHECK-ARM-PLT-NEXT: 140c: b.w     0x142c <__ThumbV7PILongThunk_arm_callee2>236// CHECK-ARM-PLT-NEXT: 1410: b.w     0x1438 <__ThumbV7PILongThunk_arm_callee3>237// CHECK-ARM-PLT-NEXT: 1414: beq.w   0x1420 <__ThumbV7PILongThunk_arm_callee1>238// CHECK-ARM-PLT-NEXT: 1418: beq.w   0x142c <__ThumbV7PILongThunk_arm_callee2>239// CHECK-ARM-PLT-NEXT: 141c: bne.w   0x1438 <__ThumbV7PILongThunk_arm_callee3>240 241/// Target Sections for thunks at a higher address than the callers.242.section .R_ARM_JUMP24_callee_high, "ax", %progbits243 .thumb244 .balign 0x100245 .globl thumb_callee2246 .type thumb_callee2, %function247thumb_callee2:248 bx lr249 250 .globl thumb_callee3251 .type thumb_callee3, %function252thumb_callee3:253 bx lr254// CHECK-THUMB:  Disassembly of section .R_ARM_JUMP24_callee_2:255// CHECK-THUMB-EMPTY:256// CHECK-THUMB-NEXT: <thumb_callee2>:257// CHECK-THUMB-NEXT: 1500: bx      lr258// CHECK-THUMB: <thumb_callee3>:259// CHECK-THUMB-NEXT: 1502: bx      lr260 261 .section .R_ARM_THM_JUMP_callee_high, "ax", %progbits262 .arm263 .balign 0x100264 .globl arm_callee2265 .type arm_callee2, %function266arm_callee2:267 bx lr268 .globl arm_callee3269 .type arm_callee3, %function270arm_callee3:271 bx lr272// CHECK-ARM: Disassembly of section .R_ARM_THM_JUMP_callee_2:273// CHECK-ARM-EMPTY:274// CHECK-ARM-NEXT: <arm_callee2>:275// CHECK-ARM-NEXT: 1600: bx      lr276// CHECK-ARM: <arm_callee3>:277// CHECK-ARM-NEXT: 1604: bx      lr278 279/// _start section just calls the arm and thumb calling sections280 .text281 .arm282 .globl _start283 .balign 0x100284 .type _start, %function285_start:286 bl arm_caller287 bl thumb_caller288 bx lr289 290// CHECK-ARM-PLT: Disassembly of section .plt:291// CHECK-ARM-PLT-EMPTY:292// CHECK-ARM-PLT-NEXT: 00001610 <.plt>:293// CHECK-ARM-PLT-NEXT:     1610:             str     lr, [sp, #-4]!294// CHECK-ARM-PLT-NEXT:     1614:             add     lr, pc, #0, #12295// CHECK-ARM-PLT-NEXT:     1618:             add     lr, lr, #0, #20296// CHECK-ARM-PLT-NEXT:     161c:             ldr     pc, [lr, #672]!297// CHECK-ARM-PLT-NEXT:     1620:     d4 d4 d4 d4     .word   0xd4d4d4d4298// CHECK-ARM-PLT-NEXT:     1624:     d4 d4 d4 d4     .word   0xd4d4d4d4299// CHECK-ARM-PLT-NEXT:     1628:     d4 d4 d4 d4     .word   0xd4d4d4d4300// CHECK-ARM-PLT-NEXT:     162c:     d4 d4 d4 d4     .word   0xd4d4d4d4301// CHECK-ARM-PLT-EMPTY:302// CHECK-ARM-PLT-NEXT:     <thumb_callee1@plt>303// CHECK-ARM-PLT-NEXT:     1630:             add     r12, pc, #0, #12304// CHECK-ARM-PLT-NEXT:     1634:             add     r12, r12, #0, #20305// CHECK-ARM-PLT-NEXT:     1638:             ldr     pc, [r12, #648]!306// CHECK-ARM-PLT-NEXT:     163c:     d4 d4 d4 d4     .word   0xd4d4d4d4307// CHECK-ARM-PLT-EMPTY:308// CHECK-ARM-PLT-NEXT:     <arm_callee1@plt>309// CHECK-ARM-PLT-NEXT:     1640:             add     r12, pc, #0, #12310// CHECK-ARM-PLT-NEXT:     1644:             add     r12, r12, #0, #20311// CHECK-ARM-PLT-NEXT:     1648:             ldr     pc, [r12, #636]!312// CHECK-ARM-PLT-NEXT:     164c:     d4 d4 d4 d4     .word   0xd4d4d4d4313// CHECK-ARM-PLT-EMPTY:314// CHECK-ARM-PLT-NEXT:     <arm_caller@plt>315// CHECK-ARM-PLT-NEXT:     1650:             add     r12, pc, #0, #12316// CHECK-ARM-PLT-NEXT:     1654:             add     r12, r12, #0, #20317// CHECK-ARM-PLT-NEXT:     1658:             ldr     pc, [r12, #624]!318// CHECK-ARM-PLT-NEXT:     165c:     d4 d4 d4 d4     .word   0xd4d4d4d4319// CHECK-ARM-PLT-EMPTY:320// CHECK-ARM-PLT-NEXT:     <thumb_callee2@plt>321// CHECK-ARM-PLT-NEXT:     1660:             add     r12, pc, #0, #12322// CHECK-ARM-PLT-NEXT:     1664:             add     r12, r12, #0, #20323// CHECK-ARM-PLT-NEXT:     1668:             ldr     pc, [r12, #612]!324// CHECK-ARM-PLT-NEXT:     166c:     d4 d4 d4 d4     .word   0xd4d4d4d4325// CHECK-ARM-PLT-EMPTY:326// CHECK-ARM-PLT-NEXT:     <thumb_callee3@plt>327// CHECK-ARM-PLT-NEXT:     1670:             add     r12, pc, #0, #12328// CHECK-ARM-PLT-NEXT:     1674:             add     r12, r12, #0, #20329// CHECK-ARM-PLT-NEXT:     1678:             ldr     pc, [r12, #600]!330// CHECK-ARM-PLT-NEXT:     167c:     d4 d4 d4 d4     .word   0xd4d4d4d4331// CHECK-ARM-PLT-EMPTY:332// CHECK-ARM-PLT-NEXT:     <arm_callee2@plt>333// CHECK-ARM-PLT-NEXT:     1680:             add     r12, pc, #0, #12334// CHECK-ARM-PLT-NEXT:     1684:             add     r12, r12, #0, #20335// CHECK-ARM-PLT-NEXT:     1688:             ldr     pc, [r12, #588]!336// CHECK-ARM-PLT-NEXT:     168c:     d4 d4 d4 d4     .word   0xd4d4d4d4337// CHECK-ARM-PLT-EMPTY:338// CHECK-ARM-PLT-NEXT:     <arm_callee3@plt>339// CHECK-ARM-PLT-NEXT:     1690:             add     r12, pc, #0, #12340// CHECK-ARM-PLT-NEXT:     1694:             add     r12, r12, #0, #20341// CHECK-ARM-PLT-NEXT:     1698:             ldr     pc, [r12, #576]!342// CHECK-ARM-PLT-NEXT:     169c:     d4 d4 d4 d4     .word   0xd4d4d4d4343// CHECK-ARM-PLT-EMPTY:344// CHECK-ARM-PLT-NEXT:     <thumb_caller@plt>345// CHECK-ARM-PLT-NEXT:     16a0:             add     r12, pc, #0, #12346// CHECK-ARM-PLT-NEXT:     16a4:             add     r12, r12, #0, #20347// CHECK-ARM-PLT-NEXT:     16a8:             ldr     pc, [r12, #564]!348// CHECK-ARM-PLT-NEXT:     16ac:     d4 d4 d4 d4     .word   0xd4d4d4d4349 350// CHECK-DSO-REL:      0x18C0 R_ARM_JUMP_SLOT thumb_callee1351// CHECK-DSO-REL-NEXT: 0x18C4 R_ARM_JUMP_SLOT arm_callee1352// CHECK-DSO-REL-NEXT: 0x18C8 R_ARM_JUMP_SLOT arm_caller353// CHECK-DSO-REL-NEXT: 0x18CC R_ARM_JUMP_SLOT thumb_callee2354// CHECK-DSO-REL-NEXT: 0x18D0 R_ARM_JUMP_SLOT thumb_callee3355// CHECK-DSO-REL-NEXT: 0x18D4 R_ARM_JUMP_SLOT arm_callee2356// CHECK-DSO-REL-NEXT: 0x18D8 R_ARM_JUMP_SLOT arm_callee3357// CHECK-DSO-REL-NEXT: 0x18DC R_ARM_JUMP_SLOT thumb_caller358