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