Skip to content

Commit 0d37ae9

Browse files
committed
Add test for PCHi20Lo12
1 parent 5da1863 commit 0d37ae9

File tree

2 files changed

+86
-9
lines changed

2 files changed

+86
-9
lines changed

lld/test/ELF/loongarch-relax-emit-relocs.s

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33

44
# RUN: llvm-mc --filetype=obj --triple=loongarch32 --mattr=+relax %s -o %t.32.o
55
# RUN: llvm-mc --filetype=obj --triple=loongarch64 --mattr=+relax %s -o %t.64.o
6-
# RUN: ld.lld -Ttext=0x10000 --emit-relocs %t.32.o -o %t.32
7-
# RUN: ld.lld -Ttext=0x10000 --emit-relocs %t.64.o -o %t.64
6+
# RUN: ld.lld -Ttext=0x10000 -section-start=.got=0x20000 --emit-relocs %t.32.o -o %t.32
7+
# RUN: ld.lld -Ttext=0x10000 -section-start=.got=0x20000 --emit-relocs %t.64.o -o %t.64
88
# RUN: llvm-objdump -dr %t.32 | FileCheck %s --check-prefix=RELAX
99
# RUN: llvm-objdump -dr %t.64 | FileCheck %s --check-prefix=RELAX
1010

@@ -13,7 +13,7 @@
1313
# RUN: llvm-objdump -dr %t.64.r | FileCheck %s --check-prefix=CHECKR
1414

1515
## --no-relax should keep original relocations.
16-
# RUN: ld.lld -Ttext=0x10000 --emit-relocs --no-relax %t.64.o -o %t.64.norelax
16+
# RUN: ld.lld -Ttext=0x10000 -section-start=.got=0x20000 --emit-relocs --no-relax %t.64.o -o %t.64.norelax
1717
# RUN: llvm-objdump -dr %t.64.norelax | FileCheck %s --check-prefix=NORELAX
1818

1919
# RELAX: 00010000 <_start>:
@@ -22,31 +22,45 @@
2222
# RELAX-NEXT: R_LARCH_RELAX *ABS*
2323
# RELAX-NEXT: R_LARCH_PCREL20_S2 _start
2424
# RELAX-NEXT: R_LARCH_RELAX *ABS*
25+
# RELAX-NEXT: pcaddi $a0, -1
26+
# RELAX-NEXT: R_LARCH_RELAX _start
27+
# RELAX-NEXT: R_LARCH_RELAX *ABS*
28+
# RELAX-NEXT: R_LARCH_PCREL20_S2 _start
29+
# RELAX-NEXT: R_LARCH_RELAX *ABS*
2530
# RELAX-NEXT: nop
2631
# RELAX-NEXT: R_LARCH_ALIGN *ABS*+0xc
2732
# RELAX-NEXT: nop
28-
# RELAX-NEXT: nop
2933
# RELAX-NEXT: ret
3034

3135
# NORELAX: <_start>:
3236
# NORELAX-NEXT: pcalau12i $a0, 0
3337
# NORELAX-NEXT: R_LARCH_PCALA_HI20 _start
3438
# NORELAX-NEXT: R_LARCH_RELAX *ABS*
35-
# NORELAX-NEXT: addi.d $a0, $a0, 0
39+
# NORELAX-NEXT: addi.d $a0, $a0, 0
3640
# NORELAX-NEXT: R_LARCH_PCALA_LO12 _start
3741
# NORELAX-NEXT: R_LARCH_RELAX *ABS*
38-
# NORELAX-NEXT: nop
39-
# NORELAX-NEXT: R_LARCH_ALIGN *ABS*+0xc
40-
# NORELAX-NEXT: nop
42+
# NORELAX-NEXT: pcalau12i $a0, 16
43+
# NORELAX-NEXT: R_LARCH_GOT_PC_HI20 _start
44+
# NORELAX-NEXT: R_LARCH_RELAX *ABS*
45+
# NORELAX-NEXT: ld.d $a0, $a0, 0
46+
# NORELAX-NEXT: R_LARCH_GOT_PC_LO12 _start
47+
# NORELAX-NEXT: R_LARCH_RELAX *ABS*
4148
# NORELAX-NEXT: ret
49+
# NORELAX-NEXT: R_LARCH_ALIGN *ABS*+0xc
4250

