228 lines · plain
1// REQUIRES: arm2// RUN: rm -rf %t && split-file %s %t3// RUN: llvm-mc -arm-add-build-attributes -filetype=obj -triple=armv4t-none-linux-gnueabi %t/a.s -o %t/a.o4// RUN: ld.lld %t/a.o --script %t/far.lds -o %t/a-far5// RUN: llvm-objdump --no-print-imm-hex -d --no-show-raw-insn --triple=armv4t-none-linux-gnueabi %t/a-far | FileCheck %s --check-prefixes=FAR6// RUN: ld.lld %t/a.o --script %t/near.lds -o %t/a-near7// RUN: llvm-objdump --no-print-imm-hex -d --no-show-raw-insn --triple=armv4t-none-linux-gnueabi %t/a-near | FileCheck %s --check-prefixes=NEAR8// RUN: ld.lld %t/a.o -pie --script %t/far.lds -o %t/a-far-pie9// RUN: llvm-objdump --no-print-imm-hex -d --no-show-raw-insn --triple=armv4t-none-linux-gnueabi %t/a-far-pie | FileCheck %s --check-prefixes=FAR-PIE10// RUN: ld.lld %t/a.o -pie --script %t/near.lds -o %t/a-near-pie11// RUN: llvm-objdump --no-print-imm-hex -d --no-show-raw-insn --triple=armv4t-none-linux-gnueabi %t/a-near-pie | FileCheck %s --check-prefixes=NEAR-PIE12 13// RUN: llvm-mc -arm-add-build-attributes -filetype=obj -triple=armv4teb-none-linux-gnueabi %t/a.s -o %t/a.o14// RUN: ld.lld %t/a.o --script %t/far.lds -o %t/a-far15// RUN: llvm-objdump --no-print-imm-hex -d --no-show-raw-insn --triple=armv4teb-none-linux-gnueabi %t/a-far | FileCheck %s --check-prefixes=FAR-EB16// RUN: ld.lld %t/a.o --script %t/near.lds -o %t/a-near17// RUN: llvm-objdump --no-print-imm-hex -d --no-show-raw-insn --triple=armv4teb-none-linux-gnueabi %t/a-near | FileCheck %s --check-prefixes=NEAR-EB18// RUN: ld.lld %t/a.o -pie --script %t/far.lds -o %t/a-far-pie19// RUN: llvm-objdump --no-print-imm-hex -d --no-show-raw-insn --triple=armv4teb-none-linux-gnueabi %t/a-far-pie | FileCheck %s --check-prefixes=FAR-EB-PIE20// RUN: ld.lld %t/a.o -pie --script %t/near.lds -o %t/a-near-pie21// RUN: llvm-objdump --no-print-imm-hex -d --no-show-raw-insn --triple=armv4teb-none-linux-gnueabi %t/a-near-pie | FileCheck %s --check-prefixes=NEAR-EB-PIE22 23/// On Arm v4t there is no blx instruction so all interworking must go via24/// a thunk.25 26#--- a.s27 .text28 .syntax unified29 .cpu arm7tdmi30 31 .section .low, "ax", %progbits32 .arm33 .globl _start34 .type _start,%function35 .p2align 236_start:37 bl target38 bx lr39 40// FAR-LABEL: <_start>:41// FAR-NEXT: 1000000: bl 0x1000008 <__ARMv4ABSLongBXThunk_target> @ imm = #042// FAR-NEXT: bx lr43// FAR-EMPTY:44// FAR-NEXT: <__ARMv4ABSLongBXThunk_target>:45// FAR-NEXT: 1000008: ldr r12, [pc] @ 0x1000010 <__ARMv4ABSLongBXThunk_target+0x8>46// FAR-NEXT: bx r1247// FAR-NEXT: 1000010: 01 00 00 06 .word 0x0600000148 49// FAR-EB-LABEL: <_start>:50// FAR-EB-NEXT: 1000000: bl 0x1000008 <__ARMv4ABSLongBXThunk_target> @ imm = #051// FAR-EB-NEXT: bx lr52// FAR-EB-EMPTY:53// FAR-EB-NEXT: <__ARMv4ABSLongBXThunk_target>:54// FAR-EB-NEXT: 1000008: ldr r12, [pc] @ 0x1000010 <__ARMv4ABSLongBXThunk_target+0x8>55// FAR-EB-NEXT: bx r1256// FAR-EB-NEXT: 1000010: 06 00 00 01 .word 0x0600000157 58// NEAR-LABEL: <_start>:59// NEAR-NEXT: 1000000: bl 0x1000008 <__ARMv4ABSLongBXThunk_target> @ imm = #060// NEAR-NEXT: bx lr61// NEAR-EMPTY:62// NEAR-NEXT: <__ARMv4ABSLongBXThunk_target>:63// NEAR-NEXT: 1000008: ldr r12, [pc] @ 0x1000010 <__ARMv4ABSLongBXThunk_target+0x8>64// NEAR-NEXT: bx r1265// NEAR-NEXT: 1000010: 15 00 00 01 .word 0x0100001566 67// NEAR-EB-LABEL: <_start>:68// NEAR-EB-NEXT: 1000000: bl 0x1000008 <__ARMv4ABSLongBXThunk_target> @ imm = #069// NEAR-EB-NEXT: bx lr70// NEAR-EB-EMPTY:71// NEAR-EB-NEXT: <__ARMv4ABSLongBXThunk_target>:72// NEAR-EB-NEXT: 1000008: ldr r12, [pc] @ 0x1000010 <__ARMv4ABSLongBXThunk_target+0x8>73// NEAR-EB-NEXT: bx r1274// NEAR-EB-NEXT: 1000010: 01 00 00 15 .word 0x0100001575 76// FAR-PIE-LABEL: <_start>:77// FAR-PIE-NEXT: 1000000: bl 0x1000008 <__ARMv4PILongBXThunk_target> @ imm = #078// FAR-PIE-NEXT: bx lr79// FAR-PIE-EMPTY:80// FAR-PIE-NEXT: <__ARMv4PILongBXThunk_target>:81// FAR-PIE-NEXT: 1000008: ldr r12, [pc, #4] @ 0x1000014 <__ARMv4PILongBXThunk_target+0xc>82// FAR-PIE-NEXT: add r12, pc, r1283// FAR-PIE-NEXT: bx r1284// FAR-PIE-NEXT: 1000014: ed ff ff 04 .word 0x04ffffed85 86// FAR-EB-PIE-LABEL: <_start>:87// FAR-EB-PIE-NEXT: 1000000: bl 0x1000008 <__ARMv4PILongBXThunk_target> @ imm = #088// FAR-EB-PIE-NEXT: bx lr89// FAR-EB-PIE-EMPTY:90// FAR-EB-PIE-NEXT: <__ARMv4PILongBXThunk_target>:91// FAR-EB-PIE-NEXT: 1000008: ldr r12, [pc, #4] @ 0x1000014 <__ARMv4PILongBXThunk_target+0xc>92// FAR-EB-PIE-NEXT: add r12, pc, r1293// FAR-EB-PIE-NEXT: bx r1294// FAR-EB-PIE-NEXT: 1000014: 04 ff ff ed .word 0x04ffffed95 96// NEAR-PIE-LABEL: <_start>:97// NEAR-PIE-NEXT: 1000000: bl 0x1000008 <__ARMv4PILongBXThunk_target> @ imm = #098// NEAR-PIE-NEXT: bx lr99// NEAR-PIE-EMPTY:100// NEAR-PIE-NEXT: <__ARMv4PILongBXThunk_target>:101// NEAR-PIE-NEXT: 1000008: ldr r12, [pc, #4] @ 0x1000014 <__ARMv4PILongBXThunk_target+0xc>102// NEAR-PIE-NEXT: add r12, pc, r12103// NEAR-PIE-NEXT: bx r12104// NEAR-PIE-NEXT: 1000014: 05 00 00 00 .word 0x00000005105 106// NEAR-EB-PIE-LABEL: <_start>:107// NEAR-EB-PIE-NEXT: 1000000: bl 0x1000008 <__ARMv4PILongBXThunk_target> @ imm = #0108// NEAR-EB-PIE-NEXT: bx lr109// NEAR-EB-PIE-EMPTY:110// NEAR-EB-PIE-NEXT: <__ARMv4PILongBXThunk_target>:111// NEAR-EB-PIE-NEXT: 1000008: ldr r12, [pc, #4] @ 0x1000014 <__ARMv4PILongBXThunk_target+0xc>112// NEAR-EB-PIE-NEXT: add r12, pc, r12113// NEAR-EB-PIE-NEXT: bx r12114// NEAR-EB-PIE-NEXT: 1000014: 00 00 00 05 .word 0x00000005115 116.section .high, "ax", %progbits117.thumb118 .globl target119 .type target,%function120target:121 bl _start122 bx lr123 124// FAR-LABEL: <target>:125// FAR-NEXT: 6000000: bl 0x6000008 <__Thumbv4ABSLongBXThunk__start> @ imm = #4126// FAR-NEXT: bx lr127// FAR-NEXT: bmi 0x5ffffb2 <__ARMv4ABSLongBXThunk_target+0x4ffffaa> @ imm = #-88128// FAR-EMPTY:129// FAR-NEXT: <__Thumbv4ABSLongBXThunk__start>:130// FAR-NEXT: 6000008: bx pc131// FAR-NEXT: b 0x6000008 <__Thumbv4ABSLongBXThunk__start> @ imm = #-6132// FAR-NEXT: 600000c: ldr pc, [pc, #-4] @ 0x6000010 <__Thumbv4ABSLongBXThunk__start+0x8>133// FAR-NEXT: 6000010: 00 00 00 01 .word 0x01000000134 135// FAR-EB-LABEL: <target>:136// FAR-EB-NEXT: 6000000: bl 0x6000008 <__Thumbv4ABSLongBXThunk__start> @ imm = #4137// FAR-EB-NEXT: bx lr138// FAR-EB-NEXT: bmi 0x5ffffb2 <__ARMv4ABSLongBXThunk_target+0x4ffffaa> @ imm = #-88139// FAR-EB-EMPTY:140// FAR-EB-NEXT: <__Thumbv4ABSLongBXThunk__start>:141// FAR-EB-NEXT: 6000008: bx pc142// FAR-EB-NEXT: b 0x6000008 <__Thumbv4ABSLongBXThunk__start> @ imm = #-6143// FAR-EB-NEXT: 600000c: ldr pc, [pc, #-4] @ 0x6000010 <__Thumbv4ABSLongBXThunk__start+0x8>144// FAR-EB-NEXT: 6000010: 01 00 00 00 .word 0x01000000145 146// NEAR-LABEL: <target>:147// NEAR-NEXT: 1000014: bl 0x100001c <__Thumbv4ABSLongBXThunk__start> @ imm = #4148// NEAR-NEXT: bx lr149// NEAR-NEXT: bmi 0xffffc6 @ imm = #-88150// NEAR-EMPTY:151// NEAR-NEXT: <__Thumbv4ABSLongBXThunk__start>:152// NEAR-NEXT: 100001c: bx pc153// NEAR-NEXT: b 0x100001c <__Thumbv4ABSLongBXThunk__start> @ imm = #-6154// NEAR-NEXT: 1000020: ldr pc, [pc, #-4] @ 0x1000024 <__Thumbv4ABSLongBXThunk__start+0x8>155// NEAR-NEXT: 1000024: 00 00 00 01 .word 0x01000000156 157// NEAR-EB-LABEL: <target>:158// NEAR-EB-NEXT: 1000014: bl 0x100001c <__Thumbv4ABSLongBXThunk__start> @ imm = #4159// NEAR-EB-NEXT: bx lr160// NEAR-EB-NEXT: bmi 0xffffc6 @ imm = #-88161// NEAR-EB-EMPTY:162// NEAR-EB-NEXT: <__Thumbv4ABSLongBXThunk__start>:163// NEAR-EB-NEXT: 100001c: bx pc164// NEAR-EB-NEXT: b 0x100001c <__Thumbv4ABSLongBXThunk__start> @ imm = #-6165// NEAR-EB-NEXT: 1000020: ldr pc, [pc, #-4] @ 0x1000024 <__Thumbv4ABSLongBXThunk__start+0x8>166// NEAR-EB-NEXT: 1000024: 01 00 00 00 .word 0x01000000167 168// FAR-PIE-LABEL: <target>:169// FAR-PIE-NEXT: 6000000: bl 0x6000008 <__Thumbv4PILongBXThunk__start> @ imm = #4170// FAR-PIE-NEXT: bx lr171// FAR-PIE-NEXT: bmi 0x5ffffb2 <__ARMv4PILongBXThunk_target+0x4ffffaa> @ imm = #-88172// FAR-PIE-EMPTY:173// FAR-PIE-NEXT: <__Thumbv4PILongBXThunk__start>:174// FAR-PIE-NEXT: 6000008: bx pc175// FAR-PIE-NEXT: b 0x6000008 <__Thumbv4PILongBXThunk__start> @ imm = #-6176// FAR-PIE-NEXT: 600000c: ldr r12, [pc] @ 0x6000014 <__Thumbv4PILongBXThunk__start+0xc>177// FAR-PIE-NEXT: add pc, r12, pc178// FAR-PIE-NEXT: 6000014: e8 ff ff fa .word 0xfaffffe8179 180// FAR-EB-PIE-LABEL: <target>:181// FAR-EB-PIE-NEXT: 6000000: bl 0x6000008 <__Thumbv4PILongBXThunk__start> @ imm = #4182// FAR-EB-PIE-NEXT: bx lr183// FAR-EB-PIE-NEXT: bmi 0x5ffffb2 <__ARMv4PILongBXThunk_target+0x4ffffaa> @ imm = #-88184// FAR-EB-PIE-EMPTY:185// FAR-EB-PIE-NEXT: <__Thumbv4PILongBXThunk__start>:186// FAR-EB-PIE-NEXT: 6000008: bx pc187// FAR-EB-PIE-NEXT: b 0x6000008 <__Thumbv4PILongBXThunk__start> @ imm = #-6188// FAR-EB-PIE-NEXT: 600000c: ldr r12, [pc] @ 0x6000014 <__Thumbv4PILongBXThunk__start+0xc>189// FAR-EB-PIE-NEXT: add pc, r12, pc190// FAR-EB-PIE-NEXT: 6000014: fa ff ff e8 .word 0xfaffffe8191 192// NEAR-PIE-LABEL: <target>:193// NEAR-PIE-NEXT: 1000018: bl 0x1000020 <__Thumbv4PILongBXThunk__start> @ imm = #4194// NEAR-PIE-NEXT: bx lr195// NEAR-PIE-NEXT: bmi 0xffffca @ imm = #-88196// NEAR-PIE-EMPTY:197// NEAR-PIE-NEXT: <__Thumbv4PILongBXThunk__start>:198// NEAR-PIE-NEXT: 1000020: bx pc199// NEAR-PIE-NEXT: b 0x1000020 <__Thumbv4PILongBXThunk__start> @ imm = #-6200// NEAR-PIE-NEXT: 1000024: ldr r12, [pc] @ 0x100002c <__Thumbv4PILongBXThunk__start+0xc>201// NEAR-PIE-NEXT: add pc, r12, pc202// NEAR-PIE-NEXT: 100002c: d0 ff ff ff .word 0xffffffd0203 204// NEAR-EB-PIE-LABEL: <target>:205// NEAR-EB-PIE-NEXT: 1000018: bl 0x1000020 <__Thumbv4PILongBXThunk__start> @ imm = #4206// NEAR-EB-PIE-NEXT: bx lr207// NEAR-EB-PIE-NEXT: bmi 0xffffca @ imm = #-88208// NEAR-EB-PIE-EMPTY:209// NEAR-EB-PIE-NEXT: <__Thumbv4PILongBXThunk__start>:210// NEAR-EB-PIE-NEXT: 1000020: bx pc211// NEAR-EB-PIE-NEXT: b 0x1000020 <__Thumbv4PILongBXThunk__start> @ imm = #-6212// NEAR-EB-PIE-NEXT: 1000024: ldr r12, [pc] @ 0x100002c <__Thumbv4PILongBXThunk__start+0xc>213// NEAR-EB-PIE-NEXT: add pc, r12, pc214// NEAR-EB-PIE-NEXT: 100002c: ff ff ff d0 .word 0xffffffd0215 216#--- far.lds217SECTIONS {218 . = SIZEOF_HEADERS;219 .low 0x01000000 : { *(.low) }220 .high 0x06000000 : { *(.high) }221}222 223#--- near.lds224SECTIONS {225 . = SIZEOF_HEADERS;226 .all 0x01000000 : { *(.low) *(.high) }227}228