105 lines · plain
1# REQUIRES: mips2# Check LA25 stubs creation. This stub code is necessary when3# non-PIC code calls PIC function.4 5# RUN: echo "SECTIONS { \6# RUN: . = 0x20000; .text ALIGN(0x100) : { *(.text) *(.text.*) } \7# RUN: }" > %t.script8 9# RUN: llvm-mc -filetype=obj -triple=mips-unknown-linux -mcpu=mips32r2 \10# RUN: %p/Inputs/mips-fpic.s -o %t-fpic.o11# RUN: llvm-mc -filetype=obj -triple=mips-unknown-linux -mcpu=mips32r2 \12# RUN: %p/Inputs/mips-fnpic.s -o %t-fnpic.o13# RUN: ld.lld -r %t-fpic.o %t-fnpic.o -o %t-sto-pic-r2.o14# RUN: llvm-mc -filetype=obj -triple=mips-unknown-linux -mcpu=mips32r2 \15# RUN: %p/Inputs/mips-pic.s -o %t-pic-r2.o16# RUN: llvm-mc -filetype=obj -triple=mips-unknown-linux -mcpu=mips32r2 \17# RUN: %s -o %t-npic-r2.o18# RUN: ld.lld %t-npic-r2.o %t-pic-r2.o %t-sto-pic-r2.o \19# RUN: -script %t.script -o %t-r2.exe20# RUN: llvm-objdump --no-print-imm-hex -d --no-show-raw-insn %t-r2.exe \21# RUN: | FileCheck --check-prefixes=CHECK,R2 %s22 23# RUN: llvm-mc -filetype=obj -triple=mips-unknown-linux -mcpu=mips32r6 \24# RUN: %p/Inputs/mips-fpic.s -o %t-fpic.o25# RUN: llvm-mc -filetype=obj -triple=mips-unknown-linux -mcpu=mips32r6 \26# RUN: %p/Inputs/mips-fnpic.s -o %t-fnpic.o27# RUN: ld.lld -r %t-fpic.o %t-fnpic.o -o %t-sto-pic-r6.o28# RUN: llvm-mc -filetype=obj -triple=mips-unknown-linux -mcpu=mips32r6 \29# RUN: %p/Inputs/mips-pic.s -o %t-pic-r6.o30# RUN: llvm-mc -filetype=obj -triple=mips-unknown-linux -mcpu=mips32r6 \31# RUN: %s -o %t-npic-r6.o32# RUN: ld.lld %t-npic-r6.o %t-pic-r6.o %t-sto-pic-r6.o \33# RUN: -script %t.script -o %t-r6.exe34# RUN: llvm-objdump --no-print-imm-hex -d --no-show-raw-insn %t-r6.exe \35# RUN: | FileCheck --check-prefixes=CHECK,R6 %s36 37# CHECK: Disassembly of section .text:38# CHECK-EMPTY:39# CHECK-NEXT: <__start>:40# CHECK-NEXT: 20100: jal {{.*}} <__LA25Thunk_foo1a>41# CHECK-NEXT: nop42# CHECK-NEXT: jal {{.*}} <__LA25Thunk_foo2>43# CHECK-NEXT: nop44# CHECK-NEXT: jal {{.*}} <__LA25Thunk_foo1b>45# CHECK-NEXT: nop46# CHECK-NEXT: jal {{.*}} <__LA25Thunk_foo2>47# CHECK-NEXT: nop48# CHECK-NEXT: jal {{.*}} <__LA25Thunk_fpic>49# CHECK-NEXT: nop50# CHECK-NEXT: jal {{.*}} <fnpic>51# CHECK-NEXT: nop52 53# CHECK: <__LA25Thunk_fpic>:54# R2: 20130: lui $25, 255# R6: 20130: aui $25, $zero, 256# CHECK-NEXT: j {{.*}} <fpic>57# CHECK-NEXT: addiu $25, $25, 32058# CHECK-NEXT: nop59 60# CHECK: <fpic>:61# CHECK-NEXT: 20140: nop62 63# CHECK: <fnpic>:64# CHECK-NEXT: 20150: nop65 66# CHECK: <__LA25Thunk_foo1a>:67# R2: 20154: lui $25, 268# R6: 20154: aui $25, $zero, 269# CHECK: j {{.*}} <foo1a>70# CHECK-NEXT: addiu $25, $25, 38471# CHECK-NEXT: nop72 73# CHECK: <__LA25Thunk_foo1b>:74# R2: 20164: lui $25, 275# R6: aui $25, $zero, 276# CHECK-NEXT: j {{.*}} <foo1b>77# CHECK-NEXT: addiu $25, $25, 38878# CHECK-NEXT: nop79 80# CHECK: <foo1a>:81# CHECK-NEXT: 20180: nop82 83# CHECK: <foo1b>:84# CHECK-NEXT: 20184: nop85 86# CHECK: <__LA25Thunk_foo2>:87# R2: 20188: lui $25, 288# R6: aui $25, $zero, 289# CHECK-NEXT: j {{.*}} <foo2>90# CHECK-NEXT: addiu $25, $25, 41691# CHECK-NEXT: nop92 93# CHECK: <foo2>:94# CHECK-NEXT: 201a0: nop95 96 .text97 .globl __start98__start:99 jal foo1a100 jal foo2101 jal foo1b102 jal foo2103 jal fpic104 jal fnpic105