# REQUIRES: riscv ## Test that we can handle R_RISCV_ALIGN. # RUN: rm -rf %t && mkdir %t && cd %t # RUN: llvm-mc -filetype=obj -triple=riscv32 -mattr=+relax %s -o 32.o # RUN: ld.lld -Ttext=0x10000 32.o -o 32 # RUN: llvm-objdump -td --no-show-raw-insn -M no-aliases 32 | FileCheck %s ## R_RISCV_ALIGN is handled regarldess of --no-relax. # RUN: ld.lld -Ttext=0x10000 --no-relax 32.o -o 32.norelax # RUN: llvm-objdump -td --no-show-raw-insn -M no-aliases 32.norelax | FileCheck %s # RUN: llvm-mc -filetype=obj -triple=riscv64 -mattr=+relax %s -o 64.o # RUN: ld.lld -Ttext=0x10000 64.o -o 64 # RUN: llvm-objdump -td --no-show-raw-insn -M no-aliases 64 | FileCheck %s # RUN: ld.lld -Ttext=0x10000 --no-relax 64.o -o 64.norelax # RUN: llvm-objdump -td --no-show-raw-insn -M no-aliases 64.norelax | FileCheck %s # RUN: ld.lld -Ttext=0x10000 --gc-sections 64.o -o 64.gc # RUN: llvm-objdump -td --no-show-raw-insn -M no-aliases 64.gc | FileCheck %s --check-prefix=GC ## -r keeps section contents unchanged. # RUN: ld.lld -r 64.o -o 64.r # RUN: llvm-objdump -dr --no-show-raw-insn -M no-aliases 64.r | FileCheck %s --check-prefix=CHECKR # CHECK-DAG: 00010004 l .text {{0*}}1c a # CHECK-DAG: 00010008 l .text {{0*}}28 b # CHECK-DAG: 00010014 l .text {{0*}}20 c # CHECK-DAG: 00010000 g .text {{0*}}38 _start # CHECK: <_start>: # CHECK-NEXT: addi a0, a0, 0x1 # CHECK-EMPTY: # CHECK-NEXT: : # CHECK-NEXT: addi a0, a0, 0x2 # CHECK-EMPTY: # CHECK-NEXT: : # CHECK-NEXT: addi zero, zero, 0x0 # CHECK-NEXT: addi zero, zero, 0x0 # CHECK-NEXT: 10010: addi a0, a0, 0x3 # CHECK-EMPTY: # CHECK-NEXT: : # CHECK-NEXT: addi a0, a0, 0x4 # CHECK-NEXT: addi a0, a0, 0x5 # CHECK-NEXT: addi zero, zero, 0x0 # CHECK-NEXT: 10020: addi a0, a0, 0x6 # CHECK-NEXT: addi a0, a0, 0x7 # CHECK-NEXT: addi zero, zero, 0x0 # CHECK-NEXT: addi zero, zero, 0x0 # CHECK-NEXT: 10030: addi a0, a0, 0x8 # CHECK-NEXT: addi a0, a0, 0x9 # CHECK-EMPTY: # CHECK: : # CHECK-NEXT: addi a0, a0, 0x1 # CHECK-EMPTY: # CHECK-NEXT: : # CHECK-NEXT: 10044: addi a0, a0, 0x2 # CHECK-NEXT: addi zero, zero, 0x0 # CHECK-NEXT: addi zero, zero, 0x0 # CHECK-NEXT: addi zero, zero, 0x0 # CHECK-NEXT: addi zero, zero, 0x0 # CHECK-NEXT: addi zero, zero, 0x0 # CHECK-NEXT: addi zero, zero, 0x0 # CHECK-NEXT: 10060: addi a0, a0, 0x3 # CHECK-EMPTY: ## _start-0x10070 = 0x10000-0x10070 = -112 # CHECK: <.L1>: # CHECK-NEXT: 10070: auipc a0, 0x0 # CHECK-NEXT: addi a0, a0, -0x70 # CHECK-NEXT: addi zero, zero, 0x0 # CHECK-NEXT: addi zero, zero, 0x0 # CHECK-NEXT: auipc a0, 0x0 # CHECK-NEXT: addi a0, a0, -0x70 # CHECK-EMPTY: # GC-DAG: 00010004 l .text {{0*}}1c a # GC-DAG: 00010008 l .text {{0*}}28 b # GC-DAG: 00010014 l .text {{0*}}20 c # GC-DAG: 00010000 g .text {{0*}}38 _start # GC: <_start>: # GC-NOT: : # CHECKR: <_start>: # CHECKR-NEXT: addi a0, a0, 0x1 # CHECKR-EMPTY: # CHECKR-NEXT: : # CHECKR-NEXT: addi a0, a0, 0x2 # CHECKR-EMPTY: # CHECKR-NEXT: : # CHECKR-NEXT: addi zero, zero, 0x0 # CHECKR-NEXT: 0000000000000008: R_RISCV_ALIGN *ABS*+0xc # CHECKR-NEXT: addi zero, zero, 0x0 # CHECKR-NEXT: addi zero, zero, 0x0 # CHECKR-NEXT: addi a0, a0, 0x3 # CHECKR-EMPTY: # CHECKR-NEXT: : # CHECKR-NEXT: addi a0, a0, 0x4 # CHECKR-NEXT: addi a0, a0, 0x5 # CHECKR-NEXT: addi zero, zero, 0x0 # CHECKR-NEXT: 0000000000000020: R_RISCV_ALIGN *ABS*+0x1c # CHECKR-NEXT: addi zero, zero, 0x0 # CHECKR-NEXT: addi zero, zero, 0x0 # CHECKR-NEXT: addi zero, zero, 0x0 # CHECKR-NEXT: addi zero, zero, 0x0 # CHECKR-NEXT: addi zero, zero, 0x0 # CHECKR-NEXT: addi zero, zero, 0x0 # CHECKR-NEXT: addi a0, a0, 0x6 # CHECKR-NEXT: addi a0, a0, 0x7 # CHECKR-NEXT: addi zero, zero, 0x0 # CHECKR-NEXT: 0000000000000044: R_RISCV_ALIGN *ABS*+0xc # CHECKR-NEXT: addi zero, zero, 0x0 # CHECKR-NEXT: addi zero, zero, 0x0 # CHECKR-NEXT: addi a0, a0, 0x8 # CHECKR-NEXT: addi a0, a0, 0x9 .global _start _start: addi a0, a0, 0x1 a: addi a0, a0, 0x2 b: .balign 16 addi a0, a0, 0x3 c: addi a0, a0, 0x4 addi a0, a0, 0x5 .balign 32 .size a, . - a addi a0, a0, 0x6 addi a0, a0, 0x7 .balign 16 .size b, . - b addi a0, a0, 0x8 .size c, . - c addi a0, a0, 0x9 .size _start, . - _start ## Test another text section. .section .text2,"ax",@progbits d: e: .balign 8 addi a0, a0, 0x1 f: addi a0, a0, 0x2 .balign 32 .size d, . - d addi a0, a0, 0x3 .size e, . - e .size f, . - f ## Test that matching HI20 can be found despite deleted bytes. .section .pcrel,"ax",@progbits .L1: auipc a0, %pcrel_hi(_start) addi a0, a0, %pcrel_lo(.L1) .balign 16 .L2: auipc a0, %pcrel_hi(_start) addi a0, a0, %pcrel_lo(.L1)