1 # RUN: llvm-mc -triple=mips64el-unknown-linux -relocation-model=pic -code-model=small -filetype=obj -o %T/test_ELF_Mips64N64.o %s
2 # RUN: llc -mtriple=mips64el-unknown-linux -relocation-model=pic -filetype=obj -o %T/test_ELF_ExternalFunction_Mips64N64.o %S/Inputs/ExternalFunction.ll
3 # RUN: llvm-rtdyld -triple=mips64el-unknown-linux -verify -map-section test_ELF_Mips64N64.o,.text=0x1000 -map-section test_ELF_ExternalFunction_Mips64N64.o,.text=0x10000 -check=%s %/T/test_ELF_Mips64N64.o %T/test_ELF_ExternalFunction_Mips64N64.o
5 # RUN: llvm-mc -triple=mips64-unknown-linux -relocation-model=pic -code-model=small -filetype=obj -o %T/test_ELF_Mips64N64.o %s
6 # RUN: llc -mtriple=mips64-unknown-linux -relocation-model=pic -filetype=obj -o %T/test_ELF_ExternalFunction_Mips64N64.o %S/Inputs/ExternalFunction.ll
7 # RUN: llvm-rtdyld -triple=mips64-unknown-linux -verify -map-section test_ELF_Mips64N64.o,.text=0x1000 -map-section test_ELF_ExternalFunction_Mips64N64.o,.text=0x10000 -check=%s %/T/test_ELF_Mips64N64.o %T/test_ELF_ExternalFunction_Mips64N64.o
10 # Test R_MIPS_PC32 relocation.
11 # rtdyld-check: *{4}(R_MIPS_PC32) = (foo - R_MIPS_PC32)[31:0]
14 # rtdyld-check: *{4}(R_MIPS_PC32 + 4) = (foo - tmp1)[31:0]
20 .section .mdebug.abi64,"",@progbits
22 .file "ELF_Mips64N64_PIC_relocations.ll"
45 # Test R_MIPS_26 relocation.
46 # rtdyld-check: decode_operand(insn1, 0)[27:0] = foo[27:0]
53 # Test R_MIPS_PC16 relocation.
54 # rtdyld-check: decode_operand(insn2, 1)[17:0] = (foo - insn2)[17:0]
70 .size bar, ($func_end0)-bar
91 # Check upper 16-bits of offset between the address of main function
92 # and the global offset table.
93 # rtdyld-check: decode_operand(insn3, 1)[15:0] = ((section_addr(test_ELF_Mips64N64.o, .got) + 0x7ff0) - main + 0x8000)[31:16]
95 lui $1, %hi(%neg(%gp_rel(main)))
98 # Check lower 16-bits of offset between the address of main function
99 # and the global offset table.
100 # rtdyld-check: decode_operand(insn4, 2)[15:0] = ((section_addr(test_ELF_Mips64N64.o, .got) + 0x7ff0) - main)[15:0]
102 daddiu $1, $1, %lo(%neg(%gp_rel(main)))
105 # $gp register contains address of the .got section + 0x7FF0. 0x7FF0 is
106 # the offset of $gp from the beginning of the .got section. Check that we are
107 # loading address of the page pointer from correct offset. In this case
108 # the page pointer is the first entry in the .got section, so offset will be
110 # rtdyld-check: decode_operand(insn5, 2)[15:0] = 0x8010
112 # Check that the global offset table contains the page pointer.
113 # rtdyld-check: *{8}(section_addr(test_ELF_Mips64N64.o, .got)) = (_str + 0x8000) & 0xffffffffffff0000
115 ld $25, %got_page(_str)($1)
117 # Check the offset of _str from the page pointer.
118 # rtdyld-check: decode_operand(insn6, 2)[15:0] = _str[15:0]
120 daddiu $25, $25, %got_ofst(_str)
122 # Check that we are loading address of var from correct offset. In this case
123 # var is the second entry in the .got section, so offset will be 8 - 0x7FF0.
124 # rtdyld-check: decode_operand(insn7, 2)[15:0] = 0x8018
126 # Check that the global offset table contains the address of the var.
127 # rtdyld-check: *{8}(section_addr(test_ELF_Mips64N64.o, .got) + 8) = var
129 ld $2, %got_disp(var)($1)
132 # Check that we are loading address of bar from correct offset. In this case
133 # bar is the third entry in the .got section, so offset will be 16 - 0x7FF0.
134 # rtdyld-check: decode_operand(insn8, 2)[15:0] = 0x8020
136 # Check that the global offset table contains the address of the bar.
137 # rtdyld-check: *{8}(section_addr(test_ELF_Mips64N64.o, .got) + 16) = bar
139 ld $2, %call16(bar)($1)
158 .size main, ($func_end1)-main
161 .section .rodata.str1.1,"aMS",@progbits,1
169 .section ".note.GNU-stack","",@progbits