]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/elf/Mips/got16-micro.test
Vendor import of lld trunk r233088:
[FreeBSD/FreeBSD.git] / test / elf / Mips / got16-micro.test
1 # REQUIRES: mips
2
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
12
13 # Function glob
14 # YAML:      - name:         main
15 # YAML:        scope:        global
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
21 # YAML:        references:
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
43
44 # Local GOT entries:
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
78
79 # Global GOT entries:
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
105
106 # RAW: Disassembly of section .text:
107 # RAW: main:
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)
115
116 # RAW: SYMBOL TABLE:
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
123
124         .data
125         .type   data_1, @object
126         .size   data_1, 4128
127 data_1:
128         .byte   1
129         .space  4127
130         .type   data_2, @object
131         .size   data_2, 1
132 data_2:
133         .byte   2
134         .hidden data_h
135         .globl  data_h
136         .type   data_h, @object
137         .size   data_h, 1
138 data_h:
139         .byte   3
140
141         .text
142         .globl  bar
143         .set    micromips
144         .ent    bar
145         .type   bar, @function
146 bar:
147         nop
148         .end    bar
149         .size   bar, .-bar
150
151         .globl  main
152         .set    micromips
153         .ent    main
154         .type   main, @function
155 main:
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)
163
164         .end    main
165         .size   main, .-main