[PATCH] D69541: [msan] Remove more attributes from sanitized functions.
Evgenii Stepanov via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Oct 28 17:53:20 PDT 2019
eugenis created this revision.
eugenis added reviewers: pcc, vitalybuka.
Herald added a subscriber: hiraditya.
Herald added a project: LLVM.
MSan instrumentation adds stores and loads even to pure
readonly/writeonly functions. It is removing some of those attributes
from instrumented functions and call targets, but apparently not enough.
Remove writeonly, argmemonly and speculatable in addition to readonly /
readnone.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D69541
Files:
llvm/lib/Transforms/Instrumentation/MemorySanitizer.cpp
llvm/test/Instrumentation/MemorySanitizer/attributes.ll
Index: llvm/test/Instrumentation/MemorySanitizer/attributes.ll
===================================================================
--- /dev/null
+++ llvm/test/Instrumentation/MemorySanitizer/attributes.ll
@@ -0,0 +1,47 @@
+; RUN: opt < %s -S -passes='module(msan-module),function(msan)' 2>&1 | FileCheck %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"
+
+
+declare void @a_() sanitize_memory readnone
+declare void @b_() sanitize_memory readonly
+declare void @c_() sanitize_memory writeonly
+declare void @d_(i32* %p) sanitize_memory writeonly argmemonly
+declare void @e_() sanitize_memory speculatable
+
+define void @a() sanitize_memory readnone {
+entry:
+ call void @a_()
+ ret void
+}
+
+define void @b() sanitize_memory readonly {
+entry:
+ call void @b_()
+ ret void
+}
+
+define void @c() sanitize_memory writeonly {
+entry:
+ call void @c_()
+ ret void
+}
+
+define void @d(i32* %p) sanitize_memory writeonly argmemonly {
+entry:
+ call void @d_(i32* %p)
+ ret void
+}
+
+define void @e() sanitize_memory speculatable {
+entry:
+ call void @e_()
+ ret void
+}
+
+; CHECK-NOT: readnone
+; CHECK-NOT: readonly
+; CHECK-NOT: writeonly
+; CHECK-NOT: argmemonly
+; CHECK-NOT: speculatable
Index: llvm/lib/Transforms/Instrumentation/MemorySanitizer.cpp
===================================================================
--- llvm/lib/Transforms/Instrumentation/MemorySanitizer.cpp
+++ llvm/lib/Transforms/Instrumentation/MemorySanitizer.cpp
@@ -3278,7 +3278,10 @@
// Clear out readonly/readnone attributes.
AttrBuilder B;
B.addAttribute(Attribute::ReadOnly)
- .addAttribute(Attribute::ReadNone);
+ .addAttribute(Attribute::ReadNone)
+ .addAttribute(Attribute::WriteOnly)
+ .addAttribute(Attribute::ArgMemOnly)
+ .addAttribute(Attribute::Speculatable);
Func->removeAttributes(AttributeList::FunctionIndex, B);
}
@@ -4595,7 +4598,10 @@
// Clear out readonly/readnone attributes.
AttrBuilder B;
B.addAttribute(Attribute::ReadOnly)
- .addAttribute(Attribute::ReadNone);
+ .addAttribute(Attribute::ReadNone)
+ .addAttribute(Attribute::WriteOnly)
+ .addAttribute(Attribute::ArgMemOnly)
+ .addAttribute(Attribute::Speculatable);
F.removeAttributes(AttributeList::FunctionIndex, B);
return Visitor.runOnFunction();
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D69541.226822.patch
Type: text/x-patch
Size: 2530 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20191029/ff83c377/attachment.bin>
More information about the llvm-commits
mailing list