|
2 | 2 | ## Test that we can handle --emit-relocs while relaxing. |
3 | 3 |
|
4 | 4 | # RUN: llvm-mc --filetype=obj --triple=loongarch32 --mattr=+relax %s -o %t.32.o |
5 | | -# RUN: llvm-mc --filetype=obj --triple=loongarch64 --mattr=+relax %s -o %t.64.o |
| 5 | +# RUN: llvm-mc --filetype=obj --triple=loongarch64 --mattr=+relax --defsym ELF64=1 %s -o %t.64.o |
6 | 6 | # RUN: ld.lld -Ttext=0x10000 -section-start=.got=0x20000 --emit-relocs --relax %t.32.o -o %t.32 |
7 | 7 | # RUN: ld.lld -Ttext=0x10000 -section-start=.got=0x20000 --emit-relocs --relax %t.64.o -o %t.64 |
8 | | -# RUN: llvm-objdump -dr %t.32 | FileCheck %s --check-prefix=RELAX |
9 | | -# RUN: llvm-objdump -dr %t.64 | FileCheck %s --check-prefix=RELAX |
| 8 | +# RUN: llvm-objdump -dr %t.32 | FileCheck %s --check-prefixes=RELAX,RELAX32 |
| 9 | +# RUN: llvm-objdump -dr %t.64 | FileCheck %s --check-prefixes=RELAX,RELAX64 |
10 | 10 |
|
11 | 11 | ## -r should keep original relocations. |
12 | 12 | # RUN: ld.lld --relax -r %t.64.o -o %t.64.r |
|
27 | 27 | # RELAX-NEXT: R_LARCH_RELAX *ABS* |
28 | 28 | # RELAX-NEXT: R_LARCH_PCREL20_S2 _start |
29 | 29 | # RELAX-NEXT: R_LARCH_RELAX *ABS* |
30 | | -# RELAX-NEXT: nop |
31 | | -# RELAX-NEXT: R_LARCH_ALIGN *ABS*+0xc |
32 | | -# RELAX-NEXT: nop |
33 | | -# RELAX-NEXT: ret |
| 30 | +# RELAX32-NEXT: nop |
| 31 | +# RELAX32-NEXT: R_LARCH_ALIGN *ABS*+0xc |
| 32 | +# RELAX32-NEXT: nop |
| 33 | +# RELAX32-NEXT: ret |
| 34 | + |
| 35 | +# RELAX64-NEXT: bl -8 |
| 36 | +# RELAX64-NEXT: R_LARCH_B26 _start |
| 37 | +# RELAX64-NEXT: R_LARCH_RELAX *ABS* |
| 38 | +# RELAX64-NEXT: b -12 |
| 39 | +# RELAX64-NEXT: R_LARCH_B26 _start |
| 40 | +# RELAX64-NEXT: R_LARCH_RELAX *ABS* |
| 41 | +# RELAX64-NEXT: ret |
| 42 | +# RELAX64-NEXT: R_LARCH_ALIGN *ABS*+0xc |
34 | 43 |
|
35 | 44 | # NORELAX: <_start>: |
36 | 45 | # NORELAX-NEXT: pcalau12i $a0, 0 |
|
45 | 54 | # NORELAX-NEXT: ld.d $a0, $a0, 0 |
46 | 55 | # NORELAX-NEXT: R_LARCH_GOT_PC_LO12 _start |
47 | 56 | # NORELAX-NEXT: R_LARCH_RELAX *ABS* |
| 57 | +# NORELAX-NEXT: pcaddu18i $ra, 0 |
| 58 | +# NORELAX-NEXT: R_LARCH_CALL36 _start |
| 59 | +# NORELAX-NEXT: R_LARCH_RELAX *ABS* |
| 60 | +# NORELAX-NEXT: jirl $ra, $ra, -16 |
| 61 | +# NORELAX-NEXT: pcaddu18i $a0, 0 |
| 62 | +# NORELAX-NEXT: R_LARCH_CALL36 _start |
| 63 | +# NORELAX-NEXT: R_LARCH_RELAX *ABS* |
| 64 | +# NORELAX-NEXT: jirl $zero, $a0, -24 |
48 | 65 | # NORELAX-NEXT: ret |
49 | 66 | # NORELAX-NEXT: R_LARCH_ALIGN *ABS*+0xc |
50 | 67 |
|
|
61 | 78 | # CHECKR-NEXT: ld.d $a0, $a0, 0 |
62 | 79 | # CHECKR-NEXT: R_LARCH_GOT_PC_LO12 _start |
63 | 80 | # CHECKR-NEXT: R_LARCH_RELAX *ABS* |
| 81 | +# CHECKR-NEXT: pcaddu18i $ra, 0 |
| 82 | +# CHECKR-NEXT: R_LARCH_CALL36 _start |
| 83 | +# CHECKR-NEXT: R_LARCH_RELAX *ABS* |
| 84 | +# CHECKR-NEXT: jirl $ra, $ra, 0 |
| 85 | +# CHECKR-NEXT: pcaddu18i $a0, 0 |
| 86 | +# CHECKR-NEXT: R_LARCH_CALL36 _start |
| 87 | +# CHECKR-NEXT: R_LARCH_RELAX *ABS* |
| 88 | +# CHECKR-NEXT: jr $a0 |
64 | 89 | # CHECKR-NEXT: nop |
65 | 90 | # CHECKR-NEXT: R_LARCH_ALIGN *ABS*+0xc |
66 | 91 | # CHECKR-NEXT: nop |
|
71 | 96 | _start: |
72 | 97 | la.pcrel $a0, _start |
73 | 98 | la.got $a0, _start |
| 99 | +.ifdef ELF64 |
| 100 | + call36 _start |
| 101 | + tail36 $a0, _start |
| 102 | +.endif |
74 | 103 | .p2align 4 |
75 | 104 | ret |
0 commit comments