xref: /aosp_15_r20/external/llvm/test/MC/Mips/relocation.s (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker// RUN: llvm-mc -triple mips-unknown-linux < %s -show-encoding \
2*9880d681SAndroid Build Coastguard Worker// RUN:     | FileCheck -check-prefixes=ENCBE,FIXUP %s
3*9880d681SAndroid Build Coastguard Worker// RUN: llvm-mc -triple mipsel-unknown-linux < %s -show-encoding \
4*9880d681SAndroid Build Coastguard Worker// RUN:     | FileCheck -check-prefixes=ENCLE,FIXUP %s
5*9880d681SAndroid Build Coastguard Worker// RUN: llvm-mc -filetype=obj -triple mipsel-unknown-linux < %s \
6*9880d681SAndroid Build Coastguard Worker// RUN:     | llvm-readobj -r | FileCheck -check-prefix=RELOC %s
7*9880d681SAndroid Build Coastguard Worker// RUN: llvm-mc -filetype=obj -triple mips-unknown-linux < %s \
8*9880d681SAndroid Build Coastguard Worker// RUN:     | llvm-readobj -sections -section-data \
9*9880d681SAndroid Build Coastguard Worker// RUN:     | FileCheck -check-prefix=DATA %s
10*9880d681SAndroid Build Coastguard Worker
11*9880d681SAndroid Build Coastguard Worker// Test that we produce the correct relocation.
12*9880d681SAndroid Build Coastguard Worker// FIXME: move more relocation only tests here.
13*9880d681SAndroid Build Coastguard Worker
14*9880d681SAndroid Build Coastguard Worker// Check prefixes:
15*9880d681SAndroid Build Coastguard Worker// RELOC - Check the relocation in the object.
16*9880d681SAndroid Build Coastguard Worker// FIXUP - Check the fixup on the instruction.
17*9880d681SAndroid Build Coastguard Worker// ENCBE - Check the big-endian encoding on the instruction.
18*9880d681SAndroid Build Coastguard Worker// ENCLE - Check the little-endian encoding on the instruction.
19*9880d681SAndroid Build Coastguard Worker// ????? - Placeholder. Relocation is defined but the way of generating it is
20*9880d681SAndroid Build Coastguard Worker//         unknown.
21*9880d681SAndroid Build Coastguard Worker// FIXME - Placeholder. Generation method is known but doesn't work.
22*9880d681SAndroid Build Coastguard Worker
23*9880d681SAndroid Build Coastguard Worker// RELOC-LABEL: .rel.text {
24*9880d681SAndroid Build Coastguard Worker// DATA-LABEL: Name: .text
25*9880d681SAndroid Build Coastguard Worker// DATA:       SectionData (
26*9880d681SAndroid Build Coastguard Worker
27*9880d681SAndroid Build Coastguard Worker// DATA-NEXT:  0000: 00000004 00000000 00000004 0C000000
28*9880d681SAndroid Build Coastguard Worker        .short foo                         // RELOC: R_MIPS_16 foo
29*9880d681SAndroid Build Coastguard Worker
30*9880d681SAndroid Build Coastguard Worker        .short bar                         // RELOC: R_MIPS_16 .data
31*9880d681SAndroid Build Coastguard Worker
32*9880d681SAndroid Build Coastguard Workerbaz:    .long foo                          // RELOC: R_MIPS_32 foo
33*9880d681SAndroid Build Coastguard Worker
34*9880d681SAndroid Build Coastguard Worker        .long bar                          // RELOC: R_MIPS_32 .data
35*9880d681SAndroid Build Coastguard Worker
36*9880d681SAndroid Build Coastguard Worker                                           // ?????: R_MIPS_REL32 foo
37*9880d681SAndroid Build Coastguard Worker
38*9880d681SAndroid Build Coastguard Worker        jal foo                            // RELOC: R_MIPS_26 foo
39*9880d681SAndroid Build Coastguard Worker                                           // ENCBE: jal foo # encoding: [0b000011AA,A,A,A]
40*9880d681SAndroid Build Coastguard Worker                                           // ENCLE: jal foo # encoding: [A,A,A,0b000011AA]
41*9880d681SAndroid Build Coastguard Worker                                           // FIXUP: # fixup A - offset: 0, value: foo, kind: fixup_Mips_26
42*9880d681SAndroid Build Coastguard Worker
43*9880d681SAndroid Build Coastguard Worker// The nop from the jal is at 0x0010
44*9880d681SAndroid Build Coastguard Worker// DATA-NEXT:  0010: 00000000 0C000001 00000000 24620000
45*9880d681SAndroid Build Coastguard Worker        jal baz                            // RELOC: R_MIPS_26 .text
46*9880d681SAndroid Build Coastguard Worker                                           // ENCBE: jal baz # encoding: [0b000011AA,A,A,A]
47*9880d681SAndroid Build Coastguard Worker                                           // ENCLE: jal baz # encoding: [A,A,A,0b000011AA]
48*9880d681SAndroid Build Coastguard Worker                                           // FIXUP: # fixup A - offset: 0, value: baz, kind: fixup_Mips_26
49*9880d681SAndroid Build Coastguard Worker
50*9880d681SAndroid Build Coastguard Worker        addiu $2, $3, %hi(foo)             // RELOC: R_MIPS_HI16 foo
51*9880d681SAndroid Build Coastguard Worker                                           // ENCBE: addiu $2, $3, %hi(foo) # encoding: [0x24,0x62,A,A]
52*9880d681SAndroid Build Coastguard Worker                                           // ENCLE: addiu $2, $3, %hi(foo) # encoding: [A,A,0x62,0x24]
53*9880d681SAndroid Build Coastguard Worker                                           // FIXUP: # fixup A - offset: 0, value: %hi(foo), kind: fixup_Mips_HI16
54*9880d681SAndroid Build Coastguard Worker
55*9880d681SAndroid Build Coastguard Worker// DATA-NEXT:  0020: 24620000 24620000 24620004 24620000
56*9880d681SAndroid Build Coastguard Worker        addiu $2, $3, %lo(foo)             // RELOC: R_MIPS_LO16 foo
57*9880d681SAndroid Build Coastguard Worker                                           // ENCBE: addiu $2, $3, %lo(foo) # encoding: [0x24,0x62,A,A]
58*9880d681SAndroid Build Coastguard Worker                                           // ENCLE: addiu $2, $3, %lo(foo) # encoding: [A,A,0x62,0x24]
59*9880d681SAndroid Build Coastguard Worker                                           // FIXUP: # fixup A - offset: 0, value: %lo(foo), kind: fixup_Mips_LO16
60*9880d681SAndroid Build Coastguard Worker
61*9880d681SAndroid Build Coastguard Worker        addiu $2, $3, %hi(bar)             // RELOC: R_MIPS_HI16 .data
62*9880d681SAndroid Build Coastguard Worker                                           // ENCBE: addiu $2, $3, %hi(bar) # encoding: [0x24,0x62,A,A]
63*9880d681SAndroid Build Coastguard Worker                                           // ENCLE: addiu $2, $3, %hi(bar) # encoding: [A,A,0x62,0x24]
64*9880d681SAndroid Build Coastguard Worker                                           // FIXUP: # fixup A - offset: 0, value: %hi(bar), kind: fixup_Mips_HI16
65*9880d681SAndroid Build Coastguard Worker
66*9880d681SAndroid Build Coastguard Worker        addiu $2, $3, %lo(bar)             // RELOC: R_MIPS_LO16 .data
67*9880d681SAndroid Build Coastguard Worker                                           // ENCBE: addiu $2, $3, %lo(bar) # encoding: [0x24,0x62,A,A]
68*9880d681SAndroid Build Coastguard Worker                                           // ENCLE: addiu $2, $3, %lo(bar) # encoding: [A,A,0x62,0x24]
69*9880d681SAndroid Build Coastguard Worker                                           // FIXUP: # fixup A - offset: 0, value: %lo(bar), kind: fixup_Mips_LO16
70*9880d681SAndroid Build Coastguard Worker
71*9880d681SAndroid Build Coastguard Worker        addiu $2, $3, %gp_rel(foo)         // RELOC: R_MIPS_GPREL16 foo
72*9880d681SAndroid Build Coastguard Worker                                           // ENCBE: addiu $2, $3, %gp_rel(foo) # encoding: [0x24,0x62,A,A]
73*9880d681SAndroid Build Coastguard Worker                                           // ENCLE: addiu $2, $3, %gp_rel(foo) # encoding: [A,A,0x62,0x24]
74*9880d681SAndroid Build Coastguard Worker                                           // FIXUP: # fixup A - offset: 0, value: %gp_rel(foo), kind: fixup_Mips_GPREL
75*9880d681SAndroid Build Coastguard Worker
76*9880d681SAndroid Build Coastguard Worker// DATA-NEXT:  0030: 24620004 24620000 24420000 24620000
77*9880d681SAndroid Build Coastguard Worker        addiu $2, $3, %gp_rel(bar)         // RELOC: R_MIPS_GPREL16 .data
78*9880d681SAndroid Build Coastguard Worker                                           // ENCBE: addiu $2, $3, %gp_rel(bar) # encoding: [0x24,0x62,A,A]
79*9880d681SAndroid Build Coastguard Worker                                           // ENCLE: addiu $2, $3, %gp_rel(bar) # encoding: [A,A,0x62,0x24]
80*9880d681SAndroid Build Coastguard Worker                                           // FIXUP: # fixup A - offset: 0, value: %gp_rel(bar), kind: fixup_Mips_GPREL
81*9880d681SAndroid Build Coastguard Worker
82*9880d681SAndroid Build Coastguard Worker                                           // ?????: R_MIPS_LITERAL foo
83*9880d681SAndroid Build Coastguard Worker
84*9880d681SAndroid Build Coastguard Worker        addiu $2, $3, %got(foo)            // RELOC: R_MIPS_GOT16 foo
85*9880d681SAndroid Build Coastguard Worker                                           // ENCBE: addiu $2, $3, %got(foo) # encoding: [0x24,0x62,A,A]
86*9880d681SAndroid Build Coastguard Worker                                           // ENCLE: addiu $2, $3, %got(foo) # encoding: [A,A,0x62,0x24]
87*9880d681SAndroid Build Coastguard Worker                                           // FIXUP: # fixup A - offset: 0, value: %got(foo), kind: fixup_Mips_GOT
88*9880d681SAndroid Build Coastguard Worker        // %got requires a %lo pair
89*9880d681SAndroid Build Coastguard Worker        addiu $2, $2, %lo(foo)
90*9880d681SAndroid Build Coastguard Worker
91*9880d681SAndroid Build Coastguard Worker        addiu $2, $3, %got(bar)            // RELOC: R_MIPS_GOT16 .data
92*9880d681SAndroid Build Coastguard Worker                                           // ENCBE: addiu $2, $3, %got(bar) # encoding: [0x24,0x62,A,A]
93*9880d681SAndroid Build Coastguard Worker                                           // ENCLE: addiu $2, $3, %got(bar) # encoding: [A,A,0x62,0x24]
94*9880d681SAndroid Build Coastguard Worker                                           // FIXUP: # fixup A - offset: 0, value: %got(bar), kind: fixup_Mips_GOT
95*9880d681SAndroid Build Coastguard Worker// DATA-NEXT:  0040: 24420004 0000FFBE 24620000
96*9880d681SAndroid Build Coastguard Worker        // %got requires a %lo pair
97*9880d681SAndroid Build Coastguard Worker        addiu $2, $2, %lo(bar)
98*9880d681SAndroid Build Coastguard Worker
99*9880d681SAndroid Build Coastguard Worker        .short foo-.                       // RELOC: R_MIPS_PC16 foo
100*9880d681SAndroid Build Coastguard Worker        .short baz-.                       // RELOC-NOT: R_MIPS_PC16
101*9880d681SAndroid Build Coastguard Worker
102*9880d681SAndroid Build Coastguard Worker        addiu $2, $3, %call16(foo)         // RELOC: R_MIPS_CALL16 foo
103*9880d681SAndroid Build Coastguard Worker                                           // ENCBE: addiu $2, $3, %call16(foo) # encoding: [0x24,0x62,A,A]
104*9880d681SAndroid Build Coastguard Worker                                           // ENCLE: addiu $2, $3, %call16(foo) # encoding: [A,A,0x62,0x24]
105*9880d681SAndroid Build Coastguard Worker                                           // FIXUP: # fixup A - offset: 0, value: %call16(foo), kind: fixup_Mips_CALL16
106*9880d681SAndroid Build Coastguard Worker
107*9880d681SAndroid Build Coastguard Worker	.p2align 4
108*9880d681SAndroid Build Coastguard Worker// DATA-NEXT:  0050: 00000000 00000000 00000000 00000004
109*9880d681SAndroid Build Coastguard Worker        .quad foo                          // RELOC: R_MIPS_64 foo
110*9880d681SAndroid Build Coastguard Worker        .quad bar                          // RELOC: R_MIPS_64 .data
111*9880d681SAndroid Build Coastguard Worker
112*9880d681SAndroid Build Coastguard Worker                                           // ?????: R_MIPS_GPREL32 foo
113*9880d681SAndroid Build Coastguard Worker                                           // ?????: R_MIPS_UNUSED1 foo
114*9880d681SAndroid Build Coastguard Worker                                           // ?????: R_MIPS_UNUSED2 foo
115*9880d681SAndroid Build Coastguard Worker                                           // ?????: R_MIPS_UNUSED3 foo
116*9880d681SAndroid Build Coastguard Worker                                           // ?????: R_MIPS_SHIFT5 foo
117*9880d681SAndroid Build Coastguard Worker                                           // ?????: R_MIPS_SHIFT6 foo
118*9880d681SAndroid Build Coastguard Worker
119*9880d681SAndroid Build Coastguard Worker// DATA-NEXT:  0060: 24620000 24620000 24620000 24620000
120*9880d681SAndroid Build Coastguard Worker        addiu $2, $3, %got_disp(foo)       // RELOC: R_MIPS_GOT_DISP foo
121*9880d681SAndroid Build Coastguard Worker                                           // ENCBE: addiu $2, $3, %got_disp(foo) # encoding: [0x24,0x62,A,A]
122*9880d681SAndroid Build Coastguard Worker                                           // ENCLE: addiu $2, $3, %got_disp(foo) # encoding: [A,A,0x62,0x24]
123*9880d681SAndroid Build Coastguard Worker                                           // FIXUP: # fixup A - offset: 0, value: %got_disp(foo), kind: fixup_Mips_GOT_DISP
124*9880d681SAndroid Build Coastguard Worker
125*9880d681SAndroid Build Coastguard Worker        addiu $2, $3, %got_page(foo)       // RELOC: R_MIPS_GOT_PAGE foo
126*9880d681SAndroid Build Coastguard Worker                                           // ENCBE: addiu $2, $3, %got_page(foo) # encoding: [0x24,0x62,A,A]
127*9880d681SAndroid Build Coastguard Worker                                           // ENCLE: addiu $2, $3, %got_page(foo) # encoding: [A,A,0x62,0x24]
128*9880d681SAndroid Build Coastguard Worker                                           // FIXUP: # fixup A - offset: 0, value: %got_page(foo), kind: fixup_Mips_GOT_PAGE
129*9880d681SAndroid Build Coastguard Worker
130*9880d681SAndroid Build Coastguard Worker        addiu $2, $3, %got_ofst(foo)       // RELOC: R_MIPS_GOT_OFST foo
131*9880d681SAndroid Build Coastguard Worker                                           // ENCBE: addiu $2, $3, %got_ofst(foo) # encoding: [0x24,0x62,A,A]
132*9880d681SAndroid Build Coastguard Worker                                           // ENCLE: addiu $2, $3, %got_ofst(foo) # encoding: [A,A,0x62,0x24]
133*9880d681SAndroid Build Coastguard Worker                                           // FIXUP: # fixup A - offset: 0, value: %got_ofst(foo), kind: fixup_Mips_GOT_OFST
134*9880d681SAndroid Build Coastguard Worker
135*9880d681SAndroid Build Coastguard Worker        addiu $2, $3, %got_hi(foo)         // RELOC: R_MIPS_GOT_HI16 foo
136*9880d681SAndroid Build Coastguard Worker                                           // ENCBE: addiu $2, $3, %got_hi(foo) # encoding: [0x24,0x62,A,A]
137*9880d681SAndroid Build Coastguard Worker                                           // ENCLE: addiu $2, $3, %got_hi(foo) # encoding: [A,A,0x62,0x24]
138*9880d681SAndroid Build Coastguard Worker                                           // FIXUP: # fixup A - offset: 0, value: %got_hi(foo), kind: fixup_Mips_GOT_HI16
139*9880d681SAndroid Build Coastguard Worker
140*9880d681SAndroid Build Coastguard Worker// DATA-NEXT:  0070: 24620000 64620000 64620000 24620000
141*9880d681SAndroid Build Coastguard Worker        addiu $2, $3, %got_lo(foo)         // RELOC: R_MIPS_GOT_LO16 foo
142*9880d681SAndroid Build Coastguard Worker                                           // ENCBE: addiu $2, $3, %got_lo(foo) # encoding: [0x24,0x62,A,A]
143*9880d681SAndroid Build Coastguard Worker                                           // ENCLE: addiu $2, $3, %got_lo(foo) # encoding: [A,A,0x62,0x24]
144*9880d681SAndroid Build Coastguard Worker                                           // FIXUP: # fixup A - offset: 0, value: %got_lo(foo), kind: fixup_Mips_GOT_LO16
145*9880d681SAndroid Build Coastguard Worker
146*9880d681SAndroid Build Coastguard Worker//      addiu $2, $3, %neg(foo)            // FIXME: R_MIPS_SUB foo
147*9880d681SAndroid Build Coastguard Worker                                           // ?????: R_MIPS_INSERT_A
148*9880d681SAndroid Build Coastguard Worker                                           // ?????: R_MIPS_INSERT_B
149*9880d681SAndroid Build Coastguard Worker                                           // ?????: R_MIPS_DELETE
150*9880d681SAndroid Build Coastguard Worker
151*9880d681SAndroid Build Coastguard Worker        .set mips64
152*9880d681SAndroid Build Coastguard Worker        daddiu $2, $3, %higher(foo)        // RELOC: R_MIPS_HIGHER foo
153*9880d681SAndroid Build Coastguard Worker                                           // ENCBE: daddiu $2, $3, %higher(foo) # encoding: [0x64,0x62,A,A]
154*9880d681SAndroid Build Coastguard Worker                                           // ENCLE: daddiu $2, $3, %higher(foo) # encoding: [A,A,0x62,0x64]
155*9880d681SAndroid Build Coastguard Worker                                           // FIXUP: # fixup A - offset: 0, value: %higher(foo), kind: fixup_Mips_HIGHER
156*9880d681SAndroid Build Coastguard Worker
157*9880d681SAndroid Build Coastguard Worker        daddiu $2, $3, %highest(foo)       // RELOC: R_MIPS_HIGHEST foo
158*9880d681SAndroid Build Coastguard Worker                                           // ENCBE: daddiu $2, $3, %highest(foo) # encoding: [0x64,0x62,A,A]
159*9880d681SAndroid Build Coastguard Worker                                           // ENCLE: daddiu $2, $3, %highest(foo) # encoding: [A,A,0x62,0x64]
160*9880d681SAndroid Build Coastguard Worker                                           // FIXUP: # fixup A - offset: 0, value: %highest(foo), kind: fixup_Mips_HIGHEST
161*9880d681SAndroid Build Coastguard Worker
162*9880d681SAndroid Build Coastguard Worker        .set mips0
163*9880d681SAndroid Build Coastguard Worker        addiu $2, $3, %call_hi(foo)        // RELOC: R_MIPS_CALL_HI16 foo
164*9880d681SAndroid Build Coastguard Worker                                           // ENCBE: addiu $2, $3, %call_hi(foo) # encoding: [0x24,0x62,A,A]
165*9880d681SAndroid Build Coastguard Worker                                           // ENCLE: addiu $2, $3, %call_hi(foo) # encoding: [A,A,0x62,0x24]
166*9880d681SAndroid Build Coastguard Worker                                           // FIXUP: # fixup A - offset: 0, value: %call_hi(foo), kind: fixup_Mips_CALL_HI16
167*9880d681SAndroid Build Coastguard Worker
168*9880d681SAndroid Build Coastguard Worker// DATA-NEXT:  0080: 24620000 24620000 24620000 24620000
169*9880d681SAndroid Build Coastguard Worker        addiu $2, $3, %call_lo(foo)        // RELOC: R_MIPS_CALL_LO16 foo
170*9880d681SAndroid Build Coastguard Worker                                           // ENCBE: addiu $2, $3, %call_lo(foo) # encoding: [0x24,0x62,A,A]
171*9880d681SAndroid Build Coastguard Worker                                           // ENCLE: addiu $2, $3, %call_lo(foo) # encoding: [A,A,0x62,0x24]
172*9880d681SAndroid Build Coastguard Worker                                           // FIXUP: # fixup A - offset: 0, value: %call_lo(foo), kind: fixup_Mips_CALL_LO16
173*9880d681SAndroid Build Coastguard Worker
174*9880d681SAndroid Build Coastguard Worker                                           // ?????: R_MIPS_SCN_DISP foo
175*9880d681SAndroid Build Coastguard Worker                                           // ?????: R_MIPS_REL16 foo
176*9880d681SAndroid Build Coastguard Worker                                           // ?????: R_MIPS_ADD_IMMEDIATE foo
177*9880d681SAndroid Build Coastguard Worker                                           // ?????: R_MIPS_PJUMP foo
178*9880d681SAndroid Build Coastguard Worker                                           // ?????: R_MIPS_RELGOT foo
179*9880d681SAndroid Build Coastguard Worker//      jalr $25                           // ?????: R_MIPS_JALR foo
180*9880d681SAndroid Build Coastguard Worker
181*9880d681SAndroid Build Coastguard Worker                                           // ?????: R_MIPS_TLS_DTPMOD32 foo
182*9880d681SAndroid Build Coastguard Worker//      .dtprelword foo                    // FIXME: R_MIPS_TLS_DTPREL32 foo
183*9880d681SAndroid Build Coastguard Worker                                           // ?????: R_MIPS_TLS_DTPMOD64 foo
184*9880d681SAndroid Build Coastguard Worker//      .dtpreldword foo                   // FIXME: R_MIPS_TLS_DTPREL64 foo
185*9880d681SAndroid Build Coastguard Worker        addiu $2, $3, %tlsgd(foo)          // RELOC: R_MIPS_TLS_GD foo
186*9880d681SAndroid Build Coastguard Worker                                           // ENCBE: addiu $2, $3, %tlsgd(foo) # encoding: [0x24,0x62,A,A]
187*9880d681SAndroid Build Coastguard Worker                                           // ENCLE: addiu $2, $3, %tlsgd(foo) # encoding: [A,A,0x62,0x24]
188*9880d681SAndroid Build Coastguard Worker                                           // FIXUP: # fixup A - offset: 0, value: %tlsgd(foo), kind: fixup_Mips_TLSGD
189*9880d681SAndroid Build Coastguard Worker
190*9880d681SAndroid Build Coastguard Worker        addiu $2, $3, %tlsldm(foo)         // RELOC: R_MIPS_TLS_LDM foo
191*9880d681SAndroid Build Coastguard Worker                                           // ENCBE: addiu $2, $3, %tlsldm(foo) # encoding: [0x24,0x62,A,A]
192*9880d681SAndroid Build Coastguard Worker                                           // ENCLE: addiu $2, $3, %tlsldm(foo) # encoding: [A,A,0x62,0x24]
193*9880d681SAndroid Build Coastguard Worker                                           // FIXUP: # fixup A - offset: 0, value: %tlsldm(foo), kind: fixup_Mips_TLSLDM
194*9880d681SAndroid Build Coastguard Worker
195*9880d681SAndroid Build Coastguard Worker        addiu $2, $3, %dtprel_hi(foo)      // RELOC: R_MIPS_TLS_DTPREL_HI16 foo
196*9880d681SAndroid Build Coastguard Worker                                           // ENCBE: addiu $2, $3, %dtprel_hi(foo) # encoding: [0x24,0x62,A,A]
197*9880d681SAndroid Build Coastguard Worker                                           // ENCLE: addiu $2, $3, %dtprel_hi(foo) # encoding: [A,A,0x62,0x24]
198*9880d681SAndroid Build Coastguard Worker                                           // FIXUP: # fixup A - offset: 0, value: %dtprel_hi(foo), kind: fixup_Mips_DTPREL_HI
199*9880d681SAndroid Build Coastguard Worker
200*9880d681SAndroid Build Coastguard Worker        addiu $2, $3, %dtprel_lo(foo)      // RELOC: R_MIPS_TLS_DTPREL_LO16 foo
201*9880d681SAndroid Build Coastguard Worker                                           // ENCBE: addiu $2, $3, %dtprel_lo(foo) # encoding: [0x24,0x62,A,A]
202*9880d681SAndroid Build Coastguard Worker                                           // ENCLE: addiu $2, $3, %dtprel_lo(foo) # encoding: [A,A,0x62,0x24]
203*9880d681SAndroid Build Coastguard Worker                                           // FIXUP: # fixup A - offset: 0, value: %dtprel_lo(foo), kind: fixup_Mips_DTPREL_LO
204*9880d681SAndroid Build Coastguard Worker
205*9880d681SAndroid Build Coastguard Worker        addiu $2, $3, %gottprel(foo)       // RELOC: R_MIPS_TLS_GOTTPREL foo
206*9880d681SAndroid Build Coastguard Worker                                           // ENCBE: addiu $2, $3, %gottprel(foo) # encoding: [0x24,0x62,A,A]
207*9880d681SAndroid Build Coastguard Worker                                           // ENCLE: addiu $2, $3, %gottprel(foo) # encoding: [A,A,0x62,0x24]
208*9880d681SAndroid Build Coastguard Worker                                           // FIXUP: # fixup A - offset: 0, value: %gottprel(foo), kind: fixup_Mips_GOTTPREL
209*9880d681SAndroid Build Coastguard Worker
210*9880d681SAndroid Build Coastguard Worker//      .tprelword foo                     // FIXME: R_MIPS_TLS_TPREL32 foo
211*9880d681SAndroid Build Coastguard Worker//      .tpreldword foo                    // FIXME: R_MIPS_TLS_TPREL64 foo
212*9880d681SAndroid Build Coastguard Worker        addiu $2, $3, %tprel_hi(foo)       // RELOC: R_MIPS_TLS_TPREL_HI16 foo
213*9880d681SAndroid Build Coastguard Worker                                           // ENCBE: addiu $2, $3, %tprel_hi(foo) # encoding: [0x24,0x62,A,A]
214*9880d681SAndroid Build Coastguard Worker                                           // ENCLE: addiu $2, $3, %tprel_hi(foo) # encoding: [A,A,0x62,0x24]
215*9880d681SAndroid Build Coastguard Worker                                           // FIXUP: # fixup A - offset: 0, value: %tprel_hi(foo), kind: fixup_Mips_TPREL_HI
216*9880d681SAndroid Build Coastguard Worker
217*9880d681SAndroid Build Coastguard Worker        addiu $2, $3, %tprel_lo(foo)       // RELOC: R_MIPS_TLS_TPREL_LO16 foo
218*9880d681SAndroid Build Coastguard Worker                                           // ENCBE: addiu $2, $3, %tprel_lo(foo) # encoding: [0x24,0x62,A,A]
219*9880d681SAndroid Build Coastguard Worker                                           // ENCLE: addiu $2, $3, %tprel_lo(foo) # encoding: [A,A,0x62,0x24]
220*9880d681SAndroid Build Coastguard Worker                                           // FIXUP: # fixup A - offset: 0, value: %tprel_lo(foo), kind: fixup_Mips_TPREL_LO
221*9880d681SAndroid Build Coastguard Worker
222*9880d681SAndroid Build Coastguard Worker                                           // ?????: R_MIPS_GLOB_DAT foo
223*9880d681SAndroid Build Coastguard Worker        .set mips32r6
224*9880d681SAndroid Build Coastguard Worker        beqzc $2, foo                      // RELOC: R_MIPS_PC21_S2 foo
225*9880d681SAndroid Build Coastguard Worker                                           // ENCBE: beqzc $2, foo # encoding: [0xd8,0b010AAAAA,A,A]
226*9880d681SAndroid Build Coastguard Worker                                           // ENCLE: beqzc $2, foo # encoding: [A,A,0b010AAAAA,0xd8]
227*9880d681SAndroid Build Coastguard Worker                                           // FIXUP: # fixup A - offset: 0, value: foo-4, kind: fixup_MIPS_PC21_S2
228*9880d681SAndroid Build Coastguard Worker
229*9880d681SAndroid Build Coastguard Worker        bc foo                             // RELOC: R_MIPS_PC26_S2 foo
230*9880d681SAndroid Build Coastguard Worker                                           // ENCBE: bc foo # encoding: [0b110010AA,A,A,A]
231*9880d681SAndroid Build Coastguard Worker                                           // ENCLE: bc foo # encoding: [A,A,A,0b110010AA]
232*9880d681SAndroid Build Coastguard Worker                                           // FIXUP: # fixup A - offset: 0, value: foo-4, kind: fixup_MIPS_PC26_S2
233*9880d681SAndroid Build Coastguard Worker
234*9880d681SAndroid Build Coastguard Worker        .set mips64r6
235*9880d681SAndroid Build Coastguard Worker        ldpc $2, foo                       // RELOC: R_MIPS_PC18_S3 foo
236*9880d681SAndroid Build Coastguard Worker                                           // ENCBE: ldpc $2, foo # encoding: [0xec,0b010110AA,A,A]
237*9880d681SAndroid Build Coastguard Worker                                           // ENCLE: ldpc $2, foo # encoding: [A,A,0b010110AA,0xec]
238*9880d681SAndroid Build Coastguard Worker                                           // FIXUP: # fixup A - offset: 0, value: foo, kind: fixup_Mips_PC18_S3
239*9880d681SAndroid Build Coastguard Worker
240*9880d681SAndroid Build Coastguard Worker        .set mips32r6
241*9880d681SAndroid Build Coastguard Worker        lwpc $2, foo                       // RELOC: R_MIPS_PC19_S2 foo
242*9880d681SAndroid Build Coastguard Worker                                           // ENCBE: lwpc $2, foo # encoding: [0xec,0b01001AAA,A,A]
243*9880d681SAndroid Build Coastguard Worker                                           // ENCLE: lwpc $2, foo # encoding: [A,A,0b01001AAA,0xec]
244*9880d681SAndroid Build Coastguard Worker                                           // FIXUP: # fixup A - offset: 0, value: foo, kind: fixup_MIPS_PC19_S2
245*9880d681SAndroid Build Coastguard Worker
246*9880d681SAndroid Build Coastguard Worker        addiu $2, $3, %pcrel_hi(foo)       // RELOC: R_MIPS_PCHI16 foo
247*9880d681SAndroid Build Coastguard Worker                                           // ENCBE: addiu $2, $3, %pcrel_hi(foo) # encoding: [0x24,0x62,A,A]
248*9880d681SAndroid Build Coastguard Worker                                           // ENCLE: addiu $2, $3, %pcrel_hi(foo) # encoding: [A,A,0x62,0x24]
249*9880d681SAndroid Build Coastguard Worker                                           // FIXUP: # fixup A - offset: 0, value: %pcrel_hi(foo), kind: fixup_MIPS_PCHI16
250*9880d681SAndroid Build Coastguard Worker
251*9880d681SAndroid Build Coastguard Worker        addiu $2, $3, %pcrel_lo(foo)       // RELOC: R_MIPS_PCLO16 foo
252*9880d681SAndroid Build Coastguard Worker                                           // ENCBE: addiu $2, $3, %pcrel_lo(foo) # encoding: [0x24,0x62,A,A]
253*9880d681SAndroid Build Coastguard Worker                                           // ENCLE: addiu $2, $3, %pcrel_lo(foo) # encoding: [A,A,0x62,0x24]
254*9880d681SAndroid Build Coastguard Worker                                           // FIXUP: # fixup A - offset: 0, value: %pcrel_lo(foo), kind: fixup_MIPS_PCLO16
255*9880d681SAndroid Build Coastguard Worker
256*9880d681SAndroid Build Coastguard Worker        .set mips0
257*9880d681SAndroid Build Coastguard Worker                                           // FIXME: R_MIPS16_*
258*9880d681SAndroid Build Coastguard Worker                                           // ?????: R_MIPS_COPY foo
259*9880d681SAndroid Build Coastguard Worker                                           // ?????: R_MIPS_JUMP_SLOT foo
260*9880d681SAndroid Build Coastguard Worker                                           // FIXME: R_MICROMIPS_*
261*9880d681SAndroid Build Coastguard Worker        .long foo-.                        // RELOC: R_MIPS_PC32 foo
262*9880d681SAndroid Build Coastguard Worker//      .ehword foo                        // FIXME: R_MIPS_EH foo
263*9880d681SAndroid Build Coastguard Worker
264*9880d681SAndroid Build Coastguard Worker	.data
265*9880d681SAndroid Build Coastguard Worker	.word 0
266*9880d681SAndroid Build Coastguard Workerbar:
267*9880d681SAndroid Build Coastguard Worker	.word 1
268*9880d681SAndroid Build Coastguard Worker
269*9880d681SAndroid Build Coastguard Worker        .section .text_mm, "ax", @progbits
270*9880d681SAndroid Build Coastguard Worker        .set micromips
271*9880d681SAndroid Build Coastguard Workermm:
272*9880d681SAndroid Build Coastguard Worker// RELOC-LABEL: .rel.text_mm {
273*9880d681SAndroid Build Coastguard Worker// ENCBE-LABEL: mm:
274*9880d681SAndroid Build Coastguard Worker// ENCLE-LABEL: mm:
275*9880d681SAndroid Build Coastguard Worker// DATA-LABEL: Name: .text_mm
276*9880d681SAndroid Build Coastguard Worker// DATA:       SectionData (
277*9880d681SAndroid Build Coastguard Worker
278*9880d681SAndroid Build Coastguard Worker// DATA-NEXT:  0000: 30430000 30420000 30430000 30420004
279*9880d681SAndroid Build Coastguard Worker        addiu $2, $3, %got(foo_mm)         // RELOC: R_MICROMIPS_GOT16 foo_mm
280*9880d681SAndroid Build Coastguard Worker                                           // ENCBE: addiu $2, $3, %got(foo_mm) # encoding: [0x30,0x43,A,A]
281*9880d681SAndroid Build Coastguard Worker                                           // The placement of the 'A' annotations is incorrect. They use 32-bit little endian instead of 2x 16-bit little endian.
282*9880d681SAndroid Build Coastguard Worker                                           // ENCLE: addiu $2, $3, %got(foo_mm) # encoding: [0x43'A',0x30'A',0x00,0x00]
283*9880d681SAndroid Build Coastguard Worker                                           // FIXUP: # fixup A - offset: 0, value: %got(foo_mm), kind: fixup_MICROMIPS_GOT16
284*9880d681SAndroid Build Coastguard Worker        // %got requires a %lo pair
285*9880d681SAndroid Build Coastguard Worker        addiu $2, $2, %lo(foo_mm)          // RELOC: R_MICROMIPS_LO16 foo_mm
286*9880d681SAndroid Build Coastguard Worker                                           // ENCBE: addiu $2, $2, %lo(foo_mm) # encoding: [0x30,0x42,A,A]
287*9880d681SAndroid Build Coastguard Worker                                           // ENCLE: addiu $2, $2, %lo(foo_mm) # encoding: [0x42'A',0x30'A',0x00,0x00]
288*9880d681SAndroid Build Coastguard Worker                                           // FIXUP: # fixup A - offset: 0, value: %lo(foo_mm), kind: fixup_MICROMIPS_LO16
289*9880d681SAndroid Build Coastguard Worker
290*9880d681SAndroid Build Coastguard Workerfoo_mm:
291*9880d681SAndroid Build Coastguard Worker        addiu $2, $3, %got(bar)            // RELOC: R_MICROMIPS_GOT16 .data
292*9880d681SAndroid Build Coastguard Worker                                           // ENCBE: addiu $2, $3, %got(bar) # encoding: [0x30,0x43,A,A]
293*9880d681SAndroid Build Coastguard Worker                                           // ENCLE: addiu $2, $3, %got(bar) # encoding: [0x43'A',0x30'A',0x00,0x00]
294*9880d681SAndroid Build Coastguard Worker                                           // FIXUP: # fixup A - offset: 0, value: %got(bar), kind: fixup_MICROMIPS_GOT16
295*9880d681SAndroid Build Coastguard Worker        // %got requires a %lo pair
296*9880d681SAndroid Build Coastguard Worker        addiu $2, $2, %lo(bar)             // RELOC: R_MICROMIPS_LO16 .data
297*9880d681SAndroid Build Coastguard Worker                                           // ENCBE: addiu $2, $2, %lo(bar) # encoding: [0x30,0x42,A,A]
298*9880d681SAndroid Build Coastguard Worker                                           // ENCLE: addiu $2, $2, %lo(bar) # encoding: [0x42'A',0x30'A',0x00,0x00]
299*9880d681SAndroid Build Coastguard Worker                                           // FIXUP: # fixup A - offset: 0, value: %lo(bar), kind: fixup_MICROMIPS_LO16
300*9880d681SAndroid Build Coastguard Worker
301*9880d681SAndroid Build Coastguard Worker// DATA-NEXT:  0010: 30430000 30420004 30430001 30420030
302*9880d681SAndroid Build Coastguard Worker        addiu $2, $3, %got(baz)            // RELOC: R_MICROMIPS_GOT16 .text
303*9880d681SAndroid Build Coastguard Worker                                           // ENCBE: addiu $2, $3, %got(baz) # encoding: [0x30,0x43,A,A]
304*9880d681SAndroid Build Coastguard Worker                                           // The placement of the 'A' annotations is incorrect. They use 32-bit little endian instead of 2x 16-bit little endian.
305*9880d681SAndroid Build Coastguard Worker                                           // ENCLE: addiu $2, $3, %got(baz) # encoding: [0x43'A',0x30'A',0x00,0x00]
306*9880d681SAndroid Build Coastguard Worker                                           // FIXUP: # fixup A - offset: 0, value: %got(baz), kind: fixup_MICROMIPS_GOT16
307*9880d681SAndroid Build Coastguard Worker        // %got requires a %lo pair
308*9880d681SAndroid Build Coastguard Worker        addiu $2, $2, %lo(baz)             // RELOC: R_MICROMIPS_LO16 .text
309*9880d681SAndroid Build Coastguard Worker                                           // ENCBE: addiu $2, $2, %lo(baz) # encoding: [0x30,0x42,A,A]
310*9880d681SAndroid Build Coastguard Worker                                           // ENCLE: addiu $2, $2, %lo(baz) # encoding: [0x42'A',0x30'A',0x00,0x00]
311*9880d681SAndroid Build Coastguard Worker                                           // FIXUP: # fixup A - offset: 0, value: %lo(baz), kind: fixup_MICROMIPS_LO16
312*9880d681SAndroid Build Coastguard Worker
313*9880d681SAndroid Build Coastguard Worker        addiu $2, $3, %got(long_mm)        // RELOC: R_MICROMIPS_GOT16 .text
314*9880d681SAndroid Build Coastguard Worker                                           // ENCBE: addiu $2, $3, %got(long_mm) # encoding: [0x30,0x43,A,A]
315*9880d681SAndroid Build Coastguard Worker                                           // The placement of the 'A' annotations is incorrect. They use 32-bit little endian instead of 2x 16-bit little endian.
316*9880d681SAndroid Build Coastguard Worker                                           // ENCLE: addiu $2, $3, %got(long_mm) # encoding: [0x43'A',0x30'A',0x00,0x00]
317*9880d681SAndroid Build Coastguard Worker                                           // FIXUP: # fixup A - offset: 0, value: %got(long_mm), kind: fixup_MICROMIPS_GOT16
318*9880d681SAndroid Build Coastguard Worker        // %got requires a %lo pair
319*9880d681SAndroid Build Coastguard Worker        addiu $2, $2, %lo(long_mm)         // RELOC: R_MICROMIPS_LO16 .text
320*9880d681SAndroid Build Coastguard Worker                                           // ENCBE: addiu $2, $2, %lo(long_mm) # encoding: [0x30,0x42,A,A]
321*9880d681SAndroid Build Coastguard Worker                                           // ENCLE: addiu $2, $2, %lo(long_mm) # encoding: [0x42'A',0x30'A',0x00,0x00]
322*9880d681SAndroid Build Coastguard Worker                                           // FIXUP: # fixup A - offset: 0, value: %lo(long_mm), kind: fixup_MICROMIPS_LO16
323*9880d681SAndroid Build Coastguard Worker
324*9880d681SAndroid Build Coastguard Worker// DATA-NEXT:  0020: 30430000 30420000 30430000 30420004
325*9880d681SAndroid Build Coastguard Worker        addiu $2, $3, %hi(foo_mm)          // RELOC: R_MICROMIPS_HI16 foo_mm
326*9880d681SAndroid Build Coastguard Worker                                           // ENCBE: addiu $2, $3, %hi(foo_mm) # encoding: [0x30,0x43,A,A]
327*9880d681SAndroid Build Coastguard Worker                                           // ENCLE: addiu $2, $3, %hi(foo_mm) # encoding: [0x43'A',0x30'A',0x00,0x00]
328*9880d681SAndroid Build Coastguard Worker                                           // FIXUP: # fixup A - offset: 0, value: %hi(foo_mm), kind: fixup_MICROMIPS_HI16
329*9880d681SAndroid Build Coastguard Worker
330*9880d681SAndroid Build Coastguard Worker        addiu $2, $2, %lo(foo_mm)          // RELOC: R_MICROMIPS_LO16 foo_mm
331*9880d681SAndroid Build Coastguard Worker                                           // ENCBE: addiu $2, $2, %lo(foo_mm) # encoding: [0x30,0x42,A,A]
332*9880d681SAndroid Build Coastguard Worker                                           // ENCLE: addiu $2, $2, %lo(foo_mm) # encoding: [0x42'A',0x30'A',0x00,0x00]
333*9880d681SAndroid Build Coastguard Worker                                           // FIXUP: # fixup A - offset: 0, value: %lo(foo_mm), kind: fixup_MICROMIPS_LO16
334*9880d681SAndroid Build Coastguard Worker
335*9880d681SAndroid Build Coastguard Worker        addiu $2, $3, %hi(bar)             // RELOC: R_MICROMIPS_HI16 .data
336*9880d681SAndroid Build Coastguard Worker                                           // ENCBE: addiu $2, $3, %hi(bar) # encoding: [0x30,0x43,A,A]
337*9880d681SAndroid Build Coastguard Worker                                           // ENCLE: addiu $2, $3, %hi(bar) # encoding: [0x43'A',0x30'A',0x00,0x00]
338*9880d681SAndroid Build Coastguard Worker                                           // FIXUP: # fixup A - offset: 0, value: %hi(bar), kind: fixup_MICROMIPS_HI16
339*9880d681SAndroid Build Coastguard Worker
340*9880d681SAndroid Build Coastguard Worker        addiu $2, $2, %lo(bar)             // RELOC: R_MICROMIPS_LO16 .data
341*9880d681SAndroid Build Coastguard Worker                                           // ENCBE: addiu $2, $2, %lo(bar) # encoding: [0x30,0x42,A,A]
342*9880d681SAndroid Build Coastguard Worker                                           // ENCLE: addiu $2, $2, %lo(bar) # encoding: [0x42'A',0x30'A',0x00,0x00]
343*9880d681SAndroid Build Coastguard Worker                                           // FIXUP: # fixup A - offset: 0, value: %lo(bar), kind: fixup_MICROMIPS_LO16
344*9880d681SAndroid Build Coastguard Worker
345*9880d681SAndroid Build Coastguard Worker        .space 65536, 0
346*9880d681SAndroid Build Coastguard Workerlong_mm:
347