117 lines · plain
1// REQUIRES: arm2// RUN: llvm-mc -arm-add-build-attributes -filetype=obj -triple=thumbv7a-none-linux-gnueabi %s -o %t3// RUN: ld.lld %t --shared --icf=all -o %t.so4// The output file is large, most of it zeroes. We dissassemble only the5// parts we need to speed up the test and avoid a large output file6// RUN: llvm-objdump --no-print-imm-hex -d %t.so --start-address=0x2000000 --stop-address=0x2000018 | FileCheck --check-prefix=CHECK1 %s7// RUN: llvm-objdump --no-print-imm-hex -d %t.so --start-address=0x2800004 --stop-address=0x2800034 | FileCheck --check-prefix=CHECK2 %s8// RUN: llvm-objdump --no-print-imm-hex -d %t.so --start-address=0x4000000 --stop-address=0x4000010 | FileCheck --check-prefix=CHECK3 %s9// RUN: llvm-objdump --no-print-imm-hex -d %t.so --start-address=0x4000010 --stop-address=0x4000100 --triple=armv7a-linux-gnueabihf | FileCheck --check-prefix=CHECK4 %s10// RUN: rm %t.so11 .syntax unified12 .thumb13 14// Make sure that we generate a range extension thunk to a PLT entry15 .section ".text.1", "ax", %progbits16 .global sym117 .global elsewhere18 .type elsewhere, %function19 .global preemptible20 .type preemptible, %function21 .global far_preemptible22 .type far_preemptible, %function23 .global far_nonpreemptible24 .hidden far_nonpreemptible25 .type far_nonpreemptible, %function26 .global far_nonpreemptible_alias27 .hidden far_nonpreemptible_alias28 .type far_nonpreemptible_alias, %function29sym1:30 bl elsewhere31 bl preemptible32 bx lr33preemptible:34 bl far_preemptible35 bl far_nonpreemptible36 bl far_nonpreemptible_alias37 bx lr38// CHECK1: Disassembly of section .text:39// CHECK1-EMPTY:40// CHECK1-NEXT: <sym1>:41// CHECK1-NEXT: 2000000: f000 d800 bl 0x2800004 <__ThumbV7PILongThunk_elsewhere>42// CHECK1-NEXT: 2000004: f000 d804 bl 0x2800010 <__ThumbV7PILongThunk_preemptible>43// CHECK1-NEXT: 2000008: 4770 bx lr44// CHECK1: <preemptible>:45// CHECK1-NEXT: 200000a: f000 d807 bl 0x280001c <__ThumbV7PILongThunk_far_preemptible>46// CHECK1-NEXT: 200000e: f000 d80b bl 0x2800028 <__ThumbV7PILongThunk_far_nonpreemptible>47// CHECK1-NEXT: 2000012: f000 d809 bl 0x2800028 <__ThumbV7PILongThunk_far_nonpreemptible>48// CHECK1-NEXT: 2000016: 4770 bx lr49 50 .section .text.2, "ax", %progbits51 .balign 0x080000052 bx lr53// CHECK2: <__ThumbV7PILongThunk_elsewhere>:54// CHECK2-NEXT: 2800004: f240 0c20 movw r12, #3255// CHECK2-NEXT: 2800008: f2c0 1c80 movt r12, #38456// CHECK2-NEXT: 280000c: 44fc add r12, pc57// CHECK2-NEXT: 280000e: 4760 bx r1258// CHECK2: <__ThumbV7PILongThunk_preemptible>:59// CHECK2-NEXT: 2800010: f240 0c24 movw r12, #3660// CHECK2-NEXT: 2800014: f2c0 1c80 movt r12, #38461// CHECK2-NEXT: 2800018: 44fc add r12, pc62// CHECK2-NEXT: 280001a: 4760 bx r1263// CHECK2: <__ThumbV7PILongThunk_far_preemptible>:64// CHECK2-NEXT: 280001c: f240 0c28 movw r12, #4065// CHECK2-NEXT: 2800020: f2c0 1c80 movt r12, #38466// CHECK2-NEXT: 2800024: 44fc add r12, pc67// CHECK2-NEXT: 2800026: 4760 bx r1268// CHECK2: <__ThumbV7PILongThunk_far_nonpreemptible>:69// CHECK2-NEXT: 2800028: f64f 7ccd movw r12, #6548570// CHECK2-NEXT: 280002c: f2c0 1c7f movt r12, #38371// CHECK2-NEXT: 2800030: 44fc add r12, pc72// CHECK2-NEXT: 2800032: 4760 bx r1273 74 .section .text.3, "ax", %progbits75.balign 0x200000076far_preemptible:77far_nonpreemptible:78 bl elsewhere79 80 .section .text.4, "ax", %progbits81.balign 0x200000082far_nonpreemptible_alias:83 bl elsewhere84 85// CHECK3: <far_preemptible>:86// CHECK3: 4000000: f000 e816 blx 0x400003087 88// CHECK4: Disassembly of section .plt:89// CHECK4-EMPTY:90// CHECK4-NEXT: <.plt>:91// CHECK4-NEXT: 4000010: e52de004 str lr, [sp, #-4]!92// CHECK4-NEXT: 4000014: e28fe600 add lr, pc, #0, #1293// CHECK4-NEXT: 4000018: e28eea20 add lr, lr, #3294// CHECK4-NEXT: 400001c: e5bef0a4 ldr pc, [lr, #164]!95// CHECK4-NEXT: 4000020: d4 d4 d4 d4 .word 0xd4d4d4d496// CHECK4-NEXT: 4000024: d4 d4 d4 d4 .word 0xd4d4d4d497// CHECK4-NEXT: 4000028: d4 d4 d4 d4 .word 0xd4d4d4d498// CHECK4-NEXT: 400002c: d4 d4 d4 d4 .word 0xd4d4d4d499// CHECK4-EMPTY:100// CHECK4-NEXT: <elsewhere@plt>:101// CHECK4-NEXT: 4000030: e28fc600 add r12, pc, #0, #12102// CHECK4-NEXT: 4000034: e28cca20 add r12, r12, #32103// CHECK4-NEXT: 4000038: e5bcf08c ldr pc, [r12, #140]!104// CHECK4-NEXT: 400003c: d4 d4 d4 d4 .word 0xd4d4d4d4105// CHECK4-EMPTY:106// CHECK4-NEXT: <preemptible@plt>:107// CHECK4-NEXT: 4000040: e28fc600 add r12, pc, #0, #12108// CHECK4-NEXT: 4000044: e28cca20 add r12, r12, #32109// CHECK4-NEXT: 4000048: e5bcf080 ldr pc, [r12, #128]!110// CHECK4-NEXT: 400004c: d4 d4 d4 d4 .word 0xd4d4d4d4111// CHECK4-EMPTY:112// CHECK4-NEXT: <far_preemptible@plt>:113// CHECK4-NEXT: 4000050: e28fc600 add r12, pc, #0, #12114// CHECK4-NEXT: 4000054: e28cca20 add r12, r12, #32115// CHECK4-NEXT: 4000058: e5bcf074 ldr pc, [r12, #116]!116// CHECK4-NEXT: 400005c: d4 d4 d4 d4 .word 0xd4d4d4d4117