1// REQUIRES: arm
2// RUN: llvm-mc -filetype=obj -triple=armv7a-none-linux-gnueabi %S/Inputs/arm-attributes1.s -o %t1.o
3// RUN: llvm-mc -filetype=obj -triple=armv7a-none-linux-gnueabi %s -o %t2.o
4
5// RUN: ld.lld %t1.o %t2.o -o %t
6// RUN: llvm-readobj --arch-specific %t | FileCheck %s
7// RUN: ld.lld %t1.o %t2.o -shared -o %t2
8// RUN: llvm-readobj --arch-specific %t2 | FileCheck %s
9// RUN: ld.lld %t1.o %t2.o -r -o %t3
10// RUN: llvm-readobj --arch-specific %t3 | FileCheck %s
11
12// Check that we retain only 1 SHT_ARM_ATTRIBUTES section. At present we do not
13// try and merge or use the contents of SHT_ARM_ATTRIBUTES sections. We just
14// pass the first one through.
15 .text
16 .syntax unified
17 .eabi_attribute        67, "2.09"      @ Tag_conformance
18 .cpu    cortex-a8
19 .eabi_attribute 6, 10   @ Tag_CPU_arch
20 .eabi_attribute 7, 65   @ Tag_CPU_arch_profile
21 .eabi_attribute 8, 1    @ Tag_ARM_ISA_use
22 .eabi_attribute 9, 2    @ Tag_THUMB_ISA_use
23 .fpu    neon
24 .eabi_attribute 15, 1   @ Tag_ABI_PCS_RW_data
25 .eabi_attribute 16, 1   @ Tag_ABI_PCS_RO_data
26 .eabi_attribute 17, 2   @ Tag_ABI_PCS_GOT_use
27 .eabi_attribute 20, 1   @ Tag_ABI_FP_denormal
28 .eabi_attribute 21, 1   @ Tag_ABI_FP_exceptions
29 .eabi_attribute 23, 3   @ Tag_ABI_FP_number_model
30 .eabi_attribute 34, 1   @ Tag_CPU_unaligned_access
31 .eabi_attribute 24, 1   @ Tag_ABI_align_needed
32 .eabi_attribute 25, 1   @ Tag_ABI_align_preserved
33 .eabi_attribute 38, 1   @ Tag_ABI_FP_16bit_format
34 .eabi_attribute 18, 4   @ Tag_ABI_PCS_wchar_t
35 .eabi_attribute 26, 2   @ Tag_ABI_enum_size
36 .eabi_attribute 14, 0   @ Tag_ABI_PCS_R9_use
37 .eabi_attribute 68, 1   @ Tag_Virtualization_use
38 .globl  _start
39 .p2align        2
40 .type   _start,%function
41_start:
42 .globl func
43 bl func
44 bx lr
45
46// CHECK: BuildAttributes {
47// CHECK-NEXT:   FormatVersion: 0x41
48// CHECK-NEXT:   Section 1 {
49// CHECK-NEXT:     SectionLength: 72
50// CHECK-NEXT:     Vendor: aeabi
51// CHECK-NEXT:     Tag: Tag_File (0x1)
52// CHECK-NEXT:     Size: 62
53// CHECK-NEXT:     FileAttributes {
54// CHECK-NEXT:       Attribute {
55// CHECK-NEXT:         Tag: 67
56// CHECK-NEXT:         TagName: conformance
57// CHECK-NEXT:         Value: 2.09
58// CHECK-NEXT:       }
59// CHECK-NEXT:       Attribute {
60// CHECK-NEXT:         Tag: 5
61// CHECK-NEXT:         TagName: CPU_name
62// CHECK-NEXT:         Value: cortex-a8
63// CHECK-NEXT:       }
64// CHECK-NEXT:       Attribute {
65// CHECK-NEXT:         Tag: 6
66// CHECK-NEXT:         Value: 10
67// CHECK-NEXT:         TagName: CPU_arch
68// CHECK-NEXT:         Description: ARM v7
69// CHECK-NEXT:       }
70// CHECK-NEXT:       Attribute {
71// CHECK-NEXT:         Tag: 7
72// CHECK-NEXT:         Value: 65
73// CHECK-NEXT:         TagName: CPU_arch_profile
74// CHECK-NEXT:         Description: Application
75// CHECK-NEXT:       }
76// CHECK-NEXT:       Attribute {
77// CHECK-NEXT:         Tag: 8
78// CHECK-NEXT:         Value: 1
79// CHECK-NEXT:         TagName: ARM_ISA_use
80// CHECK-NEXT:         Description: Permitted
81// CHECK-NEXT:       }
82// CHECK-NEXT:       Attribute {
83// CHECK-NEXT:         Tag: 9
84// CHECK-NEXT:         Value: 2
85// CHECK-NEXT:         TagName: THUMB_ISA_use
86// CHECK-NEXT:         Description: Thumb-2
87// CHECK-NEXT:       }
88// CHECK-NEXT:       Attribute {
89// CHECK-NEXT:         Tag: 10
90// CHECK-NEXT:         Value: 3
91// CHECK-NEXT:         TagName: FP_arch
92// CHECK-NEXT:         Description: VFPv3
93// CHECK-NEXT:       }
94// CHECK-NEXT:       Attribute {
95// CHECK-NEXT:         Tag: 12
96// CHECK-NEXT:         Value: 1
97// CHECK-NEXT:         TagName: Advanced_SIMD_arch
98// CHECK-NEXT:         Description: NEONv1
99// CHECK-NEXT:       }
100// CHECK-NEXT:       Attribute {
101// CHECK-NEXT:         Tag: 14
102// CHECK-NEXT:         Value: 0
103// CHECK-NEXT:         TagName: ABI_PCS_R9_use
104// CHECK-NEXT:         Description: v6
105// CHECK-NEXT:       }
106// CHECK-NEXT:       Attribute {
107// CHECK-NEXT:         Tag: 15
108// CHECK-NEXT:         Value: 1
109// CHECK-NEXT:         TagName: ABI_PCS_RW_data
110// CHECK-NEXT:         Description: PC-relative
111// CHECK-NEXT:       }
112// CHECK-NEXT:       Attribute {
113// CHECK-NEXT:         Tag: 16
114// CHECK-NEXT:         Value: 1
115// CHECK-NEXT:         TagName: ABI_PCS_RO_data
116// CHECK-NEXT:         Description: PC-relative
117// CHECK-NEXT:       }
118// CHECK-NEXT:       Attribute {
119// CHECK-NEXT:         Tag: 17
120// CHECK-NEXT:         Value: 2
121// CHECK-NEXT:         TagName: ABI_PCS_GOT_use
122// CHECK-NEXT:         Description: GOT-Indirect
123// CHECK-NEXT:       }
124// CHECK-NEXT:       Attribute {
125// CHECK-NEXT:         Tag: 18
126// CHECK-NEXT:         Value: 4
127// CHECK-NEXT:         TagName: ABI_PCS_wchar_t
128// CHECK-NEXT:         Description: 4-byte
129// CHECK-NEXT:       }
130// CHECK-NEXT:       Attribute {
131// CHECK-NEXT:         Tag: 20
132// CHECK-NEXT:         Value: 1
133// CHECK-NEXT:         TagName: ABI_FP_denormal
134// CHECK-NEXT:         Description: IEEE-754
135// CHECK-NEXT:       }
136// CHECK-NEXT:       Attribute {
137// CHECK-NEXT:         Tag: 21
138// CHECK-NEXT:         Value: 1
139// CHECK-NEXT:         TagName: ABI_FP_exceptions
140// CHECK-NEXT:         Description: IEEE-754
141// CHECK-NEXT:       }
142// CHECK-NEXT:       Attribute {
143// CHECK-NEXT:         Tag: 23
144// CHECK-NEXT:         Value: 3
145// CHECK-NEXT:         TagName: ABI_FP_number_model
146// CHECK-NEXT:         Description: IEEE-754
147// CHECK-NEXT:       }
148// CHECK-NEXT:       Attribute {
149// CHECK-NEXT:         Tag: 24
150// CHECK-NEXT:         Value: 1
151// CHECK-NEXT:         TagName: ABI_align_needed
152// CHECK-NEXT:         Description: 8-byte alignment
153// CHECK-NEXT:       }
154// CHECK-NEXT:       Attribute {
155// CHECK-NEXT:         Tag: 25
156// CHECK-NEXT:         Value: 1
157// CHECK-NEXT:         TagName: ABI_align_preserved
158// CHECK-NEXT:         Description: 8-byte data alignment
159// CHECK-NEXT:       }
160// CHECK-NEXT:       Attribute {
161// CHECK-NEXT:         Tag: 26
162// CHECK-NEXT:         Value: 2
163// CHECK-NEXT:         TagName: ABI_enum_size
164// CHECK-NEXT:         Description: Int32
165// CHECK-NEXT:       }
166// CHECK-NEXT:       Attribute {
167// CHECK-NEXT:         Tag: 34
168// CHECK-NEXT:         Value: 1
169// CHECK-NEXT:         TagName: CPU_unaligned_access
170// CHECK-NEXT:         Description: v6-style
171// CHECK-NEXT:       }
172// CHECK-NEXT:       Attribute {
173// CHECK-NEXT:         Tag: 38
174// CHECK-NEXT:         Value: 1
175// CHECK-NEXT:         TagName: ABI_FP_16bit_format
176// CHECK-NEXT:         Description: IEEE-754
177// CHECK-NEXT:       }
178// CHECK-NEXT:       Attribute {
179// CHECK-NEXT:         Tag: 68
180// CHECK-NEXT:         Value: 1
181// CHECK-NEXT:         TagName: Virtualization_use
182// CHECK-NEXT:         Description: TrustZone
183// CHECK-NEXT:       }
184