2 # RUN: echo '.globl b; b:' | llvm-mc -filetype=obj -triple=riscv32 - -o %t1.o
3 # RUN: ld.lld -shared %t1.o -soname=t1.so -o %t1.so
5 # RUN: llvm-mc -filetype=obj -triple=riscv32 -position-independent %s -o %t.o
6 # RUN: ld.lld %t.o %t1.so -o %t
7 # RUN: llvm-readelf -S %t | FileCheck --check-prefix=SEC32 %s
8 # RUN: llvm-readobj -r %t | FileCheck --check-prefix=RELOC32 %s
9 # RUN: llvm-nm %t | FileCheck --check-prefix=NM32 %s
10 # RUN: llvm-readobj -x .got %t | FileCheck --check-prefix=HEX32 %s
11 # RUN: llvm-objdump -d --no-show-raw-insn %t | FileCheck --check-prefix=DIS32 %s
13 # RUN: echo '.globl b; b:' | llvm-mc -filetype=obj -triple=riscv64 - -o %t1.o
14 # RUN: ld.lld -shared %t1.o -soname=t1.so -o %t1.so
16 # RUN: llvm-mc -filetype=obj -triple=riscv64 -position-independent %s -o %t.o
17 # RUN: ld.lld %t.o %t1.so -o %t
18 # RUN: llvm-readelf -S %t | FileCheck --check-prefix=SEC64 %s
19 # RUN: llvm-readobj -r %t | FileCheck --check-prefix=RELOC64 %s
20 # RUN: llvm-nm %t | FileCheck --check-prefix=NM64 %s
21 # RUN: llvm-readobj -x .got %t | FileCheck --check-prefix=HEX64 %s
22 # RUN: llvm-objdump -d --no-show-raw-insn %t | FileCheck --check-prefix=DIS64 %s
24 # SEC32: .got PROGBITS 0001220c 00020c 00000c
25 # SEC64: .got PROGBITS 0000000000012358 000358 000018
27 # RELOC32: .rela.dyn {
28 # RELOC32-NEXT: 0x12210 R_RISCV_32 b 0x0
31 # RELOC64: .rela.dyn {
32 # RELOC64-NEXT: 0x12360 R_RISCV_64 b 0x0
36 # NM64: 0000000000013370 d a
39 ## .got[1] = 0 (relocated by R_RISCV_32/64 at runtime)
40 ## .got[2] = a (filled at link time)
41 # HEX32: section '.got':
42 # HEX32: 0x0001220c ac210100 00000000 18320100
44 # HEX64: section '.got':
45 # HEX64: 0x00012358 98220100 00000000 00000000 00000000
46 # HEX64: 0x00012368 70330100 00000000
48 ## &.got[2]-. = 0x12214-0x1119c = 4096*1+120
49 # DIS32: 1119c: auipc a0, 0x1
50 # DIS32-NEXT: lw a0, 0x78(a0)
51 ## &.got[1]-. = 0x12210-0x111a4 = 4096*1+108
52 # DIS32: 111a4: auipc a0, 0x1
53 # DIS32-NEXT: lw a0, 0x6c(a0)
55 ## &.got[2]-. = 0x12368-0x11288 = 4096*1+224
56 # DIS64: 11288: auipc a0, 0x1
57 # DIS64-NEXT: ld a0, 0xe0(a0)
58 ## &.got[1]-. = 0x12360-0x11290 = 4096*1+208
59 # DIS64: 11290: auipc a0, 0x1
60 # DIS64-NEXT: ld a0, 0xd0(a0)
67 ## An undefined reference of _GLOBAL_OFFSET_TABLE_ causes .got[0] to be
68 ## allocated to store _DYNAMIC.
69 .long _GLOBAL_OFFSET_TABLE_ - .