145 lines · plain
1# RUN: rm -rf %t && mkdir -p %t2# RUN: llvm-mc --triple=loongarch64 --filetype=obj -o %t/reloc.o %s3# RUN: llvm-rtdyld --triple=loongarch64 --verify --check=%s %t/reloc.o \4# RUN: --map-section reloc.o,.got=0x21f00 \5# RUN: --map-section reloc.o,.sec.large.pc=0x0000000012345000 \6# RUN: --map-section reloc.o,.sec.large.got=0x44433333abcde000 \7# RUN: --map-section reloc.o,.sec.dummy=0x4443333334567111 \8# RUN: --dummy-extern abs=0x0123456789abcdef \9# RUN: --dummy-extern external_data=0x123410 11 .text12 .globl main13 .p2align 214 .type main,@function15main:16## Check R_LARCH_ABS_HI2017# rtdyld-check: *{4}(main) = 0x1513578c18 lu12i.w $t0, %abs_hi20(abs)19## Check R_LARCH_ABS_LO1220# rtdyld-check: *{4}(main + 4) = 0x03b7bd8c21 ori $t0, $t0, %abs_lo12(abs)22## Check R_LARCH_ABS64_LO2023# rtdyld-check: *{4}(main + 8) = 0x1668acec24 lu32i.d $t0, %abs64_lo20(abs)25## Check R_LARCH_ABS64_HI1226# rtdyld-check: *{4}(main + 12) = 0x0300498c27 lu52i.d $t0, $t0, %abs64_hi12(abs)28 ret29 .size main, .-main30 31 .globl local_func32 .p2align 233 .type local_func,@function34local_func:35 ret36 .size local_func, .-local_func37 38 .globl local_func_call2639 .p2align 240local_func_call26:41## Check R_LARCH_B2642# rtdyld-check: decode_operand(local_func_call26, 0)[27:0] = \43# rtdyld-check: (local_func - local_func_call26)[27:0]44 bl local_func45 .size local_func_call26, .-local_func_call2646 47 .globl local_func_call3648 .p2align 249local_func_call36:50## Check R_LARCH_CALL3651# rtdyld-check: decode_operand(local_func_call36, 1)[19:0] = \52# rtdyld-check: ((local_func - local_func_call36) + \53# rtdyld-check: (((local_func - local_func_call36)[17:17]) << 17))[37:18]54# rtdyld-check: decode_operand(local_func_call36 + 4, 2)[17:0] = \55# rtdyld-check: (local_func - local_func_call36)[17:0]56 pcaddu18i $ra, %call36(local_func)57 jirl $ra, $ra, 058 .size local_func_call36, .-local_func_call3659 60 .globl test_pc_hi2061 .p2align 262test_pc_hi20:63## Check R_LARCH_PCALA_HI2064# rtdyld-check: decode_operand(test_pc_hi20, 1)[19:0] = \65# rtdyld-check: (named_data - test_pc_hi20)[31:12] + \66# rtdyld-check: named_data[11:11]67 pcalau12i $a0, %pc_hi20(named_data)68 .size test_pc_hi20, .-test_pc_hi2069 70 .globl test_pc_lo1271 .p2align 272test_pc_lo12:73## Check R_LARCH_PCALA_LO1274# rtdyld-check: decode_operand(test_pc_lo12, 2)[11:0] = \75# rtdyld-check: (named_data)[11:0]76 addi.d $a0, $a0, %pc_lo12(named_data)77 .size test_pc_lo12, .-test_pc_lo1278 79 .globl test_got_pc_hi2080 .p2align 281test_got_pc_hi20:82## Check R_LARCH_GOT_PC_HI2083# rtdyld-check: decode_operand(test_got_pc_hi20, 1)[19:0] = \84# rtdyld-check: (section_addr(reloc.o, .got)[31:12] - \85# rtdyld-check: test_got_pc_hi20[31:12] + \86# rtdyld-check: section_addr(reloc.o, .got)[11:11])87 pcalau12i $a0, %got_pc_hi20(external_data)88 .size test_got_pc_hi20, .-test_got_pc_hi2089 90 .globl test_got_pc_lo1291 .p2align 292test_got_pc_lo12:93## Check R_LARCH_GOT_PC_LO1294# rtdyld-check: decode_operand(test_got_pc_lo12, 2)[11:0] = \95# rtdyld-check: (section_addr(reloc.o, .got)[11:0])96 ld.d $a0, $a0, %got_pc_lo12(external_data)97 .size test_gotoffset12_external, .-test_gotoffset12_external98 99 .globl named_data100 .p2align 4101 .type named_data,@object102named_data:103 .quad 0x2222222222222222104 .quad 0x3333333333333333105 .size named_data, .-named_data106 107 .section .sec.large.pc,"ax"108 .globl test_large_pc109test_large_pc:110## Code after link should be:111## 1a44444d pcalau12i $t1, 139810112## 02c4440c addi.d $t0, $zero, 273113## 1666666c lu32i.d $t0, 209715114## 0311118c lu52i.d $t0, $t0, 1092115 116# rtdyld-check: *{4}(test_large_pc) = 0x1a44444d117 pcalau12i $t1, %pc_hi20(.sec.dummy)118# rtdyld-check: *{4}(test_large_pc + 4) = 0x02c4440c119 addi.d $t0, $zero, %pc_lo12(.sec.dummy)120# rtdyld-check: *{4}(test_large_pc + 8) = 0x1666666c121 lu32i.d $t0, %pc64_lo20(.sec.dummy)122# rtdyld-check: *{4}(test_large_pc + 12) = 0x0311118c123 lu52i.d $t0, $t0, %pc64_hi12(.sec.dummy)124 125 .section .sec.large.got,"ax"126 .globl test_large_got127test_large_got:128## Code after link should be:129## 1aa8688d pcalau12i $t1, 344900130## 02fc000c addi.d $t0, $zero, -256131## 1799996c lu32i.d $t0, -209717132## 032eed8c lu52i.d $t0, $t0, -1093133 134# rtdyld-check: *{4}(test_large_got) = 0x1aa8688d135 pcalau12i $t1, %got_pc_hi20(external_data)136# rtdyld-check: *{4}(test_large_got + 4) = 0x02fc000c137 addi.d $t0, $zero, %got_pc_lo12(external_data)138# rtdyld-check: *{4}(test_large_got + 8) = 0x1799996c139 lu32i.d $t0, %got64_pc_lo20(external_data)140# rtdyld-check: *{4}(test_large_got + 12) = 0x032eed8c141 lu52i.d $t0, $t0, %got64_pc_hi12(external_data)142 143 .section .sec.dummy,"a"144 .word 0145