From a8ff6c0b09718a048ec9b9fc7db33fd39f6500cc Mon Sep 17 00:00:00 2001 From: Pablo Barrio Date: Thu, 16 Jan 2020 11:47:37 +0000 Subject: [PATCH] [AArch64] Add test for DWARF return address signing Summary: Patch by LukeCheeseman and pbarrio Reviewers: samparker, chill Subscribers: kristof.beyls, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D72835 --- ...sign-return-address-cfi-negate-ra-state.ll | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 llvm/test/CodeGen/AArch64/sign-return-address-cfi-negate-ra-state.ll diff --git a/llvm/test/CodeGen/AArch64/sign-return-address-cfi-negate-ra-state.ll b/llvm/test/CodeGen/AArch64/sign-return-address-cfi-negate-ra-state.ll new file mode 100644 index 000000000000..0dc7b24bca67 --- /dev/null +++ b/llvm/test/CodeGen/AArch64/sign-return-address-cfi-negate-ra-state.ll @@ -0,0 +1,35 @@ +; RUN: llc -mtriple=aarch64-none-eabi < %s | FileCheck --check-prefixes CHECK,CHECK-V8A %s +; RUN: llc -mtriple=aarch64-none-eabi -mattr=v8.3a < %s | FileCheck --check-prefixes CHECK,CHECK-V83A %s +; RUN: llc -mtriple=aarch64-none-eabi -filetype=obj -o - <%s | llvm-dwarfdump -v - | FileCheck --check-prefix=CHECK-DUMP %s + +@.str = private unnamed_addr constant [15 x i8] c"some exception\00", align 1 +@_ZTIPKc = external dso_local constant i8* + +; CHECK: @_Z3fooi +; CHECK-V8A: hint #25 +; CHECK-V83A: paciasp +; CHECK-NEXT: .cfi_negate_ra_state +; CHECK-NOT: .cfi_negate_ra_state +define dso_local i32 @_Z3fooi(i32 %x) #0 { +entry: + %retval = alloca i32, align 4 + %x.addr = alloca i32, align 4 + store i32 %x, i32* %x.addr, align 4 + %exception = call i8* @__cxa_allocate_exception(i64 8) #1 + %0 = bitcast i8* %exception to i8** + store i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str, i32 0, i32 0), i8** %0, align 16 + call void @__cxa_throw(i8* %exception, i8* bitcast (i8** @_ZTIPKc to i8*), i8* null) #2 + unreachable + +return: ; No predecessors! + %1 = load i32, i32* %retval, align 4 + ret i32 %1 +} + +declare dso_local i8* @__cxa_allocate_exception(i64) + +declare dso_local void @__cxa_throw(i8*, i8*, i8*) + +attributes #0 = { "sign-return-address"="all" } + +;CHECK-DUMP: DW_CFA_AARCH64_negate_ra_state