# REQUIRES: riscv # RUN: rm -rf %t && split-file %s %t && cd %t # RUN: llvm-mc -filetype=obj -triple=riscv64 -mattr=+c,+relax a.s -o a.o # RUN: ld.lld -T lds a.o -o a # RUN: llvm-objdump -d --no-show-raw-insn -M no-aliases a | FileCheck %s ## Unsure whether this needs a diagnostic. GNU ld allows this. # RUN: ld.lld -T lds -pie a.o -o a.pie # RUN: llvm-objdump -d --no-show-raw-insn -M no-aliases a.pie | FileCheck %s # RUN: ld.lld -T lds -pie -z notext -z ifunc-noplt a.o -o a.ifunc-noplt # RUN: llvm-objdump -d --no-show-raw-insn -M no-aliases a.ifunc-noplt | FileCheck %s --check-prefix=CHECK2 # CHECK-LABEL: <_start>: # CHECK-NEXT: jal zero, 0x8 # CHECK-NEXT: jal zero, 0x8 # CHECK-NEXT: jal ra, 0x8 # CHECK-NEXT: auipc t1, 0xfff00 # CHECK-NEXT: jalr zero, -0x4(t1) # CHECK-EMPTY: # CHECK-LABEL: <.mid>: # CHECK-NEXT: jal zero, 0x101000 # CHECK-NEXT: c.j 0x101000 # CHECK-EMPTY: # CHECK2-LABEL: <.mid>: # CHECK2-NEXT: auipc t1, 0x0 # CHECK2-NEXT: jalr zero, 0x0(t1) # CHECK2-NEXT: auipc t1, 0x0 # CHECK2-NEXT: jalr zero, 0x0(t1) # CHECK2-EMPTY: #--- a.s .global _start, ifunc _start: jump abs, t2 jump abs, t3 call abs tail abs # not relaxed .section .mid,"ax",@progbits .balign 16 tail ifunc@plt # not relaxed tail ifunc@plt .type ifunc, @gnu_indirect_function ifunc: ret #--- lds SECTIONS { .text 0x100000 : { *(.text) } .mid 0x100800 : { *(.mid) } .iplt 0x101000 : { *(.iplt) } } abs = 8;