diff options
author | Evgeniy Stepanov <eugeni.stepanov@gmail.com> | 2014-03-18 13:30:56 +0000 |
---|---|---|
committer | Evgeniy Stepanov <eugeni.stepanov@gmail.com> | 2014-03-18 13:30:56 +0000 |
commit | 610469f4c27b8813e82a13db147b99de27a66312 (patch) | |
tree | 4414a65603f822e2a9ac89993b3c512d6dec16ef /test/Instrumentation | |
parent | c605296342c38e16799a70d2a0dc0b4018a20f31 (diff) | |
download | llvm-610469f4c27b8813e82a13db147b99de27a66312.tar.gz llvm-610469f4c27b8813e82a13db147b99de27a66312.tar.bz2 llvm-610469f4c27b8813e82a13db147b99de27a66312.tar.xz |
[msan] Origin tracking with history.
LLVM part of MSan implementation of advanced origin tracking,
when we record not only creation point, but all locations where
an uninitialized value was stored to memory, too.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@204151 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/Instrumentation')
-rw-r--r-- | test/Instrumentation/MemorySanitizer/store-origin.ll | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/test/Instrumentation/MemorySanitizer/store-origin.ll b/test/Instrumentation/MemorySanitizer/store-origin.ll new file mode 100644 index 0000000000..75e531969d --- /dev/null +++ b/test/Instrumentation/MemorySanitizer/store-origin.ll @@ -0,0 +1,34 @@ +; RUN: opt < %s -msan -msan-check-access-address=0 -msan-track-origins=1 -S | FileCheck -check-prefix=CHECK -check-prefix=CHECK-ORIGINS1 %s +; RUN: opt < %s -msan -msan-check-access-address=0 -msan-track-origins=2 -S | FileCheck -check-prefix=CHECK -check-prefix=CHECK-ORIGINS2 %s + +target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128" +target triple = "x86_64-unknown-linux-gnu" + + +; Check origin instrumentation of stores + +define void @Store(i32* nocapture %p, i32 %x) nounwind uwtable sanitize_memory { +entry: + store i32 %x, i32* %p, align 4 + ret void +} + +; CHECK: @Store +; CHECK: load {{.*}} @__msan_param_tls +; CHECK: [[ORIGIN:%[01-9a-z]+]] = load {{.*}} @__msan_param_origin_tls +; CHECK: store +; CHECK: icmp +; CHECK: br i1 +; CHECK: <label> + +; Origin tracking level 1: simply store the origin value +; CHECK-ORIGINS1: store i32 {{.*}}[[ORIGIN]], + +; Origin tracking level 2: pass origin value through __msan_chain_origin and store the result. +; CHECK-ORIGINS2: [[ORIGIN2:%[01-9a-z]+]] = call i32 @__msan_chain_origin(i32 {{.*}}[[ORIGIN]]) +; CHECK-ORIGINS2: store i32 {{.*}}[[ORIGIN2]], + +; CHECK: br label +; CHECK: <label> +; CHECK: store +; CHECK: ret void |