4351
# CHECKR: <_start>:
4452
# CHECKR-NEXT: pcalau12i $a0, 0
4553
# CHECKR-NEXT: R_LARCH_PCALA_HI20 _start
4654
# CHECKR-NEXT: R_LARCH_RELAX *ABS*
47-
# CHECKR-NEXT: addi.d $a0, $a0, 0
55+
# CHECKR-NEXT: addi.d $a0, $a0, 0
4856
# CHECKR-NEXT: R_LARCH_PCALA_LO12 _start
4957
# CHECKR-NEXT: R_LARCH_RELAX *ABS*
58+
# CHECKR-NEXT: pcalau12i $a0, 0
59+
# CHECKR-NEXT: R_LARCH_GOT_PC_HI20 _start
60+
# CHECKR-NEXT: R_LARCH_RELAX *ABS*
61+
# CHECKR-NEXT: ld.d $a0, $a0, 0
62+
# CHECKR-NEXT: R_LARCH_GOT_PC_LO12 _start
63+
# CHECKR-NEXT: R_LARCH_RELAX *ABS*
5064
# CHECKR-NEXT: nop
5165
# CHECKR-NEXT: R_LARCH_ALIGN *ABS*+0xc
5266
# CHECKR-NEXT: nop
@@ -56,5 +70,6 @@
5670
.global _start
5771
_start:
5872
la.pcrel $a0, _start
73+
la.got $a0, _start
5974
.p2align 4
6075
ret
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
# REQUIRES: loongarch
2+
3+
# RUN: llvm-mc --filetype=obj --triple=loongarch32 -mattr=+relax %s -o %t.32.o
4+
# RUN: llvm-mc --filetype=obj --triple=loongarch64 -mattr=+relax %s -o %t.64.o
5+
6+
# RUN: ld.lld --section-start=.text=0x10000 --section-start=.data=0x14000 %t.32.o -o %t.32
7+
# RUN: ld.lld --section-start=.text=0x10000 --section-start=.data=0x14000 %t.64.o -o %t.64
8+
# RUN: llvm-objdump -td --no-show-raw-insn %t.32 | FileCheck --check-prefixes=RELAX %s
9+
# RUN: llvm-objdump -td --no-show-raw-insn %t.64 | FileCheck --check-prefixes=RELAX %s
10+
11+
# RUN: ld.lld --section-start=.text=0x10000 --section-start=.data=0x14000 %t.32.o -shared -o %t.32s
12+
# RUN: ld.lld --section-start=.text=0x10000 --section-start=.data=0x14000 %t.64.o -shared -o %t.64s
13+
# RUN: llvm-objdump -td --no-show-raw-insn %t.32s | FileCheck --check-prefixes=RELAX %s
14+
# RUN: llvm-objdump -td --no-show-raw-insn %t.64s | FileCheck --check-prefixes=RELAX %s
15+
16+
# RUN: ld.lld --section-start=.text=0x10000 --section-start=.data=0x410000 %t.32.o -o %t.32o
17+
# RUN: ld.lld --section-start=.text=0x10000 --section-start=.data=0x410000 %t.64.o -o %t.64o
18+
# RUN: llvm-objdump -td --no-show-raw-insn %t.32o | FileCheck --check-prefixes=NORELAX32 %s
19+
# RUN: llvm-objdump -td --no-show-raw-insn %t.64o | FileCheck --check-prefixes=NORELAX64 %s
20+
21+
# RELAX-LABEL: <_start>:
22+
## offset = 0x14000 - 0x10000 = 4096<<2
23+
# RELAX-NEXT: 10000: pcaddi $a0, 4096
24+
# RELAX-NEXT: pcaddi $a0, 4095
25+
# RELAX-NEXT: pcaddi $a0, 4094
26+
# RELAX-NEXT: pcaddi $a0, 4093
27+
28+
# NORELAX32-LABEL: <_start>:
29+
## offset exceed range of pcaddi
30+
## offset = 0x410000 - 0x10000: 0x400 pages, page offset 0
31+
# NORELAX32-NEXT: 10000: pcalau12i $a0, 1024
32+
# NORELAX32-NEXT: addi.w $a0, $a0, 0
33+
# NORELAX32-NEXT: pcalau12i $a0, 1024
34+
# NORELAX32-NEXT: ld.w $a0, $a0, 4
35+
# NORELAX32-NEXT: pcalau12i $a0, 1024
36+
# NORELAX32-NEXT: addi.w $a0, $a0, 0
37+
# NORELAX32-NEXT: pcalau12i $a0, 1024
38+
# NORELAX32-NEXT: ld.w $a0, $a0, 4
39+
40+
# NORELAX64-LABEL: <_start>:
41+
## offset exceed range of pcaddi
42+
## offset = 0x410000 - 0x10000: 0x400 pages, page offset 0
43+
# NORELAX64-NEXT: 10000: pcalau12i $a0, 1024
44+
# NORELAX64-NEXT: addi.d $a0, $a0, 0
45+
# NORELAX64-NEXT: pcalau12i $a0, 1024
46+
# NORELAX64-NEXT: ld.d $a0, $a0, 8
47+
# NORELAX64-NEXT: pcalau12i $a0, 1024
48+
# NORELAX64-NEXT: addi.d $a0, $a0, 0
49+
# NORELAX64-NEXT: pcalau12i $a0, 1024
50+
# NORELAX64-NEXT: ld.d $a0, $a0, 8
51+
52+
.section .text
53+
.global _start
54+
_start:
55+
la.local $a0, sym
56+
la.global $a0, sym
57+
la.pcrel $a0, sym
58+
la.got $a0, sym
59+
60+
.section .data
61+
sym:
62+
.zero 4

0 commit comments

Comments
 (0)