xref: /llvm-project/lld/test/ELF/arm-tag-vfp-args-errs.s (revision cb1d6ea8cff7cbfc4218f91d1bd81544a44a61d4)
1// REQUIRES:arm
2
3// RUN: rm -rf %t
4// RUN: split-file %s %t
5
6// RUN: llvm-mc -filetype=obj -triple=armv7a-none-linux-gnueabi %S/Inputs/arm-vfp-arg-base.s -o %t/base.o
7// RUN: llvm-mc -filetype=obj -triple=armv7a-none-linux-gnueabi %S/Inputs/arm-vfp-arg-vfp.s -o %t/vfp.o
8// RUN: llvm-mc -filetype=obj -triple=armv7a-none-linux-gnueabi %S/Inputs/arm-vfp-arg-toolchain.s -o %t/toolchain.o
9// RUN: llvm-mc -filetype=obj -triple=armv7a-none-linux-gnueabi %t/main.s -o %t/main.o
10// RUN: llvm-mc -filetype=obj -triple=armv7a-none-linux-gnueabi %t/vendor.s -o %t/vendor.o
11// RUN: not ld.lld %t/main.o %t/base.o %t/vfp.o -o%t/a.out 2>&1 | FileCheck %s
12// RUN: not ld.lld %t/main.o %t/base.o %t/vendor.o -o%t/a.out 2>&1 | FileCheck %s
13// RUN: not ld.lld %t/main.o %t/base.o %t/toolchain.o -o%t/a.out 2>&1 | FileCheck %s
14// RUN: not ld.lld %t/main.o %t/vfp.o %t/base.o -o%t/a.out 2>&1 | FileCheck %s
15// RUN: not ld.lld %t/main.o %t/vfp.o %t/toolchain.o -o%t/a.out 2>&1 | FileCheck %s
16// RUN: not ld.lld %t/main.o %t/toolchain.o %t/base.o -o%t/a.out 2>&1 | FileCheck %s
17// RUN: not ld.lld %t/main.o %t/toolchain.o %t/vfp.o -o%t/a.out 2>&1 | FileCheck %s
18
19// CHECK: incompatible Tag_ABI_VFP_args
20
21//--- main.s
22
23	.arch armv7-a
24	.eabi_attribute 20, 1
25	.eabi_attribute 21, 1
26	.eabi_attribute 23, 3
27	.eabi_attribute 24, 1
28	.eabi_attribute 25, 1
29	.eabi_attribute 26, 2
30	.eabi_attribute 30, 6
31	.eabi_attribute 34, 1
32	.eabi_attribute 18, 4
33        .eabi_attribute 28, 3 // Tag_ABI_VFP_args = 3 (Compatible with all)
34
35        .syntax unified
36        .globl _start
37        .type _start, %function
38_start: bx lr
39
40//--- vendor.s
41
42        .syntax unified
43
44        // Manually construct a custom .ARM.attributes section
45        .section .ARM.attributes,"",%0x70000003 // SHT_ARM_ATTRIBUTES
46
47        // Initial byte giving the section format version
48        .byte 'A'
49
50        // Subsection with a name that won't be recognised as a known vendor
51vendor_subsect_start:
52        .word vendor_subsect_end - vendor_subsect_start // subsection length
53        .asciz "ShouldBeIgnored" // vendor name
54        .dcb.b 64, 0xff // dummy vendor section contents
55vendor_subsect_end:
56
57        // Subsection that should be identical to the attributes defined by
58        // Inputs/arm-vfp-arg-vfp.s
59aeabi_subsect_start:
60        .word aeabi_subsect_end - aeabi_subsect_start
61        .asciz "aeabi" // vendor name indicating the standard subsection
62file_subsubsect_start:
63        .byte 1 // introduce sub-subsection of attributes for the whole file
64        .word file_subsubsect_end - file_subsubsect_start // sub-subsection len
65        .byte 5 // CPU_name
66        .asciz "7-A"
67        .byte 6, 10 // CPU_arch = ARM v7
68        .byte 7, 'A' // CPU_arch_profile = Application
69        .byte 8, 1 // ARM_ISA_use = Permitted
70        .byte 9, 2 // THUMB_ISA_use = Thumb-2
71        .byte 18, 4 // ABI_PCS_wchar_t = 4-byte
72        .byte 20, 1 // ABI_FP_denormal = IEEE-754
73        .byte 21, 1 // ABI_FP_exceptions = IEEE-754
74        .byte 23, 3 // ABI_FP_number_model = IEEE-754
75        .byte 24, 1 // ABI_align_needed = 8-byte alignment
76        .byte 25, 1 // ABI_align_preserved = 8-byte data alignment
77        .byte 26, 2 // ABI_enum_size = Int32
78        .byte 28, 1 // ABI_VFP_args = AAPCS VFP
79        .byte 30, 6 // ABI_optimization_goals = Best Debugging
80        .byte 34, 1 // CPU_unaligned_access = v6-style
81file_subsubsect_end:
82aeabi_subsect_end:
83
84        .text
85        .global f1
86        .type f1, %function
87f1:     bx lr
88