xref: /llvm-project/lld/test/ELF/riscv-attributes.s (revision bd15c7c1ca314708799bdc7bf8a7f27288cf7c85)
1# REQUIRES: riscv
2
3# RUN: rm -rf %t && split-file %s %t && cd %t
4# RUN: llvm-mc -filetype=obj -triple=riscv64 a.s -o a.o
5# RUN: ld.lld -e 0 a.o -o out 2>&1 | count 0
6# RUN: llvm-readelf -S -l --arch-specific out | FileCheck %s --check-prefixes=HDR,CHECK
7# RUN: ld.lld -e 0 a.o a.o -o out1 2>&1 | count 0
8# RUN: llvm-readobj --arch-specific out1 | FileCheck %s
9# RUN: ld.lld -r a.o a.o -o out1 2>&1 | count 0
10# RUN: llvm-readobj --arch-specific out1 | FileCheck %s
11
12# RUN: llvm-mc -filetype=obj -triple=riscv64 b.s -o b.o
13# RUN: llvm-mc -filetype=obj -triple=riscv64 c.s -o c.o
14# RUN: ld.lld a.o b.o c.o -o out2
15# RUN: llvm-readobj --arch-specific out2 | FileCheck %s --check-prefix=CHECK2
16
17# RUN: llvm-mc -filetype=obj -triple=riscv64 unrecognized_ext1.s -o unrecognized_ext1.o
18# RUN: ld.lld -e 0 unrecognized_ext1.o -o unrecognized_ext1 2>&1 | count 0
19# RUN: llvm-readobj --arch-specific unrecognized_ext1 | FileCheck %s --check-prefix=UNRECOGNIZED_EXT1
20
21# RUN: llvm-mc -filetype=obj -triple=riscv64 unrecognized_ext2.s -o unrecognized_ext2.o
22# RUN: ld.lld -e 0 unrecognized_ext2.o -o unrecognized_ext2 2>&1 | count 0
23# RUN: llvm-readobj --arch-specific unrecognized_ext2 | FileCheck %s --check-prefix=UNRECOGNIZED_EXT2
24
25# RUN: llvm-mc -filetype=obj -triple=riscv64 unrecognized_version.s -o unrecognized_version.o
26# RUN: ld.lld -e 0 unrecognized_version.o -o unrecognized_version 2>&1 | count 0
27# RUN: llvm-readobj --arch-specific unrecognized_version | FileCheck %s --check-prefix=UNRECOGNIZED_VERSION
28
29# RUN: llvm-mc -filetype=obj -triple=riscv64 merge_version_test_input.s -o merge_version_test_input.o
30# RUN: ld.lld -e 0 unrecognized_version.o merge_version_test_input.o -o out3 2>&1 | count 0
31# RUN: llvm-readobj --arch-specific out3 | FileCheck %s --check-prefix=CHECK3
32
33# RUN: llvm-mc -filetype=obj -triple=riscv64 invalid_arch1.s -o invalid_arch1.o
34# RUN: not ld.lld invalid_arch1.o -o /dev/null 2>&1 | FileCheck %s --check-prefix=INVALID_ARCH1 --implicit-check-not=error:
35# INVALID_ARCH1: error: invalid_arch1.o:(.riscv.attributes): rv64i2: extension lacks version in expected format
36
37## A zero value attribute is not printed.
38# RUN: llvm-mc -filetype=obj -triple=riscv64 unaligned_access_0.s -o unaligned_access_0.o
39# RUN: ld.lld -e 0 --fatal-warnings a.o unaligned_access_0.o -o unaligned_access_0
40# RUN: llvm-readobj -A unaligned_access_0 | FileCheck /dev/null --implicit-check-not='TagName: unaligned_access'
41
42## Differing stack_align values lead to an error.
43# RUN: llvm-mc -filetype=obj -triple=riscv64 diff_stack_align.s -o diff_stack_align.o
44# RUN: not ld.lld a.o b.o c.o diff_stack_align.o -o /dev/null 2>&1 | FileCheck %s --check-prefix=STACK_ALIGN --implicit-check-not=error:
45# STACK_ALIGN: error: diff_stack_align.o:(.riscv.attributes) has stack_align=32 but a.o:(.riscv.attributes) has stack_align=16
46
47## RISC-V tag merging for atomic_abi values A6C and A7 lead to an error.
48# RUN: llvm-mc -filetype=obj -triple=riscv64  atomic_abi_A6C.s -o atomic_abi_A6C.o
49# RUN: llvm-mc -filetype=obj -triple=riscv64  atomic_abi_A7.s -o atomic_abi_A7.o
50# RUN: not ld.lld atomic_abi_A6C.o atomic_abi_A7.o -o /dev/null 2>&1 | FileCheck %s --check-prefix=ATOMIC_ABI_ERROR --implicit-check-not=error:
51# ATOMIC_ABI_ERROR: error: atomic abi mismatch for .riscv.attributes
52# ATOMIC_ABI_ERROR-NEXT: >>> atomic_abi_A6C.o:(.riscv.attributes): atomic_abi=1
53# ATOMIC_ABI_ERROR-NEXT: >>> atomic_abi_A7.o:(.riscv.attributes): atomic_abi=3
54
55## RISC-V tag merging for atomic_abi values A6C and invalid lead to an error.
56# RUN: llvm-mc -filetype=obj -triple=riscv64  atomic_abi_invalid.s -o atomic_abi_invalid.o
57# RUN: not ld.lld atomic_abi_A6C.o atomic_abi_invalid.o -o /dev/null 2>&1 | FileCheck %s --check-prefix=ATOMIC_ABI_INVALID --implicit-check-not=error:
58# ATOMIC_ABI_INVALID: error: unknown atomic abi for .riscv.attributes
59# ATOMIC_ABI_INVALID-NEXT: >>> atomic_abi_invalid.o:(.riscv.attributes): atomic_abi=42
60
61# RUN: llvm-mc -filetype=obj -triple=riscv64  atomic_abi_A6S.s -o atomic_abi_A6S.o
62# RUN: ld.lld atomic_abi_A6S.o atomic_abi_A6C.o -o atomic_abi_A6C_A6S
63# RUN: llvm-readobj -A atomic_abi_A6C_A6S | FileCheck %s --check-prefix=A6C_A6S
64
65# RUN: ld.lld atomic_abi_A6S.o atomic_abi_A7.o -o atomic_abi_A6S_A7
66# RUN: llvm-readobj -A atomic_abi_A6S_A7 | FileCheck %s --check-prefix=A6S_A7
67
68# RUN: llvm-mc -filetype=obj -triple=riscv64  atomic_abi_unknown.s -o atomic_abi_unknown.o
69# RUN: ld.lld atomic_abi_unknown.o atomic_abi_A6C.o -o atomic_abi_A6C_unknown
70# RUN: llvm-readobj -A atomic_abi_A6C_unknown | FileCheck %s --check-prefixes=UNKNOWN_A6C
71
72# RUN: ld.lld atomic_abi_unknown.o diff_stack_align.o -o atomic_abi_none_unknown
73# RUN: llvm-readobj -A atomic_abi_none_unknown | FileCheck %s --check-prefixes=UNKNOWN_NONE
74
75# RUN: ld.lld diff_stack_align.o atomic_abi_A6C.o -o atomic_abi_A6C_none
76# RUN: llvm-readobj -A atomic_abi_A6C_none | FileCheck %s --check-prefixes=NONE_A6C
77
78# RUN: ld.lld atomic_abi_unknown.o atomic_abi_A6S.o -o atomic_abi_A6S_unknown
79# RUN: llvm-readobj -A atomic_abi_A6S_unknown | FileCheck %s --check-prefix=UNKNOWN_A6S
80
81# RUN: ld.lld atomic_abi_unknown.o atomic_abi_A7.o -o atomic_abi_A7_unknown
82# RUN: llvm-readobj -A atomic_abi_A7_unknown | FileCheck %s --check-prefix=UNKNOWN_A7
83
84# RUN: ld.lld diff_stack_align.o atomic_abi_A7.o -o atomic_abi_A7_none
85# RUN: llvm-readobj -A atomic_abi_A7_none | FileCheck %s --check-prefix=NONE_A7
86
87## The deprecated priv_spec is not handled as GNU ld does.
88## Differing priv_spec attributes lead to an absent attribute.
89# RUN: llvm-mc -filetype=obj -triple=riscv64 diff_priv_spec.s -o diff_priv_spec.o
90# RUN: ld.lld -e 0 --fatal-warnings a.o b.o c.o diff_priv_spec.o -o diff_priv_spec
91# RUN: llvm-readobj -A diff_priv_spec | FileCheck /dev/null --implicit-check-not='TagName: priv_spec'
92
93## Unknown tags currently lead to warnings.
94# RUN: llvm-mc -filetype=obj -triple=riscv64 unknown13.s -o unknown13.o
95# RUN: llvm-mc -filetype=obj -triple=riscv64 unknown13a.s -o unknown13a.o
96# RUN: ld.lld -e 0 unknown13.o unknown13.o unknown13a.o -o unknown13 2>&1 | FileCheck %s --check-prefix=UNKNOWN13 --implicit-check-not=warning:
97# UNKNOWN13-COUNT-2: warning: unknown13.o:(.riscv.attributes): invalid tag 0xd at offset 0x10
98# UNKNOWN13:         warning: unknown13a.o:(.riscv.attributes): invalid tag 0xd at offset 0x10
99
100# RUN: llvm-mc -filetype=obj -triple=riscv64 unknown22.s -o unknown22.o
101# RUN: llvm-mc -filetype=obj -triple=riscv64 unknown22a.s -o unknown22a.o
102# RUN: ld.lld -e 0 unknown22.o unknown22.o unknown22a.o -o unknown22 2>&1 | FileCheck %s --check-prefix=UNKNOWN22 --implicit-check-not=warning:
103# UNKNOWN22-COUNT-2: warning: unknown22.o:(.riscv.attributes): invalid tag 0x16 at offset 0x10
104# UNKNOWN22:         warning: unknown22a.o:(.riscv.attributes): invalid tag 0x16 at offset 0x10
105
106# HDR:      Name              Type             Address          Off    Size   ES Flg Lk Inf Al
107# HDR:      .riscv.attributes RISCV_ATTRIBUTES 0000000000000000 000158 00005a 00      0   0  1{{$}}
108
109# HDR:      Type           Offset   VirtAddr           PhysAddr           FileSiz  MemSiz   Flg Align
110# HDR:      LOAD           0x000000 0x0000000000010000 0x0000000000010000 0x000158 0x000158 R   0x1000
111# HDR-NEXT: GNU_STACK      0x000000 0x0000000000000000 0x0000000000000000 0x000000 0x000000 RW  0
112# HDR-NEXT: ATTRIBUTES     0x000158 0x0000000000000000 0x0000000000000000 0x00005a 0x00005a R   0x1{{$}}
113
114# CHECK:      BuildAttributes {
115# CHECK-NEXT:   FormatVersion: 0x41
116# CHECK-NEXT:   Section 1 {
117# CHECK-NEXT:     SectionLength: 89
118# CHECK-NEXT:     Vendor: riscv
119# CHECK-NEXT:     Tag: Tag_File (0x1)
120# CHECK-NEXT:     Size: 79
121# CHECK-NEXT:     FileAttributes {
122# CHECK-NEXT:       Attribute {
123# CHECK-NEXT:         Tag: 4
124# CHECK-NEXT:         Value: 16
125# CHECK-NEXT:         TagName: stack_align
126# CHECK-NEXT:         Description: Stack alignment is 16-bytes
127# CHECK-NEXT:       }
128# CHECK-NEXT:       Attribute {
129# CHECK-NEXT:         Tag: 5
130# CHECK-NEXT:         TagName: arch
131# CHECK-NEXT:         Value: rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zicsr2p0_zmmul1p0_zaamo1p0_zalrsc1p0{{$}}
132# CHECK-NEXT:       }
133# CHECK-NEXT:     }
134# CHECK-NEXT:   }
135# CHECK-NEXT: }
136
137# CHECK2:      BuildAttributes {
138# CHECK2-NEXT:   FormatVersion: 0x41
139# CHECK2-NEXT:   Section 1 {
140# CHECK2-NEXT:     SectionLength: 132
141# CHECK2-NEXT:     Vendor: riscv
142# CHECK2-NEXT:     Tag: Tag_File (0x1)
143# CHECK2-NEXT:     Size: 122
144# CHECK2-NEXT:     FileAttributes {
145# CHECK2-NEXT:       Attribute {
146# CHECK2-NEXT:         Tag: 4
147# CHECK2-NEXT:         Value: 16
148# CHECK2-NEXT:         TagName: stack_align
149# CHECK2-NEXT:         Description: Stack alignment is 16-bytes
150# CHECK2-NEXT:       }
151# CHECK2-NEXT:       Attribute {
152# CHECK2-NEXT:         Tag: 6
153# CHECK2-NEXT:         Value: 1
154# CHECK2-NEXT:         TagName: unaligned_access
155# CHECK2-NEXT:         Description: Unaligned access
156# CHECK2-NEXT:       }
157# CHECK2-NEXT:       Attribute {
158# CHECK2-NEXT:         Tag: 8
159# CHECK2-NEXT:         TagName: priv_spec
160# CHECK2-NEXT:         Value: 2
161# CHECK2-NEXT:       }
162# CHECK2-NEXT:       Attribute {
163# CHECK2-NEXT:         Tag: 10
164# CHECK2-NEXT:         TagName: priv_spec_minor
165# CHECK2-NEXT:         Value: 2
166# CHECK2-NEXT:       }
167# CHECK2-NEXT:       Attribute {
168# CHECK2-NEXT:         Tag: 5
169# CHECK2-NEXT:         TagName: arch
170# CHECK2-NEXT:         Value: rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zicsr2p0_zmmul1p0_zaamo1p0_zalrsc1p0_zkt1p0_zve32f1p0_zve32x1p0_zvl32b1p0{{$}}
171# CHECK2-NEXT:       }
172# CHECK2-NEXT:     }
173# CHECK2-NEXT:   }
174# CHECK2-NEXT: }
175
176# CHECK3:      BuildAttributes {
177# CHECK3-NEXT:   FormatVersion: 0x41
178# CHECK3-NEXT:   Section 1 {
179# CHECK3-NEXT:     SectionLength: 26
180# CHECK3-NEXT:     Vendor: riscv
181# CHECK3-NEXT:     Tag: Tag_File (0x1)
182# CHECK3-NEXT:     Size: 16
183# CHECK3-NEXT:     FileAttributes {
184# CHECK3-NEXT:       Attribute {
185# CHECK3-NEXT:         Tag: 5
186# CHECK3-NEXT:         TagName: arch
187# CHECK3-NEXT:         Value: rv64i99p0{{$}}
188# CHECK3-NEXT:       }
189# CHECK3-NEXT:     }
190# CHECK3-NEXT:   }
191# CHECK3-NEXT: }
192
193#--- a.s
194.attribute stack_align, 16
195.attribute arch, "rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zmmul1p0"
196.attribute unaligned_access, 0
197
198#--- b.s
199.attribute stack_align, 16
200.attribute arch, "rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zmmul1p0"
201.attribute priv_spec, 2
202.attribute priv_spec_minor, 2
203
204#--- c.s
205.attribute stack_align, 16
206.attribute arch, "rv64i2p1_f2p2_zkt1p0_zve32f1p0_zve32x1p0_zvl32b1p0"
207.attribute unaligned_access, 1
208.attribute priv_spec, 2
209.attribute priv_spec_minor, 2
210
211#--- unrecognized_ext1.s
212# UNRECOGNIZED_EXT1:      BuildAttributes {
213# UNRECOGNIZED_EXT1-NEXT:   FormatVersion: 0x41
214# UNRECOGNIZED_EXT1-NEXT:   Section 1 {
215# UNRECOGNIZED_EXT1-NEXT:     SectionLength: 30
216# UNRECOGNIZED_EXT1-NEXT:     Vendor: riscv
217# UNRECOGNIZED_EXT1-NEXT:     Tag: Tag_File (0x1)
218# UNRECOGNIZED_EXT1-NEXT:     Size: 20
219# UNRECOGNIZED_EXT1-NEXT:     FileAttributes {
220# UNRECOGNIZED_EXT1-NEXT:       Attribute {
221# UNRECOGNIZED_EXT1-NEXT:         Tag: 5
222# UNRECOGNIZED_EXT1-NEXT:         TagName: arch
223# UNRECOGNIZED_EXT1-NEXT:         Value: rv64i2p1_y2p0{{$}}
224# UNRECOGNIZED_EXT1-NEXT:       }
225# UNRECOGNIZED_EXT1-NEXT:     }
226# UNRECOGNIZED_EXT1-NEXT:   }
227# UNRECOGNIZED_EXT1-NEXT: }
228.section .riscv.attributes,"",@0x70000003
229.byte 0x41
230.long .Lend-.riscv.attributes-1
231.asciz "riscv"  # vendor
232.Lbegin:
233.byte 1  # Tag_File
234.long .Lend-.Lbegin
235.byte 5  # Tag_RISCV_arch
236.asciz "rv64i2p1_y2p0"
237.Lend:
238
239#--- unrecognized_ext2.s
240# UNRECOGNIZED_EXT2:      BuildAttributes {
241# UNRECOGNIZED_EXT2-NEXT:   FormatVersion: 0x41
242# UNRECOGNIZED_EXT2-NEXT:   Section 1 {
243# UNRECOGNIZED_EXT2-NEXT:     SectionLength: 36
244# UNRECOGNIZED_EXT2-NEXT:     Vendor: riscv
245# UNRECOGNIZED_EXT2-NEXT:     Tag: Tag_File (0x1)
246# UNRECOGNIZED_EXT2-NEXT:     Size: 26
247# UNRECOGNIZED_EXT2-NEXT:     FileAttributes {
248# UNRECOGNIZED_EXT2-NEXT:       Attribute {
249# UNRECOGNIZED_EXT2-NEXT:         Tag: 5
250# UNRECOGNIZED_EXT2-NEXT:         TagName: arch
251# UNRECOGNIZED_EXT2-NEXT:         Value: rv64i2p1_zmadeup1p0{{$}}
252# UNRECOGNIZED_EXT2-NEXT:       }
253# UNRECOGNIZED_EXT2-NEXT:     }
254# UNRECOGNIZED_EXT2-NEXT:   }
255# UNRECOGNIZED_EXT2-NEXT: }
256.section .riscv.attributes,"",@0x70000003
257.byte 0x41
258.long .Lend-.riscv.attributes-1
259.asciz "riscv"  # vendor
260.Lbegin:
261.byte 1  # Tag_File
262.long .Lend-.Lbegin
263.byte 5  # Tag_RISCV_arch
264.asciz "rv64i2p1_zmadeup1p0"
265.Lend:
266
267#--- unrecognized_version.s
268# UNRECOGNIZED_VERSION:      BuildAttributes {
269# UNRECOGNIZED_VERSION-NEXT:   FormatVersion: 0x41
270# UNRECOGNIZED_VERSION-NEXT:   Section 1 {
271# UNRECOGNIZED_VERSION-NEXT:     SectionLength: 26
272# UNRECOGNIZED_VERSION-NEXT:     Vendor: riscv
273# UNRECOGNIZED_VERSION-NEXT:     Tag: Tag_File (0x1)
274# UNRECOGNIZED_VERSION-NEXT:     Size: 16
275# UNRECOGNIZED_VERSION-NEXT:     FileAttributes {
276# UNRECOGNIZED_VERSION-NEXT:       Attribute {
277# UNRECOGNIZED_VERSION-NEXT:         Tag: 5
278# UNRECOGNIZED_VERSION-NEXT:         TagName: arch
279# UNRECOGNIZED_VERSION-NEXT:         Value: rv64i99p0
280# UNRECOGNIZED_VERSION-NEXT:       }
281# UNRECOGNIZED_VERSION-NEXT:     }
282# UNRECOGNIZED_VERSION-NEXT:   }
283# UNRECOGNIZED_VERSION-NEXT: }
284.section .riscv.attributes,"",@0x70000003
285.byte 0x41
286.long .Lend-.riscv.attributes-1
287.asciz "riscv"  # vendor
288.Lbegin:
289.byte 1  # Tag_File
290.long .Lend-.Lbegin
291.byte 5  # Tag_RISCV_arch
292.asciz "rv64i99p0"
293.Lend:
294
295#--- merge_version_test_input.s
296.section .riscv.attributes,"",@0x70000003
297.byte 0x41
298.long .Lend-.riscv.attributes-1
299.asciz "riscv"  # vendor
300.Lbegin:
301.byte 1  # Tag_File
302.long .Lend-.Lbegin
303.byte 5  # Tag_RISCV_arch
304.asciz "rv64i2p1"
305.Lend:
306
307#--- invalid_arch1.s
308.section .riscv.attributes,"",@0x70000003
309.byte 0x41
310.long .Lend-.riscv.attributes-1
311.asciz "riscv"  # vendor
312.Lbegin:
313.byte 1  # Tag_File
314.long .Lend-.Lbegin
315.byte 5  # Tag_RISCV_arch
316.asciz "rv64i2"
317.Lend:
318
319#--- unaligned_access_0.s
320.attribute unaligned_access, 0
321
322#--- diff_stack_align.s
323.attribute stack_align, 32
324
325#--- diff_priv_spec.s
326.attribute priv_spec, 3
327.attribute priv_spec_minor, 3
328
329#--- atomic_abi_unknown.s
330.attribute atomic_abi, 0
331
332#--- atomic_abi_A6C.s
333.attribute atomic_abi, 1
334
335#--- atomic_abi_A6S.s
336.attribute atomic_abi, 2
337
338#--- atomic_abi_A7.s
339.attribute atomic_abi, 3
340
341#--- atomic_abi_invalid.s
342.attribute atomic_abi, 42
343
344#      UNKNOWN_NONE: BuildAttributes {
345# UNKNOWN_NONE-NEXT:   FormatVersion: 0x41
346# UNKNOWN_NONE-NEXT:   Section 1 {
347# UNKNOWN_NONE-NEXT:     SectionLength: 17
348# UNKNOWN_NONE-NEXT:     Vendor: riscv
349# UNKNOWN_NONE-NEXT:     Tag: Tag_File (0x1)
350# UNKNOWN_NONE-NEXT:     Size: 7
351# UNKNOWN_NONE-NEXT:     FileAttributes {
352# UNKNOWN_NONE-NEXT:       Attribute {
353# UNKNOWN_NONE-NEXT:         Tag: 4
354# UNKNOWN_NONE-NEXT:         Value: 32
355# UNKNOWN_NONE-NEXT:         TagName: stack_align
356# UNKNOWN_NONE-NEXT:         Description: Stack alignment is 32-bytes
357# UNKNOWN_NONE-NEXT:       }
358# UNKNOWN_NONE-NEXT:     }
359# UNKNOWN_NONE-NEXT:   }
360# UNKNOWN_NONE-NEXT: }
361
362#      NONE_A6C: BuildAttributes {
363# NONE_A6C-NEXT:   FormatVersion: 0x41
364# NONE_A6C-NEXT:   Section 1 {
365# NONE_A6C-NEXT:     SectionLength: 19
366# NONE_A6C-NEXT:     Vendor: riscv
367# NONE_A6C-NEXT:     Tag: Tag_File (0x1)
368# NONE_A6C-NEXT:     Size: 9
369# NONE_A6C-NEXT:     FileAttributes {
370# NONE_A6C-NEXT:       Attribute {
371# NONE_A6C-NEXT:         Tag: 14
372# NONE_A6C-NEXT:         Value: 1
373# NONE_A6C-NEXT:         TagName: atomic_abi
374# NONE_A6C-NEXT:         Description: Atomic ABI is 1
375# NONE_A6C-NEXT:       }
376# NONE_A6C-NEXT:       Attribute {
377# NONE_A6C-NEXT:         Tag: 4
378# NONE_A6C-NEXT:         Value: 32
379# NONE_A6C-NEXT:         TagName: stack_align
380# NONE_A6C-NEXT:         Description: Stack alignment is 32-bytes
381# NONE_A6C-NEXT:       }
382# NONE_A6C-NEXT:     }
383# NONE_A6C-NEXT:   }
384# NONE_A6C-NEXT: }
385
386#      UNKNOWN_A6C: BuildAttributes {
387# UNKNOWN_A6C-NEXT:   FormatVersion: 0x41
388# UNKNOWN_A6C-NEXT:   Section 1 {
389# UNKNOWN_A6C-NEXT:     SectionLength: 17
390# UNKNOWN_A6C-NEXT:     Vendor: riscv
391# UNKNOWN_A6C-NEXT:     Tag: Tag_File (0x1)
392# UNKNOWN_A6C-NEXT:     Size: 7
393# UNKNOWN_A6C-NEXT:     FileAttributes {
394# UNKNOWN_A6C-NEXT:       Attribute {
395# UNKNOWN_A6C-NEXT:         Tag: 14
396# UNKNOWN_A6C-NEXT:         Value: 1
397# UNKNOWN_A6C-NEXT:         TagName: atomic_abi
398# UNKNOWN_A6C-NEXT:         Description: Atomic ABI is 1
399# UNKNOWN_A6C-NEXT:       }
400# UNKNOWN_A6C-NEXT:     }
401# UNKNOWN_A6C-NEXT:   }
402# UNKNOWN_A6C-NEXT: }
403
404#      UNKNOWN_A6S: BuildAttributes {
405# UNKNOWN_A6S-NEXT:   FormatVersion: 0x41
406# UNKNOWN_A6S-NEXT:   Section 1 {
407# UNKNOWN_A6S-NEXT:     SectionLength:
408# UNKNOWN_A6S-NEXT:     Vendor: riscv
409# UNKNOWN_A6S-NEXT:     Tag: Tag_File (0x1)
410# UNKNOWN_A6S-NEXT:     Size: 7
411# UNKNOWN_A6S-NEXT:     FileAttributes {
412# UNKNOWN_A6S-NEXT:       Attribute {
413# UNKNOWN_A6S-NEXT:         Tag: 14
414# UNKNOWN_A6S-NEXT:         Value: 2
415# UNKNOWN_A6S-NEXT:         TagName: atomic_abi
416# UNKNOWN_A6S-NEXT:         Description: Atomic ABI is 2
417# UNKNOWN_A6S-NEXT:       }
418# UNKNOWN_A6S-NEXT:     }
419# UNKNOWN_A6S-NEXT:   }
420# UNKNOWN_A6S-NEXT: }
421
422#      NONE_A7: BuildAttributes {
423# NONE_A7-NEXT:   FormatVersion: 0x41
424# NONE_A7-NEXT:   Section 1 {
425# NONE_A7-NEXT:     SectionLength: 19
426# NONE_A7-NEXT:     Vendor: riscv
427# NONE_A7-NEXT:     Tag: Tag_File (0x1)
428# NONE_A7-NEXT:     Size: 9
429# NONE_A7-NEXT:     FileAttributes {
430# NONE_A7-NEXT:       Attribute {
431# NONE_A7-NEXT:         Tag: 14
432# NONE_A7-NEXT:         Value: 3
433# NONE_A7-NEXT:         TagName: atomic_abi
434# NONE_A7-NEXT:         Description: Atomic ABI is 3
435# NONE_A7-NEXT:       }
436# NONE_A7-NEXT:       Attribute {
437# NONE_A7-NEXT:         Tag: 4
438# NONE_A7-NEXT:         Value: 32
439# NONE_A7-NEXT:         TagName: stack_align
440# NONE_A7-NEXT:         Description: Stack alignment is 32-bytes
441# NONE_A7-NEXT:       }
442# NONE_A7-NEXT:     }
443# NONE_A7-NEXT:   }
444# NONE_A7-NEXT: }
445
446
447#      UNKNOWN_A7: BuildAttributes {
448# UNKNOWN_A7-NEXT:   FormatVersion: 0x41
449# UNKNOWN_A7-NEXT:   Section 1 {
450# UNKNOWN_A7-NEXT:     SectionLength: 17
451# UNKNOWN_A7-NEXT:     Vendor: riscv
452# UNKNOWN_A7-NEXT:     Tag: Tag_File (0x1)
453# UNKNOWN_A7-NEXT:     Size: 7
454# UNKNOWN_A7-NEXT:     FileAttributes {
455# UNKNOWN_A7-NEXT:       Attribute {
456# UNKNOWN_A7-NEXT:         Tag: 14
457# UNKNOWN_A7-NEXT:         Value: 3
458# UNKNOWN_A7-NEXT:         TagName: atomic_abi
459# UNKNOWN_A7-NEXT:         Description: Atomic ABI is 3
460# UNKNOWN_A7-NEXT:       }
461# UNKNOWN_A7-NEXT:     }
462# UNKNOWN_A7-NEXT:   }
463# UNKNOWN_A7-NEXT: }
464
465#      A6C_A6S: BuildAttributes {
466# A6C_A6S-NEXT:   FormatVersion: 0x41
467# A6C_A6S-NEXT:   Section 1 {
468# A6C_A6S-NEXT:     SectionLength: 17
469# A6C_A6S-NEXT:     Vendor: riscv
470# A6C_A6S-NEXT:     Tag: Tag_File (0x1)
471# A6C_A6S-NEXT:     Size: 7
472# A6C_A6S-NEXT:     FileAttributes {
473# A6C_A6S-NEXT:       Attribute {
474# A6C_A6S-NEXT:         Tag: 14
475# A6C_A6S-NEXT:         Value: 1
476# A6C_A6S-NEXT:         TagName: atomic_abi
477# A6C_A6S-NEXT:         Description: Atomic ABI is 1
478# A6C_A6S-NEXT:       }
479# A6C_A6S-NEXT:     }
480# A6C_A6S-NEXT:   }
481# A6C_A6S-NEXT: }
482
483#      A6S_A7: BuildAttributes {
484# A6S_A7-NEXT:   FormatVersion: 0x41
485# A6S_A7-NEXT:   Section 1 {
486# A6S_A7-NEXT:     SectionLength: 17
487# A6S_A7-NEXT:     Vendor: riscv
488# A6S_A7-NEXT:     Tag: Tag_File (0x1)
489# A6S_A7-NEXT:     Size: 7
490# A6S_A7-NEXT:     FileAttributes {
491# A6S_A7-NEXT:       Attribute {
492# A6S_A7-NEXT:         Tag: 14
493# A6S_A7-NEXT:         Value: 3
494# A6S_A7-NEXT:         TagName: atomic_abi
495# A6S_A7-NEXT:         Description: Atomic ABI is 3
496# A6S_A7-NEXT:       }
497# A6S_A7-NEXT:     }
498# A6S_A7-NEXT:   }
499# A6S_A7-NEXT: }
500
501#--- unknown13.s
502.attribute 13, "0"
503#--- unknown13a.s
504.attribute 13, "1"
505
506#--- unknown22.s
507.attribute 22, 1
508#--- unknown22a.s
509.attribute 22, 2
510