brintos

brintos / llvm-project-archived public Read only

0
0
Text · 11.2 KiB · 6e772be Raw
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