158 lines · plain
1# RUN: rm -rf %t && mkdir -p %t2# RUN: llvm-mc -triple=mips64el-unknown-linux -target-abi n32 -filetype=obj -o %t/test_ELF_N32.o %s3# RUN: llc -mtriple=mips64el-unknown-linux -target-abi n32 -filetype=obj -o %t/test_ELF_ExternalFunction_N32.o %S/Inputs/ExternalFunction.ll4# RUN: llvm-rtdyld -triple=mips64el-unknown-linux -verify -map-section test_ELF_N32.o,.text=0x1000 -map-section test_ELF_ExternalFunction_N32.o,.text=0x10000 -check=%s %t/test_ELF_N32.o %t/test_ELF_ExternalFunction_N32.o5 6# RUN: llvm-mc -triple=mips64-unknown-linux -target-abi n32 -filetype=obj -o %t/test_ELF_N32.o %s7# RUN: llc -mtriple=mips64-unknown-linux -target-abi n32 -filetype=obj -o %t/test_ELF_ExternalFunction_N32.o %S/Inputs/ExternalFunction.ll8# RUN: llvm-rtdyld -triple=mips64-unknown-linux -verify -map-section test_ELF_N32.o,.text=0x1000 -map-section test_ELF_ExternalFunction_N32.o,.text=0x10000 -check=%s %t/test_ELF_N32.o %t/test_ELF_ExternalFunction_N32.o9 10 .data11# Test R_MIPS_PC32 relocation.12# rtdyld-check: *{4}(R_MIPS_PC32) = (foo - R_MIPS_PC32)[31:0]13R_MIPS_PC32:14 .word foo-.15# rtdyld-check: *{4}(R_MIPS_PC32 + 4) = (foo - tmp1)[31:0]16tmp1:17 .4byte foo-tmp118 19 .text20 .abicalls21 .section .mdebug.abi64,"",@progbits22 .nan legacy23 .file "ELF_N32_PIC_relocations.ll"24 .text25 .globl bar26 .align 327 .type bar,@function28 .set nomicromips29 .set nomips1630 .ent bar31bar:32 .frame $fp,40,$ra33 .mask 0x00000000,034 .fmask 0x00000000,035 .set noreorder36 .set nomacro37 .set noat38 daddiu $sp, $sp, -4039 sd $ra, 32($sp)40 sd $fp, 24($sp)41 move $fp, $sp42 sd $4, 16($fp)43 lb $2, 0($4)44 sd $4, 8($fp)45 46# Test R_MIPS_26 relocation.47# rtdyld-check: decode_operand(insn1, 0)[27:0] = stub_addr(test_ELF_N32.o/.text, foo)[27:0]48insn1:49 .option pic050 jal foo51 .option pic252 nop53 54# Test R_MIPS_PC16 relocation.55# rtdyld-check: decode_operand(insn2, 1)[17:0] = (foo - insn2)[17:0]56insn2:57 bal foo58 nop59 60 move $sp, $fp61 ld $ra, 32($sp)62 ld $fp, 24($sp)63 daddiu $sp, $sp, 3264 jr $ra65 nop66 .set at67 .set macro68 .set reorder69 .end bar70$func_end0:71 .size bar, ($func_end0)-bar72 73 .globl main74 .align 375 .type main,@function76 .set nomicromips77 .set nomips1678 .ent main79main:80 .frame $fp,32,$ra81 .mask 0x00000000,082 .fmask 0x00000000,083 .set noreorder84 .set nomacro85 .set noat86 daddiu $sp, $sp, -3287 sd $ra, 24($sp)88 sd $fp, 16($sp)89 sd $gp, 8($sp)90 move $fp, $sp91 92# $gp register contains address of the .got section + 0x7FF0. 0x7FF0 is93# the offset of $gp from the beginning of the .got section. Check that we are94# loading address of the page pointer from correct offset. In this case95# the page pointer is the first entry in the .got section, so offset will be96# 0 - 0x7FF0.97# rtdyld-check: decode_operand(insn5, 2)[15:0] = 0x801098#99# Check that the global offset table contains the page pointer.100# rtdyld-check: *{4}(section_addr(test_ELF_N32.o, .got)) = (_str + 0x8000) & 0xffff0000101insn5:102 ld $25, %got_page(_str)($1)103 104# Check the offset of _str from the page pointer.105# rtdyld-check: decode_operand(insn6, 2)[15:0] = _str[15:0]106insn6:107 daddiu $25, $25, %got_ofst(_str)108 109# Check that we are loading address of var from correct offset. In this case110# var is the second entry in the .got section, so offset will be 4 - 0x7FF0.111# rtdyld-check: decode_operand(insn7, 2)[15:0] = 0x8014112#113# Check that the global offset table contains the address of the var.114# rtdyld-check: *{4}(section_addr(test_ELF_N32.o, .got) + 4) = var115insn7:116 ld $2, %got_disp(var)($1)117 sd $25, 0($2)118 119# Check that we are loading address of bar from correct offset. In this case120# bar is the third entry in the .got section, so offset will be 8 - 0x7FF0.121# rtdyld-check: decode_operand(insn8, 2)[15:0] = 0x8018122#123# Check that the global offset table contains the address of the bar.124# rtdyld-check: *{4}(section_addr(test_ELF_N32.o, .got) + 8) = bar125insn8:126 ld $2, %call16(bar)($1)127 128 move $4, $25129 move $gp, $1130 move $25, $2131 jalr $25132 nop133 move $sp, $fp134 ld $gp, 8($sp)135 ld $fp, 16($sp)136 ld $ra, 24($sp)137 daddiu $sp, $sp, 32138 jr $ra139 nop140 .set at141 .set macro142 .set reorder143 .end main144$func_end1:145 .size main, ($func_end1)-main146 147 .type _str,@object148 .section .rodata.str1.1,"aMS",@progbits,1149_str:150 .asciz "test"151 .size _str, 5152 153 .type var,@object154 .comm var,8,8155 156 .section ".note.GNU-stack","",@progbits157 .text158