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