summaryrefslogtreecommitdiff
path: root/lld/test/ELF/arm-tag-vfp-args.s
diff options
context:
space:
mode:
Diffstat (limited to 'lld/test/ELF/arm-tag-vfp-args.s')
-rw-r--r--lld/test/ELF/arm-tag-vfp-args.s72
1 files changed, 72 insertions, 0 deletions
diff --git a/lld/test/ELF/arm-tag-vfp-args.s b/lld/test/ELF/arm-tag-vfp-args.s
new file mode 100644
index 00000000000..b0ff095687f
--- /dev/null
+++ b/lld/test/ELF/arm-tag-vfp-args.s
@@ -0,0 +1,72 @@
+// REQUIRES:arm
+// RUN: llvm-mc -filetype=obj -triple=armv7a-none-linux-gnueabi %S/Inputs/arm-vfp-arg-base.s -o %tbase.o
+// RUN: llvm-mc -filetype=obj -triple=armv7a-none-linux-gnueabi %S/Inputs/arm-vfp-arg-vfp.s -o %tvfp.o
+// RUN: llvm-mc -filetype=obj -triple=armv7a-none-linux-gnueabi %S/Inputs/arm-vfp-arg-toolchain.s -o %ttoolchain.o
+// RUN: llvm-mc -filetype=obj -triple=armv7a-none-linux-gnueabi %S/Inputs/arm-vfp-arg-compat.s -o %tcompat.o
+// RUN: llvm-mc -filetype=obj -triple=armv7a-none-linux-gnueabi %s -o %t.o
+
+// The default for this file is 0 (Base AAPCS)
+// RUN: ld.lld %t.o -o %tdefault
+// RUN: llvm-readobj -file-headers %tdefault | FileCheck -check-prefix=CHECK-BASE %s
+
+// Expect explicit Base AAPCS.
+// RUN: ld.lld %t.o %tbase.o -o %tbase
+// RUN: llvm-readobj -file-headers %tbase | FileCheck -check-prefix=CHECK-BASE %s
+
+// Expect explicit Base AAPCS when linking Base and Compatible.
+// RUN: ld.lld %t.o %tbase.o %tcompat.o -o %tbasecompat
+// RUN: llvm-readobj -file-headers %tbasecompat | FileCheck -check-prefix=CHECK-BASE %s
+
+// CHECK-BASE: Flags [ (0x5000200)
+// CHECK-BASE-NEXT: 0x200
+// CHECK-BASE-NEXT: 0x1000000
+// CHECK-BASE-NEXT: 0x4000000
+// CHECK-BASE-NEXT: ]
+
+// Expect Hard float VFP AAPCS
+// RUN: ld.lld %t.o %tvfp.o -o %tvfp
+// RUN: llvm-readobj -file-headers %tvfp | FileCheck -check-prefix=CHECK-VFP %s
+
+// Expect Hard float VFP AAPCS when linking VFP and Compatible
+// RUN: ld.lld %t.o %tvfp.o %tcompat.o -o %tvfpcompat
+// RUN: llvm-readobj -file-headers %tvfpcompat | FileCheck -check-prefix=CHECK-VFP %s
+
+// CHECK-VFP: Flags [ (0x5000400)
+// CHECK-VFP-NEXT: 0x400
+// CHECK-VFP-NEXT: 0x1000000
+// CHECK-VFP-NEXT: 0x4000000
+// CHECK-VFP-NEXT: ]
+
+// Expect Toolchain specifc to not use either Base or VFP AAPCS
+// RUN: ld.lld %t.o %ttoolchain.o -o %ttoolchain
+// RUN: llvm-readobj -file-headers %ttoolchain | FileCheck -check-prefix=CHECK-TOOLCHAIN %s
+
+// Expect Toolchain and Compatible to have same affect as Toolchain.
+// RUN: ld.lld %t.o %ttoolchain.o %tcompat.o -o %ttoolchaincompat
+// RUN: llvm-readobj -file-headers %ttoolchaincompat | FileCheck -check-prefix=CHECK-TOOLCHAIN %s
+
+// CHECK-TOOLCHAIN: Flags [ (0x5000000)
+// CHECK-TOOLCHAIN-NEXT: 0x1000000
+// CHECK-TOOLCHAIN-NEXT: 0x4000000
+// CHECK-TOOLCHAIN-NEXT: ]
+
+ .arch armv7-a
+ .eabi_attribute 20, 1
+ .eabi_attribute 21, 1
+ .eabi_attribute 23, 3
+ .eabi_attribute 24, 1
+ .eabi_attribute 25, 1
+ .eabi_attribute 26, 2
+ .eabi_attribute 30, 6
+ .eabi_attribute 34, 1
+ .eabi_attribute 18, 4
+ // We do not specify Tag_ABI_VFP_args (.eabi_attribute 28) in this file.
+ // When omitted the value of the tag defaults to 0, however if there
+ // are other files with explicit Tag_ABI_VFP_args we use that in
+ // preference.
+
+
+ .syntax unified
+ .globl _start
+ .type _start, %function
+_start: bx lr