1 // RUN
: llvm-mc
-triple mips-unknown-linux
< %s
-show-encoding \
2 // RUN
: | FileCheck
-check-prefixes
=ENCBE
,FIXUP
%s
3 // RUN
: llvm-mc
-triple mipsel-unknown-linux
< %s
-show-encoding \
4 // RUN
: | FileCheck
-check-prefixes
=ENCLE
,FIXUP
%s
5 // RUN
: llvm-mc
-filetype
=obj
-triple mipsel-unknown-linux
< %s \
6 // RUN
: | llvm-readobj
-r
- | FileCheck
-check-prefix
=RELOC
%s
7 // RUN
: llvm-mc
-filetype
=obj
-triple mips-unknown-linux
< %s \
8 // RUN
: | llvm-readobj
--sections
--section-data
- \
9 // RUN
: | FileCheck
-check-prefix
=DATA
%s
11 // Test that we produce the correct relocation.
12 // FIXME
: move more relocation only tests here.
15 // RELOC
- Check the relocation in the object.
16 // FIXUP
- Check the fixup on the instruction.
17 // ENCBE
- Check the big-endian encoding on the instruction.
18 // ENCLE
- Check the little-endian encoding on the instruction.
19 // ?????
- Placeholder. Relocation is defined but the way of generating it is
21 // FIXME
- Placeholder. Generation method is known but doesn
't work.
23 // RELOC-LABEL: .rel.text {
24 // DATA-LABEL: Name: .text
25 // DATA: SectionData (
27 // DATA-NEXT: 0000: 00000004 00000000 00000004 0C000000
28 .short foo // RELOC: R_MIPS_16 foo
30 .short bar // RELOC: R_MIPS_16 .data
32 baz: .long foo // RELOC: R_MIPS_32 foo
34 .long bar // RELOC: R_MIPS_32 .data
36 // ?????: R_MIPS_REL32 foo
38 jal foo // RELOC: R_MIPS_26 foo
39 // ENCBE: jal foo # encoding: [0b000011AA,A,A,A]
40 // ENCLE: jal foo # encoding: [A,A,A,0b000011AA]
41 // FIXUP: # fixup A - offset: 0, value: foo, kind: fixup_Mips_26
43 // The nop from the jal is at 0x0010
44 // DATA-NEXT: 0010: 00000000 0C000001 00000000 24620000
45 jal baz // RELOC: R_MIPS_26 .text
46 // ENCBE: jal baz # encoding: [0b000011AA,A,A,A]
47 // ENCLE: jal baz # encoding: [A,A,A,0b000011AA]
48 // FIXUP: # fixup A - offset: 0, value: baz, kind: fixup_Mips_26
50 addiu $2, $3, %hi(foo) // RELOC: R_MIPS_HI16 foo
51 // ENCBE: addiu $2, $3, %hi(foo) # encoding: [0x24,0x62,A,A]
52 // ENCLE: addiu $2, $3, %hi(foo) # encoding: [A,A,0x62,0x24]
53 // FIXUP: # fixup A - offset: 0, value: %hi(foo), kind: fixup_Mips_HI16
55 // DATA-NEXT: 0020: 24620000 24620000 24620004 24620000
56 addiu $2, $3, %lo(foo) // RELOC: R_MIPS_LO16 foo
57 // ENCBE: addiu $2, $3, %lo(foo) # encoding: [0x24,0x62,A,A]
58 // ENCLE: addiu $2, $3, %lo(foo) # encoding: [A,A,0x62,0x24]
59 // FIXUP: # fixup A - offset: 0, value: %lo(foo), kind: fixup_Mips_LO16
61 addiu $2, $3, %hi(bar) // RELOC: R_MIPS_HI16 .data
62 // ENCBE: addiu $2, $3, %hi(bar) # encoding: [0x24,0x62,A,A]
63 // ENCLE: addiu $2, $3, %hi(bar) # encoding: [A,A,0x62,0x24]
64 // FIXUP: # fixup A - offset: 0, value: %hi(bar), kind: fixup_Mips_HI16
66 addiu $2, $3, %lo(bar) // RELOC: R_MIPS_LO16 .data
67 // ENCBE: addiu $2, $3, %lo(bar) # encoding: [0x24,0x62,A,A]
68 // ENCLE: addiu $2, $3, %lo(bar) # encoding: [A,A,0x62,0x24]
69 // FIXUP: # fixup A - offset: 0, value: %lo(bar), kind: fixup_Mips_LO16
71 addiu $2, $3, %gp_rel(foo) // RELOC: R_MIPS_GPREL16 foo
72 // ENCBE: addiu $2, $3, %gp_rel(foo) # encoding: [0x24,0x62,A,A]
73 // ENCLE: addiu $2, $3, %gp_rel(foo) # encoding: [A,A,0x62,0x24]
74 // FIXUP: # fixup A - offset: 0, value: %gp_rel(foo), kind: fixup_Mips_GPREL
76 // DATA-NEXT: 0030: 24620004 24620000 24420000 24620000
77 addiu $2, $3, %gp_rel(bar) // RELOC: R_MIPS_GPREL16 .data
78 // ENCBE: addiu $2, $3, %gp_rel(bar) # encoding: [0x24,0x62,A,A]
79 // ENCLE: addiu $2, $3, %gp_rel(bar) # encoding: [A,A,0x62,0x24]
80 // FIXUP: # fixup A - offset: 0, value: %gp_rel(bar), kind: fixup_Mips_GPREL
82 // ?????: R_MIPS_LITERAL foo
84 addiu $2, $3, %got(foo) // RELOC: R_MIPS_GOT16 foo
85 // ENCBE: addiu $2, $3, %got(foo) # encoding: [0x24,0x62,A,A]
86 // ENCLE: addiu $2, $3, %got(foo) # encoding: [A,A,0x62,0x24]
87 // FIXUP: # fixup A - offset: 0, value: %got(foo), kind: fixup_Mips_GOT
88 // %got requires a %lo pair
89 addiu $2, $2, %lo(foo)
91 addiu $2, $3, %got(bar) // RELOC: R_MIPS_GOT16 .data
92 // ENCBE: addiu $2, $3, %got(bar) # encoding: [0x24,0x62,A,A]
93 // ENCLE: addiu $2, $3, %got(bar) # encoding: [A,A,0x62,0x24]
94 // FIXUP: # fixup A - offset: 0, value: %got(bar), kind: fixup_Mips_GOT
95 // DATA-NEXT: 0040: 24420004 0000FFBE 24620000
96 // %got requires a %lo pair
97 addiu $2, $2, %lo(bar)
99 .short foo-. // RELOC: R_MIPS_PC16 foo
100 .short baz-. // RELOC-NOT: R_MIPS_PC16
102 addiu $2, $3, %call16(foo) // RELOC: R_MIPS_CALL16 foo
103 // ENCBE: addiu $2, $3, %call16(foo) # encoding: [0x24,0x62,A,A]
104 // ENCLE: addiu $2, $3, %call16(foo) # encoding: [A,A,0x62,0x24]
105 // FIXUP: # fixup A - offset: 0, value: %call16(foo), kind: fixup_Mips_CALL16
108 // DATA-NEXT: 0050: 00000000 00000000 00000000 00000004
109 .quad foo // RELOC: R_MIPS_64 foo
110 .quad bar // RELOC: R_MIPS_64 .data
112 // ?????: R_MIPS_GPREL32 foo
113 // ?????: R_MIPS_UNUSED1 foo
114 // ?????: R_MIPS_UNUSED2 foo
115 // ?????: R_MIPS_UNUSED3 foo
116 // ?????: R_MIPS_SHIFT5 foo
117 // ?????: R_MIPS_SHIFT6 foo
119 // DATA-NEXT: 0060: 24620000 24620000 24620004 24620000
120 addiu $2, $3, %got_disp(foo) // RELOC: R_MIPS_GOT_DISP foo
121 // ENCBE: addiu $2, $3, %got_disp(foo) # encoding: [0x24,0x62,A,A]
122 // ENCLE: addiu $2, $3, %got_disp(foo) # encoding: [A,A,0x62,0x24]
123 // FIXUP: # fixup A - offset: 0, value: %got_disp(foo), kind: fixup_Mips_GOT_DISP
125 addiu $2, $3, %got_page(foo) // RELOC: R_MIPS_GOT_PAGE foo
126 // ENCBE: addiu $2, $3, %got_page(foo) # encoding: [0x24,0x62,A,A]
127 // ENCLE: addiu $2, $3, %got_page(foo) # encoding: [A,A,0x62,0x24]
128 // FIXUP: # fixup A - offset: 0, value: %got_page(foo), kind: fixup_Mips_GOT_PAGE
130 addiu $2, $3, %got_page(bar) // RELOC: R_MIPS_GOT_PAGE .data
131 // ENCBE: addiu $2, $3, %got_page(bar) # encoding: [0x24,0x62,A,A]
132 // ENCLE: addiu $2, $3, %got_page(bar) # encoding: [A,A,0x62,0x24]
133 // FIXUP: # fixup A - offset: 0, value: %got_page(bar), kind: fixup_Mips_GOT_PAGE
135 addiu $2, $3, %got_ofst(foo) // RELOC: R_MIPS_GOT_OFST foo
136 // ENCBE: addiu $2, $3, %got_ofst(foo) # encoding: [0x24,0x62,A,A]
137 // ENCLE: addiu $2, $3, %got_ofst(foo) # encoding: [A,A,0x62,0x24]
138 // FIXUP: # fixup A - offset: 0, value: %got_ofst(foo), kind: fixup_Mips_GOT_OFST
140 // DATA-NEXT: 0070: 24620004 24620000 24620000 64620000
141 addiu $2, $3, %got_ofst(bar) // RELOC: R_MIPS_GOT_OFST .data
142 // ENCBE: addiu $2, $3, %got_ofst(bar) # encoding: [0x24,0x62,A,A]
143 // ENCLE: addiu $2, $3, %got_ofst(bar) # encoding: [A,A,0x62,0x24]
144 // FIXUP: # fixup A - offset: 0, value: %got_ofst(bar), kind: fixup_Mips_GOT_OFST
146 addiu $2, $3, %got_hi(foo) // RELOC: R_MIPS_GOT_HI16 foo
147 // ENCBE: addiu $2, $3, %got_hi(foo) # encoding: [0x24,0x62,A,A]
148 // ENCLE: addiu $2, $3, %got_hi(foo) # encoding: [A,A,0x62,0x24]
149 // FIXUP: # fixup A - offset: 0, value: %got_hi(foo), kind: fixup_Mips_GOT_HI16
151 addiu $2, $3, %got_lo(foo) // RELOC: R_MIPS_GOT_LO16 foo
152 // ENCBE: addiu $2, $3, %got_lo(foo) # encoding: [0x24,0x62,A,A]
153 // ENCLE: addiu $2, $3, %got_lo(foo) # encoding: [A,A,0x62,0x24]
154 // FIXUP: # fixup A - offset: 0, value: %got_lo(foo), kind: fixup_Mips_GOT_LO16
156 // It turns out that %neg() isn't actually usable for anything. It
's
157 // not supported in .quad and it doesn't make sense to use
a 64-bit
158 // reloc on
a 32-bit instruction.
159 // .quad %neg(foo) // ?????: R_MIPS_SUB foo
160 // ?????
: R_MIPS_INSERT_A
161 // ?????
: R_MIPS_INSERT_B
162 // ?????
: R_MIPS_DELETE
165 daddiu $
2, $
3, %higher
(foo
) // RELOC
: R_MIPS_HIGHER foo
166 // ENCBE
: daddiu $
2, $
3, %higher
(foo
) # encoding: [0x64,0x62,A,A]
167 // ENCLE
: daddiu $
2, $
3, %higher
(foo
) # encoding: [A,A,0x62,0x64]
168 // FIXUP
: # fixup A - offset: 0, value: %higher(foo), kind: fixup_Mips_HIGHER
170 // DATA-NEXT
: 0080: 64620000 24620000 24620000 00000000
171 daddiu $
2, $
3, %highest
(foo
) // RELOC
: R_MIPS_HIGHEST foo
172 // ENCBE
: daddiu $
2, $
3, %highest
(foo
) # encoding: [0x64,0x62,A,A]
173 // ENCLE
: daddiu $
2, $
3, %highest
(foo
) # encoding: [A,A,0x62,0x64]
174 // FIXUP
: # fixup A - offset: 0, value: %highest(foo), kind: fixup_Mips_HIGHEST
177 addiu $
2, $
3, %call_hi
(foo
) // RELOC
: R_MIPS_CALL_HI16 foo
178 // ENCBE
: addiu $
2, $
3, %call_hi
(foo
) # encoding: [0x24,0x62,A,A]
179 // ENCLE
: addiu $
2, $
3, %call_hi
(foo
) # encoding: [A,A,0x62,0x24]
180 // FIXUP
: # fixup A - offset: 0, value: %call_hi(foo), kind: fixup_Mips_CALL_HI16
182 addiu $
2, $
3, %call_lo
(foo
) // RELOC
: R_MIPS_CALL_LO16 foo
183 // ENCBE
: addiu $
2, $
3, %call_lo
(foo
) # encoding: [0x24,0x62,A,A]
184 // ENCLE
: addiu $
2, $
3, %call_lo
(foo
) # encoding: [A,A,0x62,0x24]
185 // FIXUP
: # fixup A - offset: 0, value: %call_lo(foo), kind: fixup_Mips_CALL_LO16
187 // ?????
: R_MIPS_SCN_DISP foo
188 // ?????
: R_MIPS_REL16 foo
189 // ?????
: R_MIPS_ADD_IMMEDIATE foo
190 // ?????
: R_MIPS_PJUMP foo
191 // ?????
: R_MIPS_RELGOT foo
192 // jalr $
25 // ?????
: R_MIPS_JALR foo
194 // ?????
: R_MIPS_TLS_DTPMOD32 foo
195 .dtprelword foo // RELOC: R_MIPS_TLS_DTPREL32 foo
197 // DATA-NEXT
: 0090: 00000000 00000000 24620000 24620000
198 // ?????
: R_MIPS_TLS_DTPMOD64 foo
199 .dtpreldword foo // RELOC: R_MIPS_TLS_DTPREL64 foo
200 addiu $
2, $
3, %tlsgd
(foo
) // RELOC
: R_MIPS_TLS_GD foo
201 // ENCBE
: addiu $
2, $
3, %tlsgd
(foo
) # encoding: [0x24,0x62,A,A]
202 // ENCLE
: addiu $
2, $
3, %tlsgd
(foo
) # encoding: [A,A,0x62,0x24]
203 // FIXUP
: # fixup A - offset: 0, value: %tlsgd(foo), kind: fixup_Mips_TLSGD
205 addiu $
2, $
3, %tlsldm
(foo
) // RELOC
: R_MIPS_TLS_LDM foo
206 // ENCBE
: addiu $
2, $
3, %tlsldm
(foo
) # encoding: [0x24,0x62,A,A]
207 // ENCLE
: addiu $
2, $
3, %tlsldm
(foo
) # encoding: [A,A,0x62,0x24]
208 // FIXUP
: # fixup A - offset: 0, value: %tlsldm(foo), kind: fixup_Mips_TLSLDM
210 // DATA-NEXT
: 00A0
: 24620000 24620000 24620000 00000000
211 addiu $
2, $
3, %dtprel_hi
(foo
) // RELOC
: R_MIPS_TLS_DTPREL_HI16 foo
212 // ENCBE
: addiu $
2, $
3, %dtprel_hi
(foo
) # encoding: [0x24,0x62,A,A]
213 // ENCLE
: addiu $
2, $
3, %dtprel_hi
(foo
) # encoding: [A,A,0x62,0x24]
214 // FIXUP
: # fixup A - offset: 0, value: %dtprel_hi(foo), kind: fixup_Mips_DTPREL_HI
216 addiu $
2, $
3, %dtprel_lo
(foo
) // RELOC
: R_MIPS_TLS_DTPREL_LO16 foo
217 // ENCBE
: addiu $
2, $
3, %dtprel_lo
(foo
) # encoding: [0x24,0x62,A,A]
218 // ENCLE
: addiu $
2, $
3, %dtprel_lo
(foo
) # encoding: [A,A,0x62,0x24]
219 // FIXUP
: # fixup A - offset: 0, value: %dtprel_lo(foo), kind: fixup_Mips_DTPREL_LO
221 addiu $
2, $
3, %gottprel
(foo
) // RELOC
: R_MIPS_TLS_GOTTPREL foo
222 // ENCBE
: addiu $
2, $
3, %gottprel
(foo
) # encoding: [0x24,0x62,A,A]
223 // ENCLE
: addiu $
2, $
3, %gottprel
(foo
) # encoding: [A,A,0x62,0x24]
224 // FIXUP
: # fixup A - offset: 0, value: %gottprel(foo), kind: fixup_Mips_GOTTPREL
226 .tprelword foo // RELOC: R_MIPS_TLS_TPREL32 foo
228 // DATA-NEXT
: 00B0
: 00000000 00000000 24620000 24620000
229 .tpreldword foo // RELOC: R_MIPS_TLS_TPREL64 foo
230 addiu $
2, $
3, %tprel_hi
(foo
) // RELOC
: R_MIPS_TLS_TPREL_HI16 foo
231 // ENCBE
: addiu $
2, $
3, %tprel_hi
(foo
) # encoding: [0x24,0x62,A,A]
232 // ENCLE
: addiu $
2, $
3, %tprel_hi
(foo
) # encoding: [A,A,0x62,0x24]
233 // FIXUP
: # fixup A - offset: 0, value: %tprel_hi(foo), kind: fixup_Mips_TPREL_HI
235 addiu $
2, $
3, %tprel_lo
(foo
) // RELOC
: R_MIPS_TLS_TPREL_LO16 foo
236 // ENCBE
: addiu $
2, $
3, %tprel_lo
(foo
) # encoding: [0x24,0x62,A,A]
237 // ENCLE
: addiu $
2, $
3, %tprel_lo
(foo
) # encoding: [A,A,0x62,0x24]
238 // FIXUP
: # fixup A - offset: 0, value: %tprel_lo(foo), kind: fixup_Mips_TPREL_LO
240 // DATA-NEXT
: 00C0
: D85FFFFF CBFFFFFF EC580000 EC480000
241 // ?????
: R_MIPS_GLOB_DAT foo
243 beqzc $
2, foo
// RELOC
: R_MIPS_PC21_S2 foo
244 // ENCBE
: beqzc $
2, foo
# encoding: [0xd8,0b010AAAAA,A,A]
245 // ENCLE
: beqzc $
2, foo
# encoding: [A,A,0b010AAAAA,0xd8]
246 // FIXUP
: # fixup A - offset: 0, value: foo-4, kind: fixup_MIPS_PC21_S2
248 bc foo
// RELOC
: R_MIPS_PC26_S2 foo
249 // ENCBE
: bc foo
# encoding: [0b110010AA,A,A,A]
250 // ENCLE
: bc foo
# encoding: [A,A,A,0b110010AA]
251 // FIXUP
: # fixup A - offset: 0, value: foo-4, kind: fixup_MIPS_PC26_S2
254 ldpc $
2, foo
// RELOC
: R_MIPS_PC18_S3 foo
255 // ENCBE
: ldpc $
2, foo
# encoding: [0xec,0b010110AA,A,A]
256 // ENCLE
: ldpc $
2, foo
# encoding: [A,A,0b010110AA,0xec]
257 // FIXUP
: # fixup A - offset: 0, value: foo, kind: fixup_Mips_PC18_S3
260 lwpc $
2, foo
// RELOC
: R_MIPS_PC19_S2 foo
261 // ENCBE
: lwpc $
2, foo
# encoding: [0xec,0b01001AAA,A,A]
262 // ENCLE
: lwpc $
2, foo
# encoding: [A,A,0b01001AAA,0xec]
263 // FIXUP
: # fixup A - offset: 0, value: foo, kind: fixup_MIPS_PC19_S2
265 // DATA-NEXT
: 00D0
: 24620000 24620000 00000000
266 addiu $
2, $
3, %pcrel_hi
(foo
) // RELOC
: R_MIPS_PCHI16 foo
267 // ENCBE
: addiu $
2, $
3, %pcrel_hi
(foo
) # encoding: [0x24,0x62,A,A]
268 // ENCLE
: addiu $
2, $
3, %pcrel_hi
(foo
) # encoding: [A,A,0x62,0x24]
269 // FIXUP
: # fixup A - offset: 0, value: %pcrel_hi(foo), kind: fixup_MIPS_PCHI16
271 addiu $
2, $
3, %pcrel_lo
(foo
) // RELOC
: R_MIPS_PCLO16 foo
272 // ENCBE
: addiu $
2, $
3, %pcrel_lo
(foo
) # encoding: [0x24,0x62,A,A]
273 // ENCLE
: addiu $
2, $
3, %pcrel_lo
(foo
) # encoding: [A,A,0x62,0x24]
274 // FIXUP
: # fixup A - offset: 0, value: %pcrel_lo(foo), kind: fixup_MIPS_PCLO16
278 // ?????
: R_MIPS_COPY foo
279 // ?????
: R_MIPS_JUMP_SLOT foo
280 // FIXME
: R_MICROMIPS_
*
281 .long foo-. // RELOC: R_MIPS_PC32 foo
282 // .ehword foo // FIXME: R_MIPS_EH foo
289 .section .text_mm, "ax", @progbits
292 // RELOC-LABEL
: .rel.text_mm {
295 // DATA-LABEL
: Name
: .text_mm
296 // DATA
: SectionData
(
298 // DATA-NEXT
: 0000: 30430000 30420000 30430000 30420004
299 addiu $
2, $
3, %got
(foo_mm
) // RELOC
: R_MICROMIPS_GOT16 foo_mm
300 // ENCBE
: addiu $
2, $
3, %got
(foo_mm
) # encoding: [0x30,0x43,A,A]
301 // The placement of the
'A' annotations is incorrect. They use
32-bit little endian instead of
2x
16-bit little endian.
302 // ENCLE
: addiu $
2, $
3, %got
(foo_mm
) # encoding: [0x43'A',0x30'A',0x00,0x00]
303 // FIXUP
: # fixup A - offset: 0, value: %got(foo_mm), kind: fixup_MICROMIPS_GOT16
304 // %got requires
a %lo pair
305 addiu $
2, $
2, %lo
(foo_mm
) // RELOC
: R_MICROMIPS_LO16 foo_mm
306 // ENCBE
: addiu $
2, $
2, %lo
(foo_mm
) # encoding: [0x30,0x42,A,A]
307 // ENCLE
: addiu $
2, $
2, %lo
(foo_mm
) # encoding: [0x42'A',0x30'A',0x00,0x00]
308 // FIXUP
: # fixup A - offset: 0, value: %lo(foo_mm), kind: fixup_MICROMIPS_LO16
311 addiu $
2, $
3, %got
(bar
) // RELOC
: R_MICROMIPS_GOT16
.data
312 // ENCBE
: addiu $
2, $
3, %got
(bar
) # encoding: [0x30,0x43,A,A]
313 // ENCLE
: addiu $
2, $
3, %got
(bar
) # encoding: [0x43'A',0x30'A',0x00,0x00]
314 // FIXUP
: # fixup A - offset: 0, value: %got(bar), kind: fixup_MICROMIPS_GOT16
315 // %got requires
a %lo pair
316 addiu $
2, $
2, %lo
(bar
) // RELOC
: R_MICROMIPS_LO16
.data
317 // ENCBE
: addiu $
2, $
2, %lo
(bar
) # encoding: [0x30,0x42,A,A]
318 // ENCLE
: addiu $
2, $
2, %lo
(bar
) # encoding: [0x42'A',0x30'A',0x00,0x00]
319 // FIXUP
: # fixup A - offset: 0, value: %lo(bar), kind: fixup_MICROMIPS_LO16
321 // DATA-NEXT
: 0010: 30430000 30420004 30430001 3042003C
322 addiu $
2, $
3, %got
(baz
) // RELOC
: R_MICROMIPS_GOT16
.text
323 // ENCBE
: addiu $
2, $
3, %got
(baz
) # encoding: [0x30,0x43,A,A]
324 // The placement of the
'A' annotations is incorrect. They use
32-bit little endian instead of
2x
16-bit little endian.
325 // ENCLE
: addiu $
2, $
3, %got
(baz
) # encoding: [0x43'A',0x30'A',0x00,0x00]
326 // FIXUP
: # fixup A - offset: 0, value: %got(baz), kind: fixup_MICROMIPS_GOT16
327 // %got requires
a %lo pair
328 addiu $
2, $
2, %lo
(baz
) // RELOC
: R_MICROMIPS_LO16
.text
329 // ENCBE
: addiu $
2, $
2, %lo
(baz
) # encoding: [0x30,0x42,A,A]
330 // ENCLE
: addiu $
2, $
2, %lo
(baz
) # encoding: [0x42'A',0x30'A',0x00,0x00]
331 // FIXUP
: # fixup A - offset: 0, value: %lo(baz), kind: fixup_MICROMIPS_LO16
333 addiu $
2, $
3, %got
(long_mm
) // RELOC
: R_MICROMIPS_GOT16
.text
334 // ENCBE
: addiu $
2, $
3, %got
(long_mm
) # encoding: [0x30,0x43,A,A]
335 // The placement of the
'A' annotations is incorrect. They use
32-bit little endian instead of
2x
16-bit little endian.
336 // ENCLE
: addiu $
2, $
3, %got
(long_mm
) # encoding: [0x43'A',0x30'A',0x00,0x00]
337 // FIXUP
: # fixup A - offset: 0, value: %got(long_mm), kind: fixup_MICROMIPS_GOT16
338 // %got requires
a %lo pair
339 addiu $
2, $
2, %lo
(long_mm
) // RELOC
: R_MICROMIPS_LO16
.text
340 // ENCBE
: addiu $
2, $
2, %lo
(long_mm
) # encoding: [0x30,0x42,A,A]
341 // ENCLE
: addiu $
2, $
2, %lo
(long_mm
) # encoding: [0x42'A',0x30'A',0x00,0x00]
342 // FIXUP
: # fixup A - offset: 0, value: %lo(long_mm), kind: fixup_MICROMIPS_LO16
344 // DATA-NEXT
: 0020: 30430004 00000000 30430004 00000000
345 addiu $
2, $
3, %got_page
(bar
) // RELOC
: R_MICROMIPS_GOT_PAGE
.data
346 // ENCBE
: addiu $
2, $
3, %got_page
(bar
) # encoding: [0x30,0x43,A,A]
347 // The placement of the
'A' annotations is incorrect. They use
32-bit little endian instead of
2x
16-bit little endian.
348 // ENCLE
: addiu $
2, $
3, %got_page
(bar
) # encoding: [0x43'A',0x30'A',0x00,0x00]
349 // FIXUP
: # fixup A - offset: 0, value: %got_page(bar), kind: fixup_MICROMIPS_GOT_PAGE
352 addiu $
2, $
3, %got_ofst
(bar
) // RELOC
: R_MICROMIPS_GOT_OFST
.data
353 // ENCBE
: addiu $
2, $
3, %got_ofst
(bar
) # encoding: [0x30,0x43,A,A]
354 // The placement of the
'A' annotations is incorrect. They use
32-bit little endian instead of
2x
16-bit little endian.
355 // ENCLE
: addiu $
2, $
3, %got_ofst
(bar
) # encoding: [0x43'A',0x30'A',0x00,0x00]
356 // FIXUP
: # fixup A - offset: 0, value: %got_ofst(bar), kind: fixup_MICROMIPS_GOT_OFST
359 // DATA-NEXT
: 0030: 30430000 30420000 30430000 30420004
360 addiu $
2, $
3, %hi
(foo_mm
) // RELOC
: R_MICROMIPS_HI16 foo_mm
361 // ENCBE
: addiu $
2, $
3, %hi
(foo_mm
) # encoding: [0x30,0x43,A,A]
362 // ENCLE
: addiu $
2, $
3, %hi
(foo_mm
) # encoding: [0x43'A',0x30'A',0x00,0x00]
363 // FIXUP
: # fixup A - offset: 0, value: %hi(foo_mm), kind: fixup_MICROMIPS_HI16
365 addiu $
2, $
2, %lo
(foo_mm
) // RELOC
: R_MICROMIPS_LO16 foo_mm
366 // ENCBE
: addiu $
2, $
2, %lo
(foo_mm
) # encoding: [0x30,0x42,A,A]
367 // ENCLE
: addiu $
2, $
2, %lo
(foo_mm
) # encoding: [0x42'A',0x30'A',0x00,0x00]
368 // FIXUP
: # fixup A - offset: 0, value: %lo(foo_mm), kind: fixup_MICROMIPS_LO16
370 addiu $
2, $
3, %hi
(bar
) // RELOC
: R_MICROMIPS_HI16
.data
371 // ENCBE
: addiu $
2, $
3, %hi
(bar
) # encoding: [0x30,0x43,A,A]
372 // ENCLE
: addiu $
2, $
3, %hi
(bar
) # encoding: [0x43'A',0x30'A',0x00,0x00]
373 // FIXUP
: # fixup A - offset: 0, value: %hi(bar), kind: fixup_MICROMIPS_HI16
375 addiu $
2, $
2, %lo
(bar
) // RELOC
: R_MICROMIPS_LO16
.data
376 // ENCBE
: addiu $
2, $
2, %lo
(bar
) # encoding: [0x30,0x42,A,A]
377 // ENCLE
: addiu $
2, $
2, %lo
(bar
) # encoding: [0x42'A',0x30'A',0x00,0x00]
378 // FIXUP
: # fixup A - offset: 0, value: %lo(bar), kind: fixup_MICROMIPS_LO16
380 // DATA-NEXT
: 0040: 30430000 41A50000
41A50000
00000000
381 addiu $
2, $
3, %gottprel
(foo
) // RELOC
: R_MICROMIPS_TLS_GOTTPREL foo
382 // ENCBE
: addiu $
2, $
3, %gottprel
(foo
) # encoding: [0x30,0x43,A,A]
383 // ENCLE
: addiu $
2, $
3, %gottprel
(foo
) # encoding: [0x43'A',0x30'A',0x00,0x00]
384 // FIXUP
: # fixup A - offset: 0, value: %gottprel(foo), kind: fixup_MICROMIPS_GOTTPREL
386 lui $
5, %higher
(foo
) // RELOC
: R_MICROMIPS_HIGHER foo
387 // ENCBE
: lui $
5, %higher
(foo
) # encoding: [0x41,0xa5,A,A]
388 // ENCLE
: lui $
5, %higher
(foo
) # encoding: [0xa5'A',0x41'A',0x00,0x00]
389 // FIXUP
: # fixup A - offset: 0, value: %higher(foo), kind: fixup_MICROMIPS_HIGHER
391 lui $
5, %highest
(foo
) // RELOC
: R_MICROMIPS_HIGHEST foo
392 // ENCBE
: lui $
5, %highest
(foo
) # encoding: [0x41,0xa5,A,A]
393 // ENCLE
: lui $
5, %highest
(foo
) # encoding: [0xa5'A',0x41'A',0x00,0x00]
394 // FIXUP
: # fixup A - offset: 0, value: %highest(foo), kind: fixup_MICROMIPS_HIGHEST