summaryrefslogtreecommitdiffstats
path: root/llvm/test
diff options
context:
space:
mode:
authorEvgeniy Stepanov <eugeni.stepanov@gmail.com>2018-02-09 00:59:10 +0000
committerEvgeniy Stepanov <eugeni.stepanov@gmail.com>2018-02-09 00:59:10 +0000
commit80ccda2d4bd3d5aed4a7c49d3d4d4adbb20318f3 (patch)
treee00896184b4f4185b3a95408854f77a6db752615 /llvm/test
parent7d3dde3c6b31b513a9c3e6b8d9cf8acc530dbab0 (diff)
downloadbcm5719-llvm-80ccda2d4bd3d5aed4a7c49d3d4d4adbb20318f3.tar.gz
bcm5719-llvm-80ccda2d4bd3d5aed4a7c49d3d4d4adbb20318f3.zip
[hwasan] Fix kernel instrumentation of stack.
Summary: Kernel addresses have 0xFF in the most significant byte. A tag can not be pushed there with OR (tag << 56); use AND ((tag << 56) | 0x00FF..FF) instead. Reviewers: kcc, andreyknvl Subscribers: srhines, llvm-commits, hiraditya Differential Revision: https://reviews.llvm.org/D42941 llvm-svn: 324691
Diffstat (limited to 'llvm/test')
-rw-r--r--llvm/test/Instrumentation/HWAddressSanitizer/kernel-alloca.ll29
1 files changed, 29 insertions, 0 deletions
diff --git a/llvm/test/Instrumentation/HWAddressSanitizer/kernel-alloca.ll b/llvm/test/Instrumentation/HWAddressSanitizer/kernel-alloca.ll
new file mode 100644
index 00000000000..6e56919960a
--- /dev/null
+++ b/llvm/test/Instrumentation/HWAddressSanitizer/kernel-alloca.ll
@@ -0,0 +1,29 @@
+; Test basic address sanitizer instrumentation.
+;
+; RUN: opt < %s -hwasan -hwasan-kernel=1 -S | FileCheck %s
+
+target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
+target triple = "aarch64--linux-android"
+
+declare void @use32(i32*)
+
+define void @test_alloca() sanitize_hwaddress {
+; CHECK-LABEL: @test_alloca(
+; CHECK: %[[FP:[^ ]*]] = call i8* @llvm.frameaddress(i32 0)
+; CHECK: %[[A:[^ ]*]] = ptrtoint i8* %[[FP]] to i64
+; CHECK: %[[B:[^ ]*]] = lshr i64 %[[A]], 20
+; CHECK: %[[BASE_TAG:[^ ]*]] = xor i64 %[[A]], %[[B]]
+
+; CHECK: %[[X:[^ ]*]] = alloca i32, align 16
+; CHECK: %[[X_TAG:[^ ]*]] = xor i64 %[[BASE_TAG]], 0
+; CHECK: %[[X1:[^ ]*]] = ptrtoint i32* %[[X]] to i64
+; CHECK: %[[C:[^ ]*]] = shl i64 %[[X_TAG]], 56
+; CHECK: %[[D:[^ ]*]] = or i64 %[[C]], 72057594037927935
+; CHECK: %[[E:[^ ]*]] = and i64 %[[X1]], %[[D]]
+; CHECK: %[[X_HWASAN:[^ ]*]] = inttoptr i64 %[[E]] to i32*
+
+entry:
+ %x = alloca i32, align 4
+ call void @use32(i32* nonnull %x)
+ ret void
+}
OpenPOWER on IntegriCloud