# REQUIRES: mips # Check LA25 stubs creation with caller in different Output Section to callee. # This stub code is necessary when non-PIC code calls PIC function. # RUN: llvm-mc -filetype=obj -triple=mips-unknown-linux \ # RUN: %p/Inputs/mips-fpic.s -o %t-fpic.o # RUN: llvm-mc -filetype=obj -triple=mips-unknown-linux \ # RUN: %p/Inputs/mips-fnpic.s -o %t-fnpic.o # RUN: ld.lld -r %t-fpic.o %t-fnpic.o -o %t-sto-pic.o # RUN: llvm-mc -filetype=obj -triple=mips-unknown-linux \ # RUN: %p/Inputs/mips-pic.s -o %t-pic.o # RUN: llvm-mc -filetype=obj -triple=mips-unknown-linux %s -o %t-npic.o # RUN: ld.lld %t-npic.o %t-pic.o %t-sto-pic.o -o %t.exe # RUN: llvm-objdump -d --no-show-raw-insn --print-imm-hex %t.exe | FileCheck %s # CHECK: Disassembly of section .text: # CHECK-EMPTY: # CHECK-NEXT: <__LA25Thunk_foo1a>: # CHECK-NEXT: lui $25, 0x2 # CHECK-NEXT: j {{.*}} # CHECK-NEXT: addiu $25, $25, {{.*}} # CHECK: <__LA25Thunk_foo1b>: # CHECK-NEXT: lui $25, 0x2 # CHECK-NEXT: j {{.*}} # CHECK-NEXT: addiu $25, $25, {{.*}} # CHECK: : # CHECK-NEXT: nop # CHECK: : # CHECK-NEXT: nop # CHECK: <__LA25Thunk_foo2>: # CHECK-NEXT: lui $25, 0x2 # CHECK-NEXT: j {{.*}} # CHECK-NEXT: addiu $25, $25, {{.*}} # CHECK: : # CHECK-NEXT: nop # CHECK: <__LA25Thunk_fpic>: # CHECK-NEXT: lui $25, 0x2 # CHECK-NEXT: j {{.*}} # CHECK-NEXT: addiu $25, $25, {{.*}} # CHECK: : # CHECK-NEXT: nop # CHECK: : # CHECK-NEXT: nop # CHECK-EMPTY: # CHECK-NEXT: Disassembly of section .differentos: # CHECK-EMPTY: # CHECK-NEXT: <__start>: # CHECK-NEXT: jal {{.*}} <__LA25Thunk_foo1a> # CHECK-NEXT: nop # CHECK-NEXT: jal {{.*}} <__LA25Thunk_foo2> # CHECK-NEXT: nop # CHECK-NEXT: jal {{.*}} <__LA25Thunk_foo1b> # CHECK-NEXT: nop # CHECK-NEXT: jal {{.*}} <__LA25Thunk_foo2> # CHECK-NEXT: nop # CHECK-NEXT: jal {{.*}} <__LA25Thunk_fpic> # CHECK-NEXT: nop # CHECK-NEXT: jal {{.*}} .section .differentos, "ax", %progbits .globl __start __start: jal foo1a jal foo2 jal foo1b jal foo2 jal fpic jal fnpic