xref: /llvm-project/lld/test/ELF/riscv-relax-align.s (revision c532ba4edd7ad7675ba450ba43268aa9e7bda46b)
1# REQUIRES: riscv
2## Test that we can handle R_RISCV_ALIGN.
3
4# RUN: rm -rf %t && mkdir %t && cd %t
5
6# RUN: llvm-mc -filetype=obj -triple=riscv32 -mattr=+relax %s -o 32.o
7# RUN: ld.lld -Ttext=0x10000 32.o -o 32
8# RUN: llvm-objdump -td --no-show-raw-insn -M no-aliases 32 | FileCheck %s
9## R_RISCV_ALIGN is handled regarldess of --no-relax.
10# RUN: ld.lld -Ttext=0x10000 --no-relax 32.o -o 32.norelax
11# RUN: llvm-objdump -td --no-show-raw-insn -M no-aliases 32.norelax | FileCheck %s
12
13# RUN: llvm-mc -filetype=obj -triple=riscv64 -mattr=+relax %s -o 64.o
14# RUN: ld.lld -Ttext=0x10000 64.o -o 64
15# RUN: llvm-objdump -td --no-show-raw-insn -M no-aliases 64 | FileCheck %s
16# RUN: ld.lld -Ttext=0x10000 --no-relax 64.o -o 64.norelax
17# RUN: llvm-objdump -td --no-show-raw-insn -M no-aliases 64.norelax | FileCheck %s
18
19# RUN: ld.lld -Ttext=0x10000 --gc-sections 64.o -o 64.gc
20# RUN: llvm-objdump -td --no-show-raw-insn -M no-aliases 64.gc | FileCheck %s --check-prefix=GC
21
22## -r keeps section contents unchanged.
23# RUN: ld.lld -r 64.o -o 64.r
24# RUN: llvm-objdump -dr --no-show-raw-insn -M no-aliases 64.r | FileCheck %s --check-prefix=CHECKR
25
26# CHECK-DAG: 00010004 l       .text  {{0*}}1c a
27# CHECK-DAG: 00010008 l       .text  {{0*}}28 b
28# CHECK-DAG: 00010014 l       .text  {{0*}}20 c
29# CHECK-DAG: 00010000 g       .text  {{0*}}38 _start
30
31# CHECK:       <_start>:
32# CHECK-NEXT:            addi    a0, a0, 0x1
33# CHECK-EMPTY:
34# CHECK-NEXT:  <a>:
35# CHECK-NEXT:            addi    a0, a0, 0x2
36# CHECK-EMPTY:
37# CHECK-NEXT:  <b>:
38# CHECK-NEXT:            addi    zero, zero, 0x0
39# CHECK-NEXT:            addi    zero, zero, 0x0
40# CHECK-NEXT:    10010:  addi    a0, a0, 0x3
41# CHECK-EMPTY:
42# CHECK-NEXT:  <c>:
43# CHECK-NEXT:            addi    a0, a0, 0x4
44# CHECK-NEXT:            addi    a0, a0, 0x5
45# CHECK-NEXT:            addi    zero, zero, 0x0
46# CHECK-NEXT:    10020:  addi    a0, a0, 0x6
47# CHECK-NEXT:            addi    a0, a0, 0x7
48# CHECK-NEXT:            addi    zero, zero, 0x0
49# CHECK-NEXT:            addi    zero, zero, 0x0
50# CHECK-NEXT:    10030:  addi    a0, a0, 0x8
51# CHECK-NEXT:            addi    a0, a0, 0x9
52# CHECK-EMPTY:
53# CHECK:       <e>:
54# CHECK-NEXT:            addi    a0, a0, 0x1
55# CHECK-EMPTY:
56# CHECK-NEXT:  <f>:
57# CHECK-NEXT:    10044:  addi    a0, a0, 0x2
58# CHECK-NEXT:            addi    zero, zero, 0x0
59# CHECK-NEXT:            addi    zero, zero, 0x0
60# CHECK-NEXT:            addi    zero, zero, 0x0
61# CHECK-NEXT:            addi    zero, zero, 0x0
62# CHECK-NEXT:            addi    zero, zero, 0x0
63# CHECK-NEXT:            addi    zero, zero, 0x0
64# CHECK-NEXT:    10060:  addi    a0, a0, 0x3
65# CHECK-EMPTY:
66
67## _start-0x10070 = 0x10000-0x10070 = -112
68# CHECK:      <.L1>:
69# CHECK-NEXT:   10070:  auipc   a0, 0x0
70# CHECK-NEXT:           addi    a0, a0, -0x70
71# CHECK-NEXT:           addi    zero, zero, 0x0
72# CHECK-NEXT:           addi    zero, zero, 0x0
73# CHECK-NEXT:           auipc   a0, 0x0
74# CHECK-NEXT:           addi    a0, a0, -0x70
75# CHECK-EMPTY:
76
77# GC-DAG:       00010004 l       .text  {{0*}}1c a
78# GC-DAG:       00010008 l       .text  {{0*}}28 b
79# GC-DAG:       00010014 l       .text  {{0*}}20 c
80# GC-DAG:       00010000 g       .text  {{0*}}38 _start
81# GC:           <_start>:
82# GC-NOT:       <d>:
83
84# CHECKR:       <_start>:
85# CHECKR-NEXT:          addi    a0, a0, 0x1
86# CHECKR-EMPTY:
87# CHECKR-NEXT:  <a>:
88# CHECKR-NEXT:          addi    a0, a0, 0x2
89# CHECKR-EMPTY:
90# CHECKR-NEXT:  <b>:
91# CHECKR-NEXT:          addi    zero, zero, 0x0
92# CHECKR-NEXT:          0000000000000008:  R_RISCV_ALIGN        *ABS*+0xc
93# CHECKR-NEXT:          addi    zero, zero, 0x0
94# CHECKR-NEXT:          addi    zero, zero, 0x0
95# CHECKR-NEXT:          addi    a0, a0, 0x3
96# CHECKR-EMPTY:
97# CHECKR-NEXT:  <c>:
98# CHECKR-NEXT:          addi    a0, a0, 0x4
99# CHECKR-NEXT:          addi    a0, a0, 0x5
100# CHECKR-NEXT:          addi    zero, zero, 0x0
101# CHECKR-NEXT:          0000000000000020:  R_RISCV_ALIGN        *ABS*+0x1c
102# CHECKR-NEXT:          addi    zero, zero, 0x0
103# CHECKR-NEXT:          addi    zero, zero, 0x0
104# CHECKR-NEXT:          addi    zero, zero, 0x0
105# CHECKR-NEXT:          addi    zero, zero, 0x0
106# CHECKR-NEXT:          addi    zero, zero, 0x0
107# CHECKR-NEXT:          addi    zero, zero, 0x0
108# CHECKR-NEXT:          addi    a0, a0, 0x6
109# CHECKR-NEXT:          addi    a0, a0, 0x7
110# CHECKR-NEXT:          addi    zero, zero, 0x0
111# CHECKR-NEXT:          0000000000000044:  R_RISCV_ALIGN        *ABS*+0xc
112# CHECKR-NEXT:          addi    zero, zero, 0x0
113# CHECKR-NEXT:          addi    zero, zero, 0x0
114# CHECKR-NEXT:          addi    a0, a0, 0x8
115# CHECKR-NEXT:          addi    a0, a0, 0x9
116
117.global _start
118_start:
119  addi a0, a0, 0x1
120a:
121  addi a0, a0, 0x2
122b:
123.balign 16
124  addi a0, a0, 0x3
125c:
126  addi a0, a0, 0x4
127  addi a0, a0, 0x5
128.balign 32
129.size a, . - a
130  addi a0, a0, 0x6
131  addi a0, a0, 0x7
132.balign 16
133.size b, . - b
134  addi a0, a0, 0x8
135.size c, . - c
136  addi a0, a0, 0x9
137.size _start, . - _start
138
139## Test another text section.
140.section .text2,"ax",@progbits
141d:
142e:
143.balign 8
144  addi a0, a0, 0x1
145f:
146  addi a0, a0, 0x2
147.balign 32
148.size d, . - d
149  addi a0, a0, 0x3
150.size e, . - e
151.size f, . - f
152
153## Test that matching HI20 can be found despite deleted bytes.
154.section .pcrel,"ax",@progbits
155.L1:
156  auipc a0, %pcrel_hi(_start)
157  addi a0, a0, %pcrel_lo(.L1)
158.balign 16
159.L2:
160  auipc a0, %pcrel_hi(_start)
161  addi a0, a0, %pcrel_lo(.L1)
162