138 lines · plain
1# RUN: rm -rf %t && mkdir -p %t2# RUN: llvm-mc --triple=loongarch32 --filetype=obj -o %t/elf_reloc.o %s3# RUN: llvm-jitlink --noexec \4# RUN: --abs external_data=0xdeadbeef \5# RUN: --abs external_func=0xcafef00d \6# RUN: --check %s %t/elf_reloc.o7 .text8 9 .globl main10 .p2align 211 .type main,@function12main:13 ret14 15 .size main, .-main16 17## Check R_LARCH_B26 relocation of a local function call.18 19# jitlink-check: decode_operand(local_func_call26, 0)[27:0] = \20# jitlink-check: (local_func - local_func_call26)[27:0]21# jitlink-check: decode_operand(local_func_jump26, 0)[27:0] = \22# jitlink-check: (local_func - local_func_jump26)[27:0]23 .globl local_func24 .p2align 225 .type local_func,@function26local_func:27 ret28 .size local_func, .-local_func29 30 .globl local_func_call2631 .p2align 232local_func_call26:33 bl local_func34 .size local_func_call26, .-local_func_call2635 36 .globl local_func_jump2637 .p2align 238local_func_jump26:39 b local_func40 .size local_func_jump26, .-local_func_jump2641 42## Check R_LARCH_PCALA_HI20 / R_LARCH_PCALA_LO12 relocation of a local symbol.43 44# jitlink-check: decode_operand(test_pcalau12i_pcrel, 1)[19:0] = \45# jitlink-check: (named_data - test_pcalau12i_pcrel)[31:12] + \46# jitlink-check: named_data[11:11]47# jitlink-check: decode_operand(test_addi_pcrel_lo12, 2)[11:0] = \48# jitlink-check: (named_data)[11:0]49 .globl test_pcalau12i_pcrel50 .p2align 251test_pcalau12i_pcrel:52 pcalau12i $a0, %pc_hi20(named_data)53 .size test_pcalau12i_pcrel, .-test_pcalau12i_pcrel54 55 .globl test_addi_pcrel_lo1256 .p2align 257test_addi_pcrel_lo12:58 addi.w $a0, $a0, %pc_lo12(named_data)59 .size test_addi_pcrel_lo12, .-test_addi_pcrel_lo1260 61## Check that calls/jumps to external functions trigger the generation of stubs62## and GOT entries.63 64# jitlink-check: *{4}(got_addr(elf_reloc.o, external_func)) = external_func65# jitlink-check: decode_operand(test_external_call, 0) = \66# jitlink-check: (stub_addr(elf_reloc.o, external_func) - \67# jitlink-check: test_external_call)[27:0]68# jitlink-check: decode_operand(test_external_jump, 0) = \69# jitlink-check: (stub_addr(elf_reloc.o, external_func) - \70# jitlink-check: test_external_jump)[27:0]71 .globl test_external_call72 .p2align 273test_external_call:74 bl external_func75 .size test_external_call, .-test_external_call76 77 .globl test_external_jump78 .p2align 279test_external_jump:80 b external_func81 .size test_external_jump, .-test_external_jump82 83## Check R_LARCH_GOT_PC_HI20 / R_LARCH_GOT_PC_LO12 handling with a reference to84## an external symbol. Validate both the reference to the GOT entry, and also85## the content of the GOT entry.86 87# jitlink-check: *{4}(got_addr(elf_reloc.o, external_data)) = external_data88# jitlink-check: decode_operand(test_gotpage_external, 1)[19:0] = \89# jitlink-check: (got_addr(elf_reloc.o, external_data)[31:12] - \90# jitlink-check: test_gotpage_external[31:12] + \91# jitlink-check: got_addr(elf_reloc.o, external_data)[11:11])[19:0]92# jitlink-check: decode_operand(test_gotoffset12_external, 2)[11:0] = \93# jitlink-check: got_addr(elf_reloc.o, external_data)[11:0]94 .globl test_gotpage_external95 .p2align 296test_gotpage_external:97 pcalau12i $a0, %got_pc_hi20(external_data)98 .size test_gotpage_external, .-test_gotpage_external99 100 .globl test_gotoffset12_external101 .p2align 2102test_gotoffset12_external:103 ld.w $a0, $a0, %got_pc_lo12(external_data)104 .size test_gotoffset12_external, .-test_gotoffset12_external105 106## Check R_LARCH_B16 relocation for compare and branch instructions.107 108# jitlink-check: decode_operand(test_br16, 2)[17:0] = \109# jitlink-check: (test_br16_target - test_br16)[17:0]110 .globl test_br16, test_br16_target111 .p2align 2112test_br16:113 beq $t1, $t2, %b16(test_br16_target)114 .skip (1 << 16)115test_br16_target:116 .size test_br16, .-test_br16117 118## Check R_LARCH_B21 relocation for compare and branch instructions.119 120# jitlink-check: decode_operand(test_br21, 1)[22:0] = \121# jitlink-check: (test_br21_target - test_br21)[22:0]122 .globl test_br21, test_br21_target123 .p2align 2124test_br21:125 beqz $t1, %b21(test_br21_target)126 .skip (1 << 21)127test_br21_target:128 .size test_br21, .-test_br21129 130 131 .globl named_data132 .p2align 4133 .type named_data,@object134named_data:135 .quad 0x2222222222222222136 .quad 0x3333333333333333137 .size named_data, .-named_data138