brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.4 KiB · cd3918b Raw
170 lines · plain
1// REQUIRES: arm2// RUN: llvm-mc --triple=armv7a-none-eabi --arm-add-build-attributes -filetype=obj -o %t.o %s3// RUN: echo "SECTIONS { \4// RUN:                 .rodata.low 0x8012  : { *(.rodata.low) } \5// RUN:                 .text.low   0x8f00  : { *(.text.low) } \6// RUN:                 .text.neg   0x9000  : { *(.text.neg) } \7// RUN:                 .text.pos   0x10000 : { *(.text.pos) } \8// RUN:                 .text.high  0x10100 : { *(.text.high) } \9// RUN:                 .data_high  0x1100f : { *(.data.high) } \10// RUN:               } " > %t.script11// RUN: ld.lld -n --script %t.script %t.o -o %t12// RUN: llvm-readobj --symbols %t | FileCheck %s --check-prefix=SYMS13// RUN: llvm-objdump --no-print-imm-hex -d --no-show-raw-insn --triple=armv7a-none-eabi %t | FileCheck %s14 15/// Test the various legal cases for the R_ARM_LDR_PC_G0 relocation16/// Range is +- 4095 bytes17/// The Thumb bit for function symbols is ignored18 .section .rodata.low, "a", %progbits19dat1:20 .byte 021dat2:22 .byte 123dat3:24 .byte 225dat4:26 .byte 327 28 .section .text.low, "ax", %progbits29 .balign 430 .global target131 .type target1, %function32target1:33 bx lr34 .type target2, %function35target2:36 bx lr37 38 .section .text.neg, "ax", %progbits39 .balign 440 .global _start41 .type _start, %function42_start:43/// ldr r0, dat144 .inst 0xe51f000845 .reloc 0, R_ARM_LDR_PC_G0, dat146/// ldr r1, dat247 .inst 0xe51f100848 .reloc 4, R_ARM_LDR_PC_G0, dat249/// ldr r2, dat350 .inst 0xe51f200851 .reloc 8, R_ARM_LDR_PC_G0, dat352/// ldr r3, dat453 .inst 0xe51f300854 .reloc 0xc, R_ARM_LDR_PC_G0, dat455/// ldr r0, target156 .inst 0xe51f000857 .reloc 0x10, R_ARM_LDR_PC_G0, target158/// ldr r1, target259 .inst 0xe51f100860 .reloc 0x14, R_ARM_LDR_PC_G0, target261 62 .section .text.pos, "ax", %progbits63 .balign 464 .global pos65 .type pos, %function66pos:67/// ldr r2, target368 .inst 0xe51f200869 .reloc 0, R_ARM_LDR_PC_G0, target370/// ldr r3, target471 .inst 0xe51f300872 .reloc 4, R_ARM_LDR_PC_G0, target473/// ldr r0, dat574 .inst 0xe51f000875 .reloc 8, R_ARM_LDR_PC_G0, dat576/// ldr r1, dat677 .inst 0xe51f100878 .reloc 0xc, R_ARM_LDR_PC_G0, dat679/// ldr r2, dat780 .inst 0xe51f200881 .reloc 0x10, R_ARM_LDR_PC_G0, dat782/// ldr r3, dat883 .inst 0xe51f300884 .reloc 0x14, R_ARM_LDR_PC_G0, dat885 86/// positive addend in instruction, all others are -4 (PC bias)87///ldr r4, dat5 + 888 .inst 0xe59f400089 .reloc 0x18, R_ARM_LDR_PC_G0, dat590 91 .section .text.high, "ax", %progbits92 .balign 493 .type target3, %function94 .global target395target3:96 bx lr97 .thumb_func98target4:99 bx lr100 101 .section .data.high, "aw", %progbits102dat5:103 .byte 0104dat6:105 .byte 1106dat7:107 .byte 2108dat8:109 .byte 3110 111// SYMS:     Name: dat1112// SYMS-NEXT:     Value: 0x8012113// SYMS:     Name: dat2114// SYMS-NEXT:     Value: 0x8013115// SYMS:     Name: dat3116// SYMS-NEXT:     Value: 0x8014117// SYMS:     Name: dat4118// SYMS-NEXT:     Value: 0x8015119 120// CHECK: 00008f00 <target1>:121// CHECK-NEXT:     8f00:        bx      lr122 123// CHECK: 00008f04 <target2>:124// CHECK-NEXT:     8f04:        bx      lr125 126// CHECK: 00009000 <_start>:127/// 0x9000 + 0x8 - 0xff6 = 0x8012128// CHECK-NEXT: 9000:  ldr     r0, [pc, #-4086]129/// 0x9004 + 0x8 - 0xff9 = 0x8013130// CHECK-NEXT: 9004:  ldr     r1, [pc, #-4089]131/// 0x9008 + 0x8 - 0xffc = 0x8014132// CHECK-NEXT: 9008:  ldr     r2, [pc, #-4092]133/// 0x900c + 0x8 - 0xfff = 0x8015134// CHECK-NEXT: 900c:  ldr     r3, [pc, #-4095]135/// 0x9010 + 0x8 - 0x118 = 0x8f00136// CHECK-NEXT: 9010:  ldr     r0, [pc, #-280]137/// 0x9014 + 0x8 - 0x118 = 0x8f04138// CHECK-NEXT: 9014:  ldr     r1, [pc, #-280]139///140// CHECK: 00010000 <pos>:141/// 0x10000 + 0x8 + 0xf8 = 0x10100142// CHECK-NEXT: 10000:  ldr     r2, [pc, #248]143/// 0x10004 + 0x8 + 0xf8 = 0x10104144// CHECK-NEXT: 10004: ldr     r3, [pc, #248]145/// 0x10008 + 0x8 + 0xfff = 0x1100f146// CHECK-NEXT: 10008: ldr     r0, [pc, #4095]147/// 0x1000c + 0x8 + 0xffc = 0x11010148// CHECK-NEXT: 1000c: ldr     r1, [pc, #4092]149/// 0x10010 + 0x8 + 0xff9 = 0x11011150// CHECK-NEXT: 10010: ldr     r2, [pc, #4089]151/// 0x10014 + 0x8 + 0xff6 = 0x11012152// CHECK-NEXT: 10014: ldr     r3, [pc, #4086]153/// 0x10018 + 0x8 + 0xff7 = 0x11017 = dat5 + 8154// CHECK-NEXT: 10018: ldr     r4, [pc, #4087]155 156// CHECK: 00010100 <target3>:157// CHECK-NEXT: 10100: bx      lr158 159// CHECK: 00010104 <target4>:160// CHECK-NEXT: 10104: bx      lr161 162// SYMS:     Name: dat5163// SYMS-NEXT:     Value: 0x1100F164// SYMS:     Name: dat6165// SYMS-NEXT:     Value: 0x11010166// SYMS:     Name: dat7167// SYMS-NEXT:     Value: 0x11011168// SYMS:     Name: dat8169// SYMS-NEXT:     Value: 0x11012170