54 lines · plain
1// REQUIRES: arm2// RUN: llvm-mc -position-independent -filetype=obj -triple=armv7a-none-linux-gnueabi %s -o %t.o3// RUN: ld.lld %t.o -shared -o %t4// RUN: llvm-readobj -S --symbols --dyn-relocations %t | FileCheck %s5// RUN: llvm-objdump --no-print-imm-hex -d --triple=armv7a-none-linux-gnueabi %t | FileCheck --check-prefix=CODE %s6 .syntax unified7 .text8 .globl _start9 .align 210_start:11 .type _start, %function12 ldr r3, .LGOT13 ldr r2, .LGOT+414.LPIC:15 add r0, pc, r316 bx lr17 .align 218.LGOT:19 // gas implicitly uses (R_ARM_BASE_PREL) for _GLOBAL_OFFSET_TABLE_ in PIC20 // llvm-mc generates R_ARM_REL32, this will need updating when MC changes21 .word _GLOBAL_OFFSET_TABLE_ - (.LPIC+8)22 .word function(GOT)23 24 .globl function25 .align 226function:27 .type function, %function28 bx lr29 30// CHECK: Dynamic Relocations {31// CHECK-NEXT: 0x2020C R_ARM_GLOB_DAT function32 33// CHECK: Name: _GLOBAL_OFFSET_TABLE_34// CHECK-NEXT: Value: 0x2020C35// CHECK-NEXT: Size:36// CHECK-NEXT: Binding: Local37// CHECK-NEXT: Type: None38// CHECK-NEXT: Other [39// CHECK-NEXT: STV_HIDDEN40// CHECK-NEXT: ]41// CHECK-NEXT: Section: .got42 43// CODE: Disassembly of section .text:44// CODE-EMPTY:45// CODE-NEXT: <_start>:46// CODE-NEXT: 101a0: e59f3008 ldr r3, [pc, #8]47// CODE-NEXT: 101a4: e59f2008 ldr r2, [pc, #8]48// CODE-NEXT: 101a8: e08f0003 add r0, pc, r349// CODE-NEXT: 101ac: e12fff1e bx lr50// (_GLOBAL_OFFSET_TABLE_ = 0x220c) - (0x11a8 + 8) = 0x105c51// CODE-NEXT: 101b0: 5c 00 01 0052// (Got(function) - GotBase = 0x053// CODE-NEXT: 101b4: 00 00 00 0054