diff options
author | Lulu Cai <cailulu@loongson.cn> | 2024-01-11 09:45:57 +0800 |
---|---|---|
committer | liuzhensong <liuzhensong@loongson.cn> | 2024-03-05 19:55:33 +0800 |
commit | 4cde4ce70ae49f4ce7fd3de0f44ebe7fb5e2d21c (patch) | |
tree | 94ccb8068bb8ae0ca595742de3a02d859fe641ea | |
parent | 0c7cde4d9a32e0d271940e9c7ac5605bde6ea664 (diff) | |
download | binutils-4cde4ce70ae49f4ce7fd3de0f44ebe7fb5e2d21c.zip binutils-4cde4ce70ae49f4ce7fd3de0f44ebe7fb5e2d21c.tar.gz binutils-4cde4ce70ae49f4ce7fd3de0f44ebe7fb5e2d21c.tar.bz2 |
LoongArch: Add gas testsuit for LA64 relocations
Test the relocation of the LA64 instruction set.
-rw-r--r-- | gas/testsuite/gas/loongarch/relocs_64.d | 144 | ||||
-rw-r--r-- | gas/testsuite/gas/loongarch/relocs_64.s | 109 |
2 files changed, 253 insertions, 0 deletions
diff --git a/gas/testsuite/gas/loongarch/relocs_64.d b/gas/testsuite/gas/loongarch/relocs_64.d new file mode 100644 index 0000000..631137e --- /dev/null +++ b/gas/testsuite/gas/loongarch/relocs_64.d @@ -0,0 +1,144 @@ +#as: -mthin-add-sub +#objdump: -dr +#skip: loongarch32-*-* + +.*: file format .* + + +Disassembly of section .text: + +0+ <.*>: + 0: 4c008ca4 jirl \$a0, \$a1, 140 + 0: R_LARCH_B16 .L1 + 4: 40008880 beqz \$a0, 136 # 8c <.L1> + 4: R_LARCH_B21 .L1 + 8: 50008400 b 132 # 8c <.L1> + 8: R_LARCH_B26 .L1 + c: 14000004 lu12i.w \$a0, 0 + c: R_LARCH_ABS_HI20 .L1 + 10: 038000a4 ori \$a0, \$a1, 0x0 + 10: R_LARCH_ABS_LO12 .L1 + 14: 16000004 lu32i.d \$a0, 0 + 14: R_LARCH_ABS64_LO20 .L1 + 18: 03000085 lu52i.d \$a1, \$a0, 0 + 18: R_LARCH_ABS64_HI12 .L1 + 1c: 1a000004 pcalau12i \$a0, 0 + 1c: R_LARCH_PCALA_HI20 .L1 + 20: 02c00085 addi.d \$a1, \$a0, 0 + 20: R_LARCH_PCALA_LO12 .L1 + 24: 16000004 lu32i.d \$a0, 0 + 24: R_LARCH_PCALA64_LO20 .L1 + 28: 03000085 lu52i.d \$a1, \$a0, 0 + 28: R_LARCH_PCALA64_HI12 .L1 + 2c: 1a000004 pcalau12i \$a0, 0 + 2c: R_LARCH_GOT_PC_HI20 .L1 + 30: 28c00085 ld.d \$a1, \$a0, 0 + 30: R_LARCH_GOT_PC_LO12 .L1 + 34: 16000004 lu32i.d \$a0, 0 + 34: R_LARCH_GOT64_PC_LO20 .L1 + 38: 03000085 lu52i.d \$a1, \$a0, 0 + 38: R_LARCH_GOT64_PC_HI12 .L1 + 3c: 14000004 lu12i.w \$a0, 0 + 3c: R_LARCH_GOT_HI20 .L1 + 40: 03800084 ori \$a0, \$a0, 0x0 + 40: R_LARCH_GOT_LO12 .L1 + 44: 16000004 lu32i.d \$a0, 0 + 44: R_LARCH_GOT64_LO20 .L1 + 48: 03000085 lu52i.d \$a1, \$a0, 0 + 48: R_LARCH_GOT64_HI12 .L1 + 4c: 14000004 lu12i.w \$a0, 0 + 4c: R_LARCH_TLS_LE_HI20 TLSL1 + 50: 03800085 ori \$a1, \$a0, 0x0 + 50: R_LARCH_TLS_LE_LO12 TLSL1 + 54: 16000004 lu32i.d \$a0, 0 + 54: R_LARCH_TLS_LE64_LO20 TLSL1 + 58: 03000085 lu52i.d \$a1, \$a0, 0 + 58: R_LARCH_TLS_LE64_HI12 TLSL1 + 5c: 1a000004 pcalau12i \$a0, 0 + 5c: R_LARCH_TLS_IE_PC_HI20 TLSL1 + 60: 02c00005 li.d \$a1, 0 + 60: R_LARCH_TLS_IE_PC_LO12 TLSL1 + 64: 16000005 lu32i.d \$a1, 0 + 64: R_LARCH_TLS_IE64_PC_LO20 TLSL1 + 68: 030000a5 lu52i.d \$a1, \$a1, 0 + 68: R_LARCH_TLS_IE64_PC_HI12 TLSL1 + 6c: 14000004 lu12i.w \$a0, 0 + 6c: R_LARCH_TLS_IE_HI20 TLSL1 + 70: 03800084 ori \$a0, \$a0, 0x0 + 70: R_LARCH_TLS_IE_LO12 TLSL1 + 74: 16000004 lu32i.d \$a0, 0 + 74: R_LARCH_TLS_IE64_LO20 TLSL1 + 78: 03000084 lu52i.d \$a0, \$a0, 0 + 78: R_LARCH_TLS_IE64_HI12 TLSL1 + 7c: 1a000004 pcalau12i \$a0, 0 + 7c: R_LARCH_TLS_LD_PC_HI20 TLSL1 + 80: 14000004 lu12i.w \$a0, 0 + 80: R_LARCH_TLS_LD_HI20 TLSL1 + 84: 1a000004 pcalau12i \$a0, 0 + 84: R_LARCH_TLS_GD_PC_HI20 TLSL1 + 88: 14000004 lu12i.w \$a0, 0 + 88: R_LARCH_TLS_GD_HI20 TLSL1 + +0+8c <.L1>: + 8c: 00000000 .word 0x00000000 + 8c: R_LARCH_32_PCREL .L2 + +0+90 <.L2>: + ... + 90: R_LARCH_64_PCREL .L3 + +0+98 <.L3>: + 98: 03400000 nop + 9c: 03400000 nop + 9c: R_LARCH_ALIGN .* + a0: 03400000 nop + a4: 03400000 nop + a8: 1800000c pcaddi \$t0, 0 + a8: R_LARCH_PCREL20_S2 .L1 + ac: 1e000001 pcaddu18i \$ra, 0 + ac: R_LARCH_CALL36 a + b0: 4c000021 jirl \$ra, \$ra, 0 + b4: 1a000004 pcalau12i \$a0, 0 + b4: R_LARCH_TLS_DESC_PC_HI20 TLSL1 + b8: 02c000a5 addi.d \$a1, \$a1, 0 + b8: R_LARCH_TLS_DESC_PC_LO12 TLSL1 + bc: 16000005 lu32i.d \$a1, 0 + bc: R_LARCH_TLS_DESC64_PC_LO20 TLSL1 + c0: 030000a5 lu52i.d \$a1, \$a1, 0 + c0: R_LARCH_TLS_DESC64_PC_HI12 TLSL1 + c4: 14000004 lu12i.w \$a0, 0 + c4: R_LARCH_TLS_DESC_HI20 TLSL1 + c8: 03800084 ori \$a0, \$a0, 0x0 + c8: R_LARCH_TLS_DESC_LO12 TLSL1 + cc: 16000004 lu32i.d \$a0, 0 + cc: R_LARCH_TLS_DESC64_LO20 TLSL1 + d0: 03000084 lu52i.d \$a0, \$a0, 0 + d0: R_LARCH_TLS_DESC64_HI12 TLSL1 + d4: 28c00081 ld.d \$ra, \$a0, 0 + d4: R_LARCH_TLS_DESC_LD TLSL1 + d8: 4c000021 jirl \$ra, \$ra, 0 + d8: R_LARCH_TLS_DESC_CALL TLSL1 + dc: 14000004 lu12i.w \$a0, 0 + dc: R_LARCH_TLS_LE_HI20_R TLSL1 + dc: R_LARCH_RELAX \*ABS\* + e0: 001090a5 add.d \$a1, \$a1, \$a0 + e0: R_LARCH_TLS_LE_ADD_R TLSL1 + e0: R_LARCH_RELAX \*ABS\* + e4: 29800085 st.w \$a1, \$a0, 0 + e4: R_LARCH_TLS_LE_LO12_R TLSL1 + e4: R_LARCH_RELAX \*ABS\* + e8: 14000004 lu12i.w \$a0, 0 + e8: R_LARCH_TLS_LE_HI20_R TLSL1 + e8: R_LARCH_RELAX \*ABS\* + ec: 001090a5 add.d \$a1, \$a1, \$a0 + ec: R_LARCH_TLS_LE_ADD_R TLSL1 + ec: R_LARCH_RELAX \*ABS\* + f0: 29800085 st.w \$a1, \$a0, 0 + f0: R_LARCH_TLS_LE_LO12_R TLSL1 + f0: R_LARCH_RELAX \*ABS\* + f4: 18000004 pcaddi \$a0, 0 + f4: R_LARCH_TLS_LD_PCREL20_S2 TLSL1 + f8: 18000004 pcaddi \$a0, 0 + f8: R_LARCH_TLS_GD_PCREL20_S2 TLSL1 + fc: 18000004 pcaddi \$a0, 0 + fc: R_LARCH_TLS_DESC_PCREL20_S2 TLSL1 diff --git a/gas/testsuite/gas/loongarch/relocs_64.s b/gas/testsuite/gas/loongarch/relocs_64.s new file mode 100644 index 0000000..1d1548f --- /dev/null +++ b/gas/testsuite/gas/loongarch/relocs_64.s @@ -0,0 +1,109 @@ +/* b16. */ +jirl $r4,$r5,%b16(.L1) + +/* b21. */ +beqz $r4,%b21(.L1) + +/* b26. */ +b %b26(.L1) + +/* lu12i.w. */ +lu12i.w $r4,%abs_hi20(.L1) + +/* ori */ +ori $r4,$r5,%abs_lo12(.L1) + +/* lu32i.d. */ +lu32i.d $r4,%abs64_lo20(.L1) + +/* lu52i.d. */ +lu52i.d $r5,$r4,%abs64_hi12(.L1) + +pcalau12i $r4,%pc_hi20(.L1) +addi.d $r5,$r4,%pc_lo12(.L1) +lu32i.d $r4,%pc64_lo20(.L1) +lu52i.d $r5,$r4,%pc64_hi12(.L1) + +pcalau12i $r4,%got_pc_hi20(.L1) +ld.d $r5,$r4,%got_pc_lo12(.L1) +lu32i.d $r4,%got64_pc_lo20(.L1) +lu52i.d $r5,$r4,%got64_pc_hi12(.L1) + +lu12i.w $r4,%got_hi20(.L1) +ori $r4,$r4,%got_lo12(.L1) +lu32i.d $r4,%got64_lo20(.L1) +lu52i.d $r5,$r4,%got64_hi12(.L1) + +/* TLS LE. */ +lu12i.w $r4,%le_hi20(TLSL1) +ori $r5,$r4,%le_lo12(TLSL1) +lu32i.d $r4,%le64_lo20(TLSL1) +lu52i.d $r5,$r4,%le64_hi12(TLSL1) + +/* Part of IE relocs. */ +pcalau12i $r4,%ie_pc_hi20(TLSL1) +addi.d $r5,$r0,%ie_pc_lo12(TLSL1) +lu32i.d $r5,%ie64_pc_lo20(TLSL1) +lu52i.d $r5,$r5,%ie64_pc_hi12(TLSL1) + +lu12i.w $r4,%ie_hi20(TLSL1) +ori $r4,$r4,%ie_lo12(TLSL1) +lu32i.d $r4,%ie64_lo20(TLSL1) +lu52i.d $r4,$r4,%ie64_hi12(TLSL1) + +/* Part of LD relocs. */ +pcalau12i $r4,%ld_pc_hi20(TLSL1) +lu12i.w $r4,%ld_hi20(TLSL1) + +/* Part of GD relocs. */ +pcalau12i $r4,%gd_pc_hi20(TLSL1) +lu12i.w $r4,%gd_hi20(TLSL1) + +/* Test insn relocs. */ +.L1: +/* 32-bit PC relative. */ +.4byte .L2-.L1 +.L2: +/* 64-bit PC relative. */ +.8byte .L3-.L2 + +.L3: +nop + +/* R_LARCH_ALIGN. */ +.align 4 + +/* R_LARCH_PCREL20_S2. */ +pcaddi $r12,.L1 + +/* R_LARCH_ADD_CALL36 */ +pcaddu18i $r1, %call36(a) +jirl $r1, $r1, 0 + +/* Part of DESC relocs. */ +pcalau12i $r4,%desc_pc_hi20(TLSL1) +addi.d $r5,$r5,%desc_pc_lo12(TLSL1) +lu32i.d $r5,%desc64_pc_lo20(TLSL1) +lu52i.d $r5,$r5,%desc64_pc_hi12(TLSL1) + +lu12i.w $r4,%desc_hi20(TLSL1) +ori $r4,$r4,%desc_lo12(TLSL1) +lu32i.d $r4,%desc64_lo20(TLSL1) +lu52i.d $r4,$r4,%desc64_hi12(TLSL1) +ld.d $r1,$r4,%desc_ld(TLSL1) +jirl $r1,$r1,%desc_call(TLSL1) + +/* New TLS Insn. */ +lu12i.w $r4,%le_hi20_r(TLSL1) +add.d $r5,$r5,$r4,%le_add_r(TLSL1) +st.w $r5,$r4,%le_lo12_r(TLSL1) + +/* New TLS Insn with addend. */ +lu12i.w $r4,%le_hi20_r(TLSL1) +add.d $r5,$r5,$r4,%le_add_r(TLSL1) +st.w $r5,$r4,%le_lo12_r(TLSL1) + +/* Part of relaxed LD/GD/DESC insn sequence. */ +pcaddi $a0,%ld_pcrel_20(TLSL1) +pcaddi $a0,%gd_pcrel_20(TLSL1) +pcaddi $a0,%desc_pcrel_20(TLSL1) |