3 # Check handling of global/local R_MICROMIPS_GOT16 relocations.
4 # RUN: llvm-mc -triple=mipsel -mattr=micromips -relocation-model=pic \
5 # RUN: -filetype=obj -o=%t.o %s
6 # RUN: lld -flavor gnu -target mipsel -shared --noinhibit-exec \
7 # RUN: --output-filetype=yaml %t.o \
8 # RUN: | FileCheck -check-prefix YAML %s
9 # RUN: lld -flavor gnu -target mipsel -shared --noinhibit-exec -o %t2 %t.o
10 # RUN: llvm-objdump -t -disassemble -mattr=micromips %t2 \
11 # RUN: | FileCheck -check-prefix RAW %s
16 # YAML: content: [ 5C, FC, 00, 00, 42, 30, 00, 00, 5C, FC, 00, 00,
17 # YAML: 42, 30, 00, 00, 5C, FC, 00, 00, 5C, FC, 00, 00,
18 # YAML: 5C, FC, 00, 00 ]
19 # YAML: alignment: 4 mod 2^4
20 # YAML: code-model: mips-micro
22 # YAML-NEXT: - kind: R_MICROMIPS_GOT16
23 # YAML-NEXT: offset: 0
24 # YAML-NEXT: target: L000
25 # YAML-NEXT: - kind: R_MICROMIPS_LO16
26 # YAML-NEXT: offset: 4
27 # YAML-NEXT: target: data_1
28 # YAML-NEXT: - kind: R_MICROMIPS_GOT16
29 # YAML-NEXT: offset: 8
30 # YAML-NEXT: target: L001
31 # YAML-NEXT: - kind: R_MICROMIPS_LO16
32 # YAML-NEXT: offset: 12
33 # YAML-NEXT: target: data_2
34 # YAML-NEXT: - kind: R_MICROMIPS_GOT16
35 # YAML-NEXT: offset: 16
36 # YAML-NEXT: target: L002
37 # YAML-NEXT: - kind: R_MICROMIPS_CALL16
38 # YAML-NEXT: offset: 20
39 # YAML-NEXT: target: L003
40 # YAML-NEXT: - kind: R_MICROMIPS_CALL16
41 # YAML-NEXT: offset: 24
42 # YAML-NEXT: target: L004
45 # YAML: - ref-name: L000
46 # YAML-NEXT: type: got
47 # YAML-NEXT: content: [ 00, 00, 00, 00 ]
48 # YAML-NEXT: alignment: 2^2
49 # YAML-NEXT: section-choice: custom-required
50 # YAML-NEXT: section-name: .got
51 # YAML-NEXT: permissions: rw-
52 # YAML-NEXT: references:
53 # YAML-NEXT: - kind: LLD_R_MIPS_32_HI16
54 # YAML-NEXT: offset: 0
55 # YAML-NEXT: target: data_1
56 # YAML-NEXT: - ref-name: L001
57 # YAML-NEXT: type: got
58 # YAML-NEXT: content: [ 00, 00, 00, 00 ]
59 # YAML-NEXT: alignment: 2^2
60 # YAML-NEXT: section-choice: custom-required
61 # YAML-NEXT: section-name: .got
62 # YAML-NEXT: permissions: rw-
63 # YAML-NEXT: references:
64 # YAML-NEXT: - kind: LLD_R_MIPS_32_HI16
65 # YAML-NEXT: offset: 0
66 # YAML-NEXT: target: data_2
67 # YAML-NEXT: - ref-name: L002
68 # YAML-NEXT: type: got
69 # YAML-NEXT: content: [ 00, 00, 00, 00 ]
70 # YAML-NEXT: alignment: 2^2
71 # YAML-NEXT: section-choice: custom-required
72 # YAML-NEXT: section-name: .got
73 # YAML-NEXT: permissions: rw-
74 # YAML-NEXT: references:
75 # YAML-NEXT: - kind: R_MIPS_32
76 # YAML-NEXT: offset: 0
77 # YAML-NEXT: target: data_h
80 # YAML-NEXT: - ref-name: L003
81 # YAML-NEXT: type: got
82 # YAML-NEXT: content: [ 00, 00, 00, 00 ]
83 # YAML-NEXT: alignment: 2^2
84 # YAML-NEXT: section-choice: custom-required
85 # YAML-NEXT: section-name: .got
86 # YAML-NEXT: permissions: rw-
87 # YAML-NEXT: references:
88 # YAML-NEXT: - kind: LLD_R_MIPS_GLOBAL_GOT
89 # YAML-NEXT: offset: 0
90 # YAML-NEXT: target: bar
91 # YAML-NEXT: - kind: R_MIPS_32
92 # YAML-NEXT: offset: 0
93 # YAML-NEXT: target: bar
94 # YAML-NEXT: - ref-name: L004
95 # YAML-NEXT: type: got
96 # YAML-NEXT: content: [ 00, 00, 00, 00 ]
97 # YAML-NEXT: alignment: 2^2
98 # YAML-NEXT: section-choice: custom-required
99 # YAML-NEXT: section-name: .got
100 # YAML-NEXT: permissions: rw-
101 # YAML-NEXT: references:
102 # YAML-NEXT: - kind: LLD_R_MIPS_GLOBAL_GOT
103 # YAML-NEXT: offset: 0
104 # YAML-NEXT: target: foo
106 # RAW: Disassembly of section .text:
108 # RAW-NEXT: {{[0x0-9a-f]+}}: 5c fc 18 80 lw $2, -32744($gp)
109 # RAW-NEXT: {{[0x0-9a-f]+}}: 42 30 40 10 addiu $2, $2, 4160
110 # RAW-NEXT: {{[0x0-9a-f]+}}: 5c fc 1c 80 lw $2, -32740($gp)
111 # RAW-NEXT: {{[0x0-9a-f]+}}: 42 30 60 20 addiu $2, $2, 8288
112 # RAW-NEXT: {{[0x0-9a-f]+}}: 5c fc 20 80 lw $2, -32736($gp)
113 # RAW-NEXT: {{[0x0-9a-f]+}}: 5c fc 24 80 lw $2, -32732($gp)
114 # RAW-NEXT: {{[0x0-9a-f]+}}: 5c fc 28 80 lw $2, -32728($gp)
117 # RAW: {{[0x0-9a-f]+}} *UND* 00000000
118 # RAW: {{[0x0-9a-f]+}} l .data 00000000 data_1
119 # RAW: {{[0x0-9a-f]+}} l .data 00000001 data_2
120 # RAW: {{[0x0-9a-f]+}} g F .text 00000004 bar
121 # RAW: {{[0x0-9a-f]+}} g F .text 0000001c main
122 # RAW: {{[0x0-9a-f]+}} g .data 00000001 data_h
125 .type data_1, @object
130 .type data_2, @object
136 .type data_h, @object
154 .type main, @function
156 lw $2,%got(data_1)($28)
157 addiu $2,$2,%lo(data_1)
158 lw $2,%got(data_2)($28)
159 addiu $2,$2,%lo(data_2)
160 lw $2,%got(data_h)($28)
161 lw $2,%call16(bar)($28)
162 lw $2,%call16(foo)($28)