1# REQUIRES: riscv 2## Don't forget to update st_value(foo) when foo is defined in another relocatable object file. 3 4# RUN: rm -rf %t && split-file %s %t && cd %t 5# RUN: llvm-mc -filetype=obj -triple=riscv64 -mattr=+relax a.s -o a.o 6# RUN: llvm-mc -filetype=obj -triple=riscv64 -mattr=+relax b.s -o b.o 7# RUN: llvm-mc -filetype=obj -triple=riscv64 -mattr=+relax w.s -o w.o 8# RUN: llvm-mc -filetype=obj -triple=riscv64 -mattr=+relax w2.s -o w2.o 9# RUN: llvm-mc -filetype=obj -triple=riscv64 -mattr=+relax call_foo.s -o call_foo.o 10 11# RUN: ld.lld -r b.o w.o -o bw.o 12# RUN: ld.lld -Ttext=0x10000 a.o bw.o --wrap=foo -o 1 13# RUN: llvm-objdump -d --no-show-raw-insn 1 | FileCheck %s 14 15# RUN: ld.lld -r a.o b.o -o ab.o 16# RUN: ld.lld -Ttext=0x10000 ab.o w.o --wrap=foo -o 2 17# RUN: llvm-objdump -d --no-show-raw-insn 2 | FileCheck %s 18 19# RUN: ld.lld -Ttext=0x10000 w2.o call_foo.o --wrap=foo -o 3 20# RUN: llvm-objdump -d --no-show-raw-insn 3 | FileCheck %s --check-prefix=CHECK2 21 22# CHECK-LABEL: <_start>: 23# CHECK-NEXT: 10000: jal {{.*}} <__wrap_foo> 24# CHECK-EMPTY: 25# CHECK-NEXT: <foo>: 26# CHECK-NEXT: 10004: jal {{.*}} <__wrap_foo> 27# CHECK-EMPTY: 28# CHECK-NEXT: <__wrap_foo>: 29# CHECK-NEXT: 10008: jal {{.*}} <foo> 30 31# CHECK2-LABEL: <_start>: 32# CHECK2-NEXT: jal {{.*}} <call_foo> 33# CHECK2-EMPTY: 34# CHECK2-NEXT: <__wrap_foo>: 35# CHECK2-NEXT: ret 36# CHECK2-EMPTY: 37# CHECK2-NEXT: <call_foo>: 38# CHECK2-NEXT: jal {{.*}} <__wrap_foo> 39 40#--- a.s 41.globl _start 42_start: 43 call foo 44 45#--- b.s 46.globl foo 47foo: 48 call __wrap_foo 49 50#--- w.s 51.globl __wrap_foo 52__wrap_foo: 53 call __real_foo 54 55#--- w2.s 56.globl _start, __wrap_foo 57_start: 58 call call_foo 59 60__wrap_foo: 61 ret 62 63#--- call_foo.s 64.globl call_foo 65call_foo: 66 call foo 67