4 ## - clang <input_file.c> -fsanitize=memtag-globals -O2 -S -fPIC -o - \
5 ## --target=aarch64-linux-android31 -fno-asynchronous-unwind-tables
7 ## <input_file.c> contents:
9 ## /// Global variables defined here, of various semantics.
10 ## char global[30] = {};
11 ## __attribute__((no_sanitize("memtag"))) int global_untagged = 0;
12 ## const int const_global = 0;
13 ## static const int hidden_const_global = 0;
14 ## static char hidden_global[12] = {};
15 ## __attribute__((visibility("hidden"))) int hidden_attr_global = 0;
16 ## __attribute__((visibility("hidden"))) const int hidden_attr_const_global = 0;
18 ## /// Should be untagged.
19 ## __thread int tls_global;
20 ## __thread static int hidden_tls_global;
22 ## /// Tagged, from the other file.
23 ## extern int global_extern;
24 ## /// Untagged, from the other file.
25 ## extern __attribute__((no_sanitize("memtag"))) int global_extern_untagged;
26 ## /// Tagged, but from a different DSO (i.e. not this or the sister objfile).
27 ## extern int global_extern_outside_this_dso;
28 ## /// Tagged here (because it's non-const), but untagged in the definition found
29 ## /// in the sister objfile as it's marked as const there.
30 ## extern int global_extern_const_definition_but_nonconst_import;
31 ## /// Tagged here, but untagged in the definition found in the sister objfile
33 ## extern int global_extern_untagged_definition_but_tagged_import;
35 ## /// ABS64 relocations. Also, forces symtab entries for local and external
37 ## char *pointer_to_global = &global[0];
38 ## char *pointer_inside_global = &global[17];
39 ## char *pointer_to_global_end = &global[30];
40 ## char *pointer_past_global_end = &global[48];
41 ## int *pointer_to_global_untagged = &global_untagged;
42 ## const int *pointer_to_const_global = &const_global;
43 ## /// RELATIVE relocations.
44 ## const int *pointer_to_hidden_const_global = &hidden_const_global;
45 ## char *pointer_to_hidden_global = &hidden_global[0];
46 ## const int *pointer_to_hidden_attr_global = &hidden_attr_global;
47 ## const int *pointer_to_hidden_attr_const_global = &hidden_attr_const_global;
48 ## /// RELATIVE relocations with special AArch64 MemtagABI semantics, with the
49 ## /// offset ('12' or '16') encoded in the place.
50 ## char *pointer_to_hidden_global_end = &hidden_global[12];
51 ## char *pointer_past_hidden_global_end = &hidden_global[16];
52 ## /// ABS64 relocations.
53 ## int *pointer_to_global_extern = &global_extern;
54 ## int *pointer_to_global_extern_untagged = &global_extern_untagged;
55 ## int *pointer_to_global_extern_outside_this_dso = &global_extern_outside_this_dso;
56 ## int *pointer_to_global_extern_const_definition_but_nonconst_import =
57 ## &global_extern_const_definition_but_nonconst_import;
58 ## int *pointer_to_global_extern_untagged_definition_but_tagged_import =
59 ## &global_extern_untagged_definition_but_tagged_import;
61 ## int *get_address_to_tls_global() { return &tls_global; }
62 ## int *get_address_to_hidden_tls_global() { return &hidden_tls_global; }
66 .globl get_address_to_tls_global // -- Begin function get_address_to_tls_global
68 .type get_address_to_tls_global,@function
69 get_address_to_tls_global
: // @get_address_to_tls_global
71 stp x29
, x30
, [sp
, #-16]! // 16-byte Folded Spill
73 adrp x0
, :tlsdesc
:tls_global
74 ldr x1
, [x0
, :tlsdesc_lo12
:tls_global
]
75 add x0
, x0
, :tlsdesc_lo12
:tls_global
76 .tlsdesccall tls_global
80 ldp x29
, x30
, [sp
], #16 // 16-byte Folded Reload
83 .size get_address_to_tls_global, .Lfunc_end0-get_address_to_tls_global
85 .globl get_address_to_hidden_tls_global // -- Begin function get_address_to_hidden_tls_global
87 .type get_address_to_hidden_tls_global,@function
88 get_address_to_hidden_tls_global
: // @get_address_to_hidden_tls_global
90 stp x29
, x30
, [sp
, #-16]! // 16-byte Folded Spill
92 adrp x0
, :tlsdesc
:hidden_tls_global
93 ldr x1
, [x0
, :tlsdesc_lo12
:hidden_tls_global
]
94 add x0
, x0
, :tlsdesc_lo12
:hidden_tls_global
95 .tlsdesccall hidden_tls_global
99 ldp x29
, x30
, [sp
], #16 // 16-byte Folded Reload
102 .size get_address_to_hidden_tls_global, .Lfunc_end1-get_address_to_hidden_tls_global
104 .memtag global // @global
113 .type global_untagged,@object // @global_untagged
114 .globl global_untagged
118 .size global_untagged, 4
120 .type const_global,@object // @const_global
121 .section .rodata,"a",@progbits
126 .size const_global, 4
128 .hidden hidden_attr_global // @hidden_attr_global
129 .memtag hidden_attr_global
130 .type hidden_attr_global,@object
132 .globl hidden_attr_global
136 .size hidden_attr_global, 16
138 .hidden hidden_attr_const_global // @hidden_attr_const_global
139 .type hidden_attr_const_global,@object
140 .section .rodata,"a",@progbits
141 .globl hidden_attr_const_global
143 hidden_attr_const_global
:
145 .size hidden_attr_const_global, 4
147 .memtag pointer_to_global // @pointer_to_global
148 .type pointer_to_global,@object
150 .globl pointer_to_global
155 .size pointer_to_global, 16
157 .memtag pointer_inside_global // @pointer_inside_global
158 .type pointer_inside_global,@object
159 .globl pointer_inside_global
161 pointer_inside_global
:
164 .size pointer_inside_global, 16
166 .memtag pointer_to_global_end // @pointer_to_global_end
167 .type pointer_to_global_end,@object
168 .globl pointer_to_global_end
170 pointer_to_global_end
:
173 .size pointer_to_global_end, 16
175 .memtag pointer_past_global_end // @pointer_past_global_end
176 .type pointer_past_global_end,@object
177 .globl pointer_past_global_end
179 pointer_past_global_end
:
182 .size pointer_past_global_end, 16
184 .memtag pointer_to_global_untagged // @pointer_to_global_untagged
185 .type pointer_to_global_untagged,@object
186 .globl pointer_to_global_untagged
188 pointer_to_global_untagged
:
189 .xword global_untagged
191 .size pointer_to_global_untagged, 16
193 .memtag pointer_to_const_global // @pointer_to_const_global
194 .type pointer_to_const_global,@object
195 .globl pointer_to_const_global
197 pointer_to_const_global
:
200 .size pointer_to_const_global, 16
202 .type hidden_const_global,@object // @hidden_const_global
203 .section .rodata,"a",@progbits
207 .size hidden_const_global, 4
209 .memtag pointer_to_hidden_const_global // @pointer_to_hidden_const_global
210 .type pointer_to_hidden_const_global,@object
212 .globl pointer_to_hidden_const_global
214 pointer_to_hidden_const_global
:
215 .xword hidden_const_global
217 .size pointer_to_hidden_const_global, 16
219 .memtag hidden_global // @hidden_global
220 .type hidden_global,@object
222 .comm hidden_global,16,16
223 .memtag pointer_to_hidden_global // @pointer_to_hidden_global
224 .type pointer_to_hidden_global,@object
225 .globl pointer_to_hidden_global
227 pointer_to_hidden_global
:
230 .size pointer_to_hidden_global, 16
232 .memtag pointer_to_hidden_attr_global // @pointer_to_hidden_attr_global
233 .type pointer_to_hidden_attr_global,@object
234 .globl pointer_to_hidden_attr_global
236 pointer_to_hidden_attr_global
:
237 .xword hidden_attr_global
239 .size pointer_to_hidden_attr_global, 16
241 .memtag pointer_to_hidden_attr_const_global // @pointer_to_hidden_attr_const_global
242 .type pointer_to_hidden_attr_const_global,@object
243 .globl pointer_to_hidden_attr_const_global
245 pointer_to_hidden_attr_const_global
:
246 .xword hidden_attr_const_global
248 .size pointer_to_hidden_attr_const_global, 16
250 .memtag pointer_to_hidden_global_end // @pointer_to_hidden_global_end
251 .type pointer_to_hidden_global_end,@object
252 .globl pointer_to_hidden_global_end
254 pointer_to_hidden_global_end
:
255 .xword hidden_global+12
257 .size pointer_to_hidden_global_end, 16
259 .memtag pointer_past_hidden_global_end // @pointer_past_hidden_global_end
260 .type pointer_past_hidden_global_end,@object
261 .globl pointer_past_hidden_global_end
263 pointer_past_hidden_global_end
:
264 .xword hidden_global+16
266 .size pointer_past_hidden_global_end, 16
268 .memtag global_extern
269 .memtag pointer_to_global_extern // @pointer_to_global_extern
270 .type pointer_to_global_extern,@object
271 .globl pointer_to_global_extern
273 pointer_to_global_extern
:
276 .size pointer_to_global_extern, 16
278 .memtag pointer_to_global_extern_untagged // @pointer_to_global_extern_untagged
279 .type pointer_to_global_extern_untagged,@object
280 .globl pointer_to_global_extern_untagged
282 pointer_to_global_extern_untagged
:
283 .xword global_extern_untagged
285 .size pointer_to_global_extern_untagged, 16
287 .memtag global_extern_outside_this_dso
288 .memtag pointer_to_global_extern_outside_this_dso // @pointer_to_global_extern_outside_this_dso
289 .type pointer_to_global_extern_outside_this_dso,@object
290 .globl pointer_to_global_extern_outside_this_dso
292 pointer_to_global_extern_outside_this_dso
:
293 .xword global_extern_outside_this_dso
295 .size pointer_to_global_extern_outside_this_dso, 16
297 .memtag global_extern_const_definition_but_nonconst_import
298 .memtag pointer_to_global_extern_const_definition_but_nonconst_import // @pointer_to_global_extern_const_definition_but_nonconst_import
299 .type pointer_to_global_extern_const_definition_but_nonconst_import,@object
300 .globl pointer_to_global_extern_const_definition_but_nonconst_import
302 pointer_to_global_extern_const_definition_but_nonconst_import
:
303 .xword global_extern_const_definition_but_nonconst_import
305 .size pointer_to_global_extern_const_definition_but_nonconst_import, 16
307 .memtag global_extern_untagged_definition_but_tagged_import
308 .memtag pointer_to_global_extern_untagged_definition_but_tagged_import // @pointer_to_global_extern_untagged_definition_but_tagged_import
309 .type pointer_to_global_extern_untagged_definition_but_tagged_import,@object
310 .globl pointer_to_global_extern_untagged_definition_but_tagged_import
312 pointer_to_global_extern_untagged_definition_but_tagged_import
:
313 .xword global_extern_untagged_definition_but_tagged_import
315 .size pointer_to_global_extern_untagged_definition_but_tagged_import, 16
317 .type tls_global,@object // @tls_global
318 .section .tbss,"awT",@nobits
325 .type hidden_tls_global,@object // @hidden_tls_global
329 .size hidden_tls_global, 4
331 .ident "clang version 17.0.0 (https://github.com/llvm/llvm-project.git 6130c9df99a7a7eb9c6adc118a48f8f2acc534ab)"
332 .section ".note.GNU-stack","",@progbits
337 ## - clang <input_file.c> -fsanitize=memtag-globals -O2 -S -o - \
338 ## --target=aarch64-linux-android31 -fno-asynchronous-unwind-tables
340 ## <input_file.c> contents:
342 ## int global_extern;
343 ## static int global_extern_hidden;
344 ## __attribute__((no_sanitize("memtag"))) int global_extern_untagged;
345 ## const int global_extern_const_definition_but_nonconst_import;
346 ## __attribute__((no_sanitize(
347 ## "memtag"))) int global_extern_untagged_definition_but_tagged_import;
352 .memtag global_extern
353 .type global_extern,@object
359 .size global_extern, 16
361 .type global_extern_untagged,@object
362 .globl global_extern_untagged
364 global_extern_untagged
:
366 .size global_extern_untagged, 4
368 .type global_extern_const_definition_but_nonconst_import,@object
369 .section .rodata,"a",@progbits
370 .globl global_extern_const_definition_but_nonconst_import
372 global_extern_const_definition_but_nonconst_import
:
374 .size global_extern_const_definition_but_nonconst_import, 4
376 .type global_extern_untagged_definition_but_tagged_import,@object
378 .globl global_extern_untagged_definition_but_tagged_import
380 global_extern_untagged_definition_but_tagged_import
:
382 .size global_extern_untagged_definition_but_tagged_import, 4
387 ## - clang <input_file.c> -fsanitize=memtag-globals -O2 -S -o - \
388 ## --target=aarch64-linux-android31 -fno-asynchronous-unwind-tables
390 ## <input_file.c> contents:
392 ## int global_extern_outside_this_dso;
400 .globl main // -- Begin function main
408 .size main, .Lfunc_end0-main
410 .memtag global_extern_outside_this_dso // @global_extern_outside_this_dso
411 .type global_extern_outside_this_dso,@object
413 .globl global_extern_outside_this_dso
415 global_extern_outside_this_dso
:
417 .size global_extern_outside_this_dso, 16