r312232 - docs: don't say that data flow tracing interface is unstable

2017-08-31 Thread Dmitry Vyukov via cfe-commits
Author: dvyukov
Date: Thu Aug 31 04:02:44 2017
New Revision: 312232

URL: http://llvm.org/viewvc/llvm-project?rev=312232&view=rev
Log:
docs: don't say that data flow tracing interface is unstable

We are starting to use data flow tracing in kernel.
The interface is not subject to change anymore.

Reviewed in https://reviews.llvm.org/D37303


Modified:
cfe/trunk/docs/SanitizerCoverage.rst

Modified: cfe/trunk/docs/SanitizerCoverage.rst
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/docs/SanitizerCoverage.rst?rev=312232&r1=312231&r2=312232&view=diff
==
--- cfe/trunk/docs/SanitizerCoverage.rst (original)
+++ cfe/trunk/docs/SanitizerCoverage.rst Thu Aug 31 04:02:44 2017
@@ -281,8 +281,6 @@ the `LLVM GEP instructions 

Re: [PATCH] D24628: [ASAN] Pass previous stack information through __sanitizer_finish_switch_fiber

2016-09-19 Thread Dmitry Vyukov via cfe-commits
dvyukov added a comment.

We need a test that passes non-NULL to these arguments and shows how to use the 
returned values.



Comment at: test/asan/TestCases/Linux/swapcontext_annotation.cc:176-199
@@ -164,7 +175,26 @@
 ret += Run(argc - 1, 0, stack);
+// CHECK: Child stack: [[CHILD_STACK:0x[0-9a-f]*]]
+// CHECK: Main context from: [[CHILD_STACK]] 524288
 ret += Run(argc - 1, 1, stack);
+// CHECK: Child stack: [[CHILD_STACK:0x[0-9a-f]*]]
+// CHECK: Main context from: [[CHILD_STACK]] 524288
 ret += Run(argc - 1, 2, stack);
+// CHECK: Child stack: [[CHILD_STACK:0x[0-9a-f]*]]
+// CHECK: NextChild stack: [[NEXT_CHILD_STACK:0x[0-9a-f]*]]
+// CHECK: NextChild from: [[CHILD_STACK]] 524288
+// CHECK: Main context from: [[NEXT_CHILD_STACK]] 524288
 ret += Run(argc - 1, 0, heap);
+// CHECK: Child stack: [[CHILD_STACK:0x[0-9a-f]*]]
+// CHECK: Main context from: [[CHILD_STACK]] 524288
 ret += Run(argc - 1, 1, heap);
+// CHECK: Child stack: [[CHILD_STACK:0x[0-9a-f]*]]
+// CHECK: Main context from: [[CHILD_STACK]] 524288
 ret += Run(argc - 1, 2, heap);
+// CHECK: Child stack: [[CHILD_STACK:0x[0-9a-f]*]]
+// CHECK: NextChild stack: [[NEXT_CHILD_STACK:0x[0-9a-f]*]]
+// CHECK: NextChild from: [[CHILD_STACK]] 524288
+// CHECK: Main context from: [[NEXT_CHILD_STACK]] 524288
+
+// CHECK: Iteration 0 passed
+printf("Iteration %d passed\n", i);
   }

andriigrynenko wrote:
> This only checks the first iteration of the loop. Can I do it better with 
> FileCheck ? 
Yes, you can add CHECKs for the second iteration as well.



https://reviews.llvm.org/D24628



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


Re: [PATCH] D24628: [ASAN] Pass previous stack information through __sanitizer_finish_switch_fiber

2016-09-27 Thread Dmitry Vyukov via cfe-commits
dvyukov added a comment.

LGTM

Any other comments? Or I will submit it tomorrow.



Comment at: test/asan/TestCases/Linux/swapcontext_annotation.cc:7
@@ +6,3 @@
+// RUN: %clangxx_asan -std=c++11 -lpthread -O3 %s -o %t && %run %t 2>&1 | 
FileCheck %s
+// RUN: %clangxx_asan -std=c++11 -lpthread -O0 %s -o %t && %run %t 2>&1 | 
FileCheck <( seq 60 | xargs -i -- grep LOOPCHECK %s ) --check-prefix LOOPCHECK
+// RUN: %clangxx_asan -std=c++11 -lpthread -O1 %s -o %t && %run %t 2>&1 | 
FileCheck <( seq 60 | xargs -i -- grep LOOPCHECK %s ) --check-prefix LOOPCHECK

nice


https://reviews.llvm.org/D24628



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


Re: [PATCH] D24628: [ASAN] Pass previous stack information through __sanitizer_finish_switch_fiber

2016-09-28 Thread Dmitry Vyukov via cfe-commits
dvyukov accepted this revision.
dvyukov added a comment.
This revision is now accepted and ready to land.

Submitted in 282582.


https://reviews.llvm.org/D24628



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] a1255dc - Use-after-return sanitizer binary metadata

2022-11-29 Thread Dmitry Vyukov via cfe-commits

Author: Dmitry Vyukov
Date: 2022-11-29T17:37:36+01:00
New Revision: a1255dc467f7ce57a966efa764ee91d9115a

URL: 
https://github.com/llvm/llvm-project/commit/a1255dc467f7ce57a966efa764ee91d9115a
DIFF: 
https://github.com/llvm/llvm-project/commit/a1255dc467f7ce57a966efa764ee91d9115a.diff

LOG: Use-after-return sanitizer binary metadata

Currently per-function metadata consists of:
(start-pc, size, features)

This adds a new UAR feature and if it's set an additional element:
(start-pc, size, features, stack-args-size)

Reviewed By: melver

Differential Revision: https://reviews.llvm.org/D136078

Added: 
llvm/lib/CodeGen/SanitizerBinaryMetadata.cpp
llvm/test/Instrumentation/SanitizerBinaryMetadata/common.h
llvm/test/Instrumentation/SanitizerBinaryMetadata/covered.cpp
llvm/test/Instrumentation/SanitizerBinaryMetadata/lit.local.cfg
llvm/test/Instrumentation/SanitizerBinaryMetadata/uar.cpp

Modified: 
clang/include/clang/Basic/CodeGenOptions.def
clang/include/clang/Basic/CodeGenOptions.h
clang/include/clang/Driver/Options.td
clang/lib/CodeGen/BackendUtil.cpp
clang/lib/Driver/SanitizerArgs.cpp
llvm/include/llvm/CodeGen/CodeGenPassBuilder.h
llvm/include/llvm/CodeGen/MachinePassRegistry.def
llvm/include/llvm/CodeGen/Passes.h
llvm/include/llvm/InitializePasses.h
llvm/include/llvm/Transforms/Instrumentation.h
llvm/include/llvm/Transforms/Instrumentation/SanitizerBinaryMetadata.h
llvm/lib/CodeGen/CMakeLists.txt
llvm/lib/CodeGen/CodeGen.cpp
llvm/lib/CodeGen/TargetPassConfig.cpp
llvm/lib/Transforms/Instrumentation/SanitizerBinaryMetadata.cpp

Removed: 




diff  --git a/clang/include/clang/Basic/CodeGenOptions.def 
b/clang/include/clang/Basic/CodeGenOptions.def
index 43521b76652db..81d5ccd4856d4 100644
--- a/clang/include/clang/Basic/CodeGenOptions.def
+++ b/clang/include/clang/Basic/CodeGenOptions.def
@@ -288,6 +288,8 @@ CODEGENOPT(SanitizeCoverageTraceLoads, 1, 0) ///< Enable 
tracing of loads.
 CODEGENOPT(SanitizeCoverageTraceStores, 1, 0) ///< Enable tracing of stores.
 CODEGENOPT(SanitizeBinaryMetadataCovered, 1, 0) ///< Emit PCs for covered 
functions.
 CODEGENOPT(SanitizeBinaryMetadataAtomics, 1, 0) ///< Emit PCs for atomic 
operations.
+CODEGENOPT(SanitizeBinaryMetadataUAR, 1, 0) ///< Emit PCs for start of 
functions
+///< that are subject for 
use-after-return checking.
 CODEGENOPT(SanitizeStats , 1, 0) ///< Collect statistics for sanitizers.
 CODEGENOPT(SimplifyLibCalls  , 1, 1) ///< Set when -fbuiltin is enabled.
 CODEGENOPT(SoftFloat , 1, 0) ///< -soft-float.

diff  --git a/clang/include/clang/Basic/CodeGenOptions.h 
b/clang/include/clang/Basic/CodeGenOptions.h
index 13794035c9076..a1a20995f211d 100644
--- a/clang/include/clang/Basic/CodeGenOptions.h
+++ b/clang/include/clang/Basic/CodeGenOptions.h
@@ -497,7 +497,8 @@ class CodeGenOptions : public CodeGenOptionsBase {
 
   // Check if any one of SanitizeBinaryMetadata* is enabled.
   bool hasSanitizeBinaryMetadata() const {
-return SanitizeBinaryMetadataCovered || SanitizeBinaryMetadataAtomics;
+return SanitizeBinaryMetadataCovered || SanitizeBinaryMetadataAtomics ||
+   SanitizeBinaryMetadataUAR;
   }
 };
 

diff  --git a/clang/include/clang/Driver/Options.td 
b/clang/include/clang/Driver/Options.td
index 8da5e25bd38d0..1d577ab70788e 100644
--- a/clang/include/clang/Driver/Options.td
+++ b/clang/include/clang/Driver/Options.td
@@ -5575,6 +5575,10 @@ def fexperimental_sanitize_metadata_EQ_atomics
 : Flag<["-"], "fexperimental-sanitize-metadata=atomics">,
   HelpText<"Emit PCs for atomic operations used by binary analysis 
sanitizers">,
   MarshallingInfoFlag>;
+def fexperimental_sanitize_metadata_EQ_uar
+: Flag<["-"], "fexperimental-sanitize-metadata=uar">,
+  HelpText<"Emit PCs for start of functions that are subject for 
use-after-return checking.">,
+  MarshallingInfoFlag>;
 def fpatchable_function_entry_offset_EQ
 : Joined<["-"], "fpatchable-function-entry-offset=">, MetaVarName<"">,
   HelpText<"Generate M NOPs before function entry">,

diff  --git a/clang/lib/CodeGen/BackendUtil.cpp 
b/clang/lib/CodeGen/BackendUtil.cpp
index 2b241967f5e7b..717ec33441232 100644
--- a/clang/lib/CodeGen/BackendUtil.cpp
+++ b/clang/lib/CodeGen/BackendUtil.cpp
@@ -234,6 +234,7 @@ getSanitizerBinaryMetadataOptions(const CodeGenOptions 
&CGOpts) {
   SanitizerBinaryMetadataOptions Opts;
   Opts.Covered = CGOpts.SanitizeBinaryMetadataCovered;
   Opts.Atomics = CGOpts.SanitizeBinaryMetadataAtomics;
+  Opts.UAR = CGOpts.SanitizeBinaryMetadataUAR;
   return Opts;
 }
 

diff  --git a/clang/lib/Driver/SanitizerArgs.cpp 
b/clang/lib/Driver/SanitizerArgs.cpp
index af27dbc92c8e6..96a701366e37b 100644
--- a/clang/lib/Driver/SanitizerArgs.cpp
+++ b/clang/lib/Driver/SanitizerArgs.cpp
@@ -104,6 +104,7 @@ enum Cover

[clang] e6aea4a - Use-after-return sanitizer binary metadata

2022-11-30 Thread Dmitry Vyukov via cfe-commits

Author: Dmitry Vyukov
Date: 2022-11-30T09:14:19+01:00
New Revision: e6aea4a5db09c845276ece92737a6aac97794100

URL: 
https://github.com/llvm/llvm-project/commit/e6aea4a5db09c845276ece92737a6aac97794100
DIFF: 
https://github.com/llvm/llvm-project/commit/e6aea4a5db09c845276ece92737a6aac97794100.diff

LOG: Use-after-return sanitizer binary metadata

Currently per-function metadata consists of:
(start-pc, size, features)

This adds a new UAR feature and if it's set an additional element:
(start-pc, size, features, stack-args-size)

Reviewed By: melver

Differential Revision: https://reviews.llvm.org/D136078

Added: 
llvm/lib/CodeGen/SanitizerBinaryMetadata.cpp
llvm/test/Instrumentation/SanitizerBinaryMetadata/common.h
llvm/test/Instrumentation/SanitizerBinaryMetadata/covered.cpp
llvm/test/Instrumentation/SanitizerBinaryMetadata/lit.local.cfg
llvm/test/Instrumentation/SanitizerBinaryMetadata/uar.cpp

Modified: 
clang/include/clang/Basic/CodeGenOptions.def
clang/include/clang/Basic/CodeGenOptions.h
clang/include/clang/Driver/Options.td
clang/lib/CodeGen/BackendUtil.cpp
clang/lib/Driver/SanitizerArgs.cpp
llvm/include/llvm/CodeGen/CodeGenPassBuilder.h
llvm/include/llvm/CodeGen/MachinePassRegistry.def
llvm/include/llvm/CodeGen/Passes.h
llvm/include/llvm/InitializePasses.h
llvm/include/llvm/Transforms/Instrumentation.h
llvm/include/llvm/Transforms/Instrumentation/SanitizerBinaryMetadata.h
llvm/lib/CodeGen/CMakeLists.txt
llvm/lib/CodeGen/CodeGen.cpp
llvm/lib/CodeGen/TargetPassConfig.cpp
llvm/lib/Transforms/Instrumentation/SanitizerBinaryMetadata.cpp

Removed: 




diff  --git a/clang/include/clang/Basic/CodeGenOptions.def 
b/clang/include/clang/Basic/CodeGenOptions.def
index 43521b76652db..81d5ccd4856d4 100644
--- a/clang/include/clang/Basic/CodeGenOptions.def
+++ b/clang/include/clang/Basic/CodeGenOptions.def
@@ -288,6 +288,8 @@ CODEGENOPT(SanitizeCoverageTraceLoads, 1, 0) ///< Enable 
tracing of loads.
 CODEGENOPT(SanitizeCoverageTraceStores, 1, 0) ///< Enable tracing of stores.
 CODEGENOPT(SanitizeBinaryMetadataCovered, 1, 0) ///< Emit PCs for covered 
functions.
 CODEGENOPT(SanitizeBinaryMetadataAtomics, 1, 0) ///< Emit PCs for atomic 
operations.
+CODEGENOPT(SanitizeBinaryMetadataUAR, 1, 0) ///< Emit PCs for start of 
functions
+///< that are subject for 
use-after-return checking.
 CODEGENOPT(SanitizeStats , 1, 0) ///< Collect statistics for sanitizers.
 CODEGENOPT(SimplifyLibCalls  , 1, 1) ///< Set when -fbuiltin is enabled.
 CODEGENOPT(SoftFloat , 1, 0) ///< -soft-float.

diff  --git a/clang/include/clang/Basic/CodeGenOptions.h 
b/clang/include/clang/Basic/CodeGenOptions.h
index 13794035c9076..a1a20995f211d 100644
--- a/clang/include/clang/Basic/CodeGenOptions.h
+++ b/clang/include/clang/Basic/CodeGenOptions.h
@@ -497,7 +497,8 @@ class CodeGenOptions : public CodeGenOptionsBase {
 
   // Check if any one of SanitizeBinaryMetadata* is enabled.
   bool hasSanitizeBinaryMetadata() const {
-return SanitizeBinaryMetadataCovered || SanitizeBinaryMetadataAtomics;
+return SanitizeBinaryMetadataCovered || SanitizeBinaryMetadataAtomics ||
+   SanitizeBinaryMetadataUAR;
   }
 };
 

diff  --git a/clang/include/clang/Driver/Options.td 
b/clang/include/clang/Driver/Options.td
index 8da5e25bd38d0..1d577ab70788e 100644
--- a/clang/include/clang/Driver/Options.td
+++ b/clang/include/clang/Driver/Options.td
@@ -5575,6 +5575,10 @@ def fexperimental_sanitize_metadata_EQ_atomics
 : Flag<["-"], "fexperimental-sanitize-metadata=atomics">,
   HelpText<"Emit PCs for atomic operations used by binary analysis 
sanitizers">,
   MarshallingInfoFlag>;
+def fexperimental_sanitize_metadata_EQ_uar
+: Flag<["-"], "fexperimental-sanitize-metadata=uar">,
+  HelpText<"Emit PCs for start of functions that are subject for 
use-after-return checking.">,
+  MarshallingInfoFlag>;
 def fpatchable_function_entry_offset_EQ
 : Joined<["-"], "fpatchable-function-entry-offset=">, MetaVarName<"">,
   HelpText<"Generate M NOPs before function entry">,

diff  --git a/clang/lib/CodeGen/BackendUtil.cpp 
b/clang/lib/CodeGen/BackendUtil.cpp
index 2b241967f5e7b..717ec33441232 100644
--- a/clang/lib/CodeGen/BackendUtil.cpp
+++ b/clang/lib/CodeGen/BackendUtil.cpp
@@ -234,6 +234,7 @@ getSanitizerBinaryMetadataOptions(const CodeGenOptions 
&CGOpts) {
   SanitizerBinaryMetadataOptions Opts;
   Opts.Covered = CGOpts.SanitizeBinaryMetadataCovered;
   Opts.Atomics = CGOpts.SanitizeBinaryMetadataAtomics;
+  Opts.UAR = CGOpts.SanitizeBinaryMetadataUAR;
   return Opts;
 }
 

diff  --git a/clang/lib/Driver/SanitizerArgs.cpp 
b/clang/lib/Driver/SanitizerArgs.cpp
index af27dbc92c8e6..96a701366e37b 100644
--- a/clang/lib/Driver/SanitizerArgs.cpp
+++ b/clang/lib/Driver/SanitizerArgs.cpp
@@ -104,6 +104,7 @@ enum Cover

[clang] 0aedf9d - Revert "Use-after-return sanitizer binary metadata"

2022-11-30 Thread Dmitry Vyukov via cfe-commits

Author: Dmitry Vyukov
Date: 2022-11-30T09:38:56+01:00
New Revision: 0aedf9d7141fcae75956c651f1c2474db6862350

URL: 
https://github.com/llvm/llvm-project/commit/0aedf9d7141fcae75956c651f1c2474db6862350
DIFF: 
https://github.com/llvm/llvm-project/commit/0aedf9d7141fcae75956c651f1c2474db6862350.diff

LOG: Revert "Use-after-return sanitizer binary metadata"

This reverts commit e6aea4a5db09c845276ece92737a6aac97794100.

Broke tests:
https://lab.llvm.org/buildbot/#/builders/16/builds/38992

Added: 


Modified: 
clang/include/clang/Basic/CodeGenOptions.def
clang/include/clang/Basic/CodeGenOptions.h
clang/include/clang/Driver/Options.td
clang/lib/CodeGen/BackendUtil.cpp
clang/lib/Driver/SanitizerArgs.cpp
llvm/include/llvm/CodeGen/CodeGenPassBuilder.h
llvm/include/llvm/CodeGen/MachinePassRegistry.def
llvm/include/llvm/CodeGen/Passes.h
llvm/include/llvm/InitializePasses.h
llvm/include/llvm/Transforms/Instrumentation.h
llvm/include/llvm/Transforms/Instrumentation/SanitizerBinaryMetadata.h
llvm/lib/CodeGen/CMakeLists.txt
llvm/lib/CodeGen/CodeGen.cpp
llvm/lib/CodeGen/TargetPassConfig.cpp
llvm/lib/Transforms/Instrumentation/SanitizerBinaryMetadata.cpp

Removed: 
llvm/lib/CodeGen/SanitizerBinaryMetadata.cpp
llvm/test/Instrumentation/SanitizerBinaryMetadata/common.h
llvm/test/Instrumentation/SanitizerBinaryMetadata/covered.cpp
llvm/test/Instrumentation/SanitizerBinaryMetadata/lit.local.cfg
llvm/test/Instrumentation/SanitizerBinaryMetadata/uar.cpp



diff  --git a/clang/include/clang/Basic/CodeGenOptions.def 
b/clang/include/clang/Basic/CodeGenOptions.def
index 81d5ccd4856d4..43521b76652db 100644
--- a/clang/include/clang/Basic/CodeGenOptions.def
+++ b/clang/include/clang/Basic/CodeGenOptions.def
@@ -288,8 +288,6 @@ CODEGENOPT(SanitizeCoverageTraceLoads, 1, 0) ///< Enable 
tracing of loads.
 CODEGENOPT(SanitizeCoverageTraceStores, 1, 0) ///< Enable tracing of stores.
 CODEGENOPT(SanitizeBinaryMetadataCovered, 1, 0) ///< Emit PCs for covered 
functions.
 CODEGENOPT(SanitizeBinaryMetadataAtomics, 1, 0) ///< Emit PCs for atomic 
operations.
-CODEGENOPT(SanitizeBinaryMetadataUAR, 1, 0) ///< Emit PCs for start of 
functions
-///< that are subject for 
use-after-return checking.
 CODEGENOPT(SanitizeStats , 1, 0) ///< Collect statistics for sanitizers.
 CODEGENOPT(SimplifyLibCalls  , 1, 1) ///< Set when -fbuiltin is enabled.
 CODEGENOPT(SoftFloat , 1, 0) ///< -soft-float.

diff  --git a/clang/include/clang/Basic/CodeGenOptions.h 
b/clang/include/clang/Basic/CodeGenOptions.h
index a1a20995f211d..13794035c9076 100644
--- a/clang/include/clang/Basic/CodeGenOptions.h
+++ b/clang/include/clang/Basic/CodeGenOptions.h
@@ -497,8 +497,7 @@ class CodeGenOptions : public CodeGenOptionsBase {
 
   // Check if any one of SanitizeBinaryMetadata* is enabled.
   bool hasSanitizeBinaryMetadata() const {
-return SanitizeBinaryMetadataCovered || SanitizeBinaryMetadataAtomics ||
-   SanitizeBinaryMetadataUAR;
+return SanitizeBinaryMetadataCovered || SanitizeBinaryMetadataAtomics;
   }
 };
 

diff  --git a/clang/include/clang/Driver/Options.td 
b/clang/include/clang/Driver/Options.td
index 1d577ab70788e..8da5e25bd38d0 100644
--- a/clang/include/clang/Driver/Options.td
+++ b/clang/include/clang/Driver/Options.td
@@ -5575,10 +5575,6 @@ def fexperimental_sanitize_metadata_EQ_atomics
 : Flag<["-"], "fexperimental-sanitize-metadata=atomics">,
   HelpText<"Emit PCs for atomic operations used by binary analysis 
sanitizers">,
   MarshallingInfoFlag>;
-def fexperimental_sanitize_metadata_EQ_uar
-: Flag<["-"], "fexperimental-sanitize-metadata=uar">,
-  HelpText<"Emit PCs for start of functions that are subject for 
use-after-return checking.">,
-  MarshallingInfoFlag>;
 def fpatchable_function_entry_offset_EQ
 : Joined<["-"], "fpatchable-function-entry-offset=">, MetaVarName<"">,
   HelpText<"Generate M NOPs before function entry">,

diff  --git a/clang/lib/CodeGen/BackendUtil.cpp 
b/clang/lib/CodeGen/BackendUtil.cpp
index 717ec33441232..2b241967f5e7b 100644
--- a/clang/lib/CodeGen/BackendUtil.cpp
+++ b/clang/lib/CodeGen/BackendUtil.cpp
@@ -234,7 +234,6 @@ getSanitizerBinaryMetadataOptions(const CodeGenOptions 
&CGOpts) {
   SanitizerBinaryMetadataOptions Opts;
   Opts.Covered = CGOpts.SanitizeBinaryMetadataCovered;
   Opts.Atomics = CGOpts.SanitizeBinaryMetadataAtomics;
-  Opts.UAR = CGOpts.SanitizeBinaryMetadataUAR;
   return Opts;
 }
 

diff  --git a/clang/lib/Driver/SanitizerArgs.cpp 
b/clang/lib/Driver/SanitizerArgs.cpp
index 96a701366e37b..af27dbc92c8e6 100644
--- a/clang/lib/Driver/SanitizerArgs.cpp
+++ b/clang/lib/Driver/SanitizerArgs.cpp
@@ -104,7 +104,6 @@ enum CoverageFeature {
 enum BinaryMetadataFeature {
   BinaryMetadataCovered = 1 << 0,
   BinaryMetadataAtomics = 1 << 1,
-  Bina

[clang] d3c851d - Use-after-return sanitizer binary metadata

2022-11-30 Thread Dmitry Vyukov via cfe-commits

Author: Dmitry Vyukov
Date: 2022-11-30T14:50:22+01:00
New Revision: d3c851d3fc8b69dda70bf5f999c5b39dc314dd73

URL: 
https://github.com/llvm/llvm-project/commit/d3c851d3fc8b69dda70bf5f999c5b39dc314dd73
DIFF: 
https://github.com/llvm/llvm-project/commit/d3c851d3fc8b69dda70bf5f999c5b39dc314dd73.diff

LOG: Use-after-return sanitizer binary metadata

Currently per-function metadata consists of:
(start-pc, size, features)

This adds a new UAR feature and if it's set an additional element:
(start-pc, size, features, stack-args-size)

Reviewed By: melver

Differential Revision: https://reviews.llvm.org/D136078

Added: 
clang/test/Instrumentation/SanitizerBinaryMetadata/common.h
clang/test/Instrumentation/SanitizerBinaryMetadata/covered.cpp
clang/test/Instrumentation/SanitizerBinaryMetadata/uar.cpp
llvm/lib/CodeGen/SanitizerBinaryMetadata.cpp

Modified: 
clang/include/clang/Basic/CodeGenOptions.def
clang/include/clang/Basic/CodeGenOptions.h
clang/include/clang/Driver/Options.td
clang/lib/CodeGen/BackendUtil.cpp
clang/lib/Driver/SanitizerArgs.cpp
llvm/include/llvm/CodeGen/CodeGenPassBuilder.h
llvm/include/llvm/CodeGen/MachinePassRegistry.def
llvm/include/llvm/CodeGen/Passes.h
llvm/include/llvm/InitializePasses.h
llvm/include/llvm/Transforms/Instrumentation.h
llvm/include/llvm/Transforms/Instrumentation/SanitizerBinaryMetadata.h
llvm/lib/CodeGen/CMakeLists.txt
llvm/lib/CodeGen/CodeGen.cpp
llvm/lib/CodeGen/TargetPassConfig.cpp
llvm/lib/Transforms/Instrumentation/SanitizerBinaryMetadata.cpp
llvm/test/CodeGen/AArch64/O0-pipeline.ll
llvm/test/CodeGen/AArch64/O3-pipeline.ll
llvm/test/CodeGen/AMDGPU/llc-pipeline.ll
llvm/test/CodeGen/ARM/O3-pipeline.ll
llvm/test/CodeGen/M68k/pipeline.ll
llvm/test/CodeGen/PowerPC/O3-pipeline.ll
llvm/test/CodeGen/RISCV/O0-pipeline.ll
llvm/test/CodeGen/RISCV/O3-pipeline.ll
llvm/test/CodeGen/X86/O0-pipeline.ll
llvm/test/CodeGen/X86/opt-pipeline.ll

Removed: 




diff  --git a/clang/include/clang/Basic/CodeGenOptions.def 
b/clang/include/clang/Basic/CodeGenOptions.def
index 43521b76652db..81d5ccd4856d4 100644
--- a/clang/include/clang/Basic/CodeGenOptions.def
+++ b/clang/include/clang/Basic/CodeGenOptions.def
@@ -288,6 +288,8 @@ CODEGENOPT(SanitizeCoverageTraceLoads, 1, 0) ///< Enable 
tracing of loads.
 CODEGENOPT(SanitizeCoverageTraceStores, 1, 0) ///< Enable tracing of stores.
 CODEGENOPT(SanitizeBinaryMetadataCovered, 1, 0) ///< Emit PCs for covered 
functions.
 CODEGENOPT(SanitizeBinaryMetadataAtomics, 1, 0) ///< Emit PCs for atomic 
operations.
+CODEGENOPT(SanitizeBinaryMetadataUAR, 1, 0) ///< Emit PCs for start of 
functions
+///< that are subject for 
use-after-return checking.
 CODEGENOPT(SanitizeStats , 1, 0) ///< Collect statistics for sanitizers.
 CODEGENOPT(SimplifyLibCalls  , 1, 1) ///< Set when -fbuiltin is enabled.
 CODEGENOPT(SoftFloat , 1, 0) ///< -soft-float.

diff  --git a/clang/include/clang/Basic/CodeGenOptions.h 
b/clang/include/clang/Basic/CodeGenOptions.h
index 13794035c9076..a1a20995f211d 100644
--- a/clang/include/clang/Basic/CodeGenOptions.h
+++ b/clang/include/clang/Basic/CodeGenOptions.h
@@ -497,7 +497,8 @@ class CodeGenOptions : public CodeGenOptionsBase {
 
   // Check if any one of SanitizeBinaryMetadata* is enabled.
   bool hasSanitizeBinaryMetadata() const {
-return SanitizeBinaryMetadataCovered || SanitizeBinaryMetadataAtomics;
+return SanitizeBinaryMetadataCovered || SanitizeBinaryMetadataAtomics ||
+   SanitizeBinaryMetadataUAR;
   }
 };
 

diff  --git a/clang/include/clang/Driver/Options.td 
b/clang/include/clang/Driver/Options.td
index 8da5e25bd38d0..1d577ab70788e 100644
--- a/clang/include/clang/Driver/Options.td
+++ b/clang/include/clang/Driver/Options.td
@@ -5575,6 +5575,10 @@ def fexperimental_sanitize_metadata_EQ_atomics
 : Flag<["-"], "fexperimental-sanitize-metadata=atomics">,
   HelpText<"Emit PCs for atomic operations used by binary analysis 
sanitizers">,
   MarshallingInfoFlag>;
+def fexperimental_sanitize_metadata_EQ_uar
+: Flag<["-"], "fexperimental-sanitize-metadata=uar">,
+  HelpText<"Emit PCs for start of functions that are subject for 
use-after-return checking.">,
+  MarshallingInfoFlag>;
 def fpatchable_function_entry_offset_EQ
 : Joined<["-"], "fpatchable-function-entry-offset=">, MetaVarName<"">,
   HelpText<"Generate M NOPs before function entry">,

diff  --git a/clang/lib/CodeGen/BackendUtil.cpp 
b/clang/lib/CodeGen/BackendUtil.cpp
index 2b241967f5e7b..717ec33441232 100644
--- a/clang/lib/CodeGen/BackendUtil.cpp
+++ b/clang/lib/CodeGen/BackendUtil.cpp
@@ -234,6 +234,7 @@ getSanitizerBinaryMetadataOptions(const CodeGenOptions 
&CGOpts) {
   SanitizerBinaryMetadataOptions Opts;
   Opts.Covered = CGOpts.SanitizeBinaryMetadataCovered;
   

[clang] dbe8c2c - Use-after-return sanitizer binary metadata

2022-12-05 Thread Dmitry Vyukov via cfe-commits

Author: Dmitry Vyukov
Date: 2022-12-05T14:40:31+01:00
New Revision: dbe8c2c316c40b25a0a37b91f1a1a02a55182378

URL: 
https://github.com/llvm/llvm-project/commit/dbe8c2c316c40b25a0a37b91f1a1a02a55182378
DIFF: 
https://github.com/llvm/llvm-project/commit/dbe8c2c316c40b25a0a37b91f1a1a02a55182378.diff

LOG: Use-after-return sanitizer binary metadata

Currently per-function metadata consists of:
(start-pc, size, features)

This adds a new UAR feature and if it's set an additional element:
(start-pc, size, features, stack-args-size)

Reviewed By: melver

Differential Revision: https://reviews.llvm.org/D136078

Added: 
compiler-rt/test/metadata/CMakeLists.txt
compiler-rt/test/metadata/common.h
compiler-rt/test/metadata/covered.cpp
compiler-rt/test/metadata/lit.cfg.py
compiler-rt/test/metadata/lit.site.cfg.py.in
compiler-rt/test/metadata/uar.cpp
llvm/lib/CodeGen/SanitizerBinaryMetadata.cpp

Modified: 
clang/include/clang/Basic/CodeGenOptions.def
clang/include/clang/Basic/CodeGenOptions.h
clang/include/clang/Driver/Options.td
clang/lib/CodeGen/BackendUtil.cpp
clang/lib/Driver/SanitizerArgs.cpp
compiler-rt/test/CMakeLists.txt
llvm/include/llvm/CodeGen/CodeGenPassBuilder.h
llvm/include/llvm/CodeGen/MachinePassRegistry.def
llvm/include/llvm/CodeGen/Passes.h
llvm/include/llvm/InitializePasses.h
llvm/include/llvm/Transforms/Instrumentation.h
llvm/include/llvm/Transforms/Instrumentation/SanitizerBinaryMetadata.h
llvm/lib/CodeGen/CMakeLists.txt
llvm/lib/CodeGen/CodeGen.cpp
llvm/lib/CodeGen/TargetPassConfig.cpp
llvm/lib/Transforms/Instrumentation/SanitizerBinaryMetadata.cpp
llvm/test/CodeGen/AArch64/O0-pipeline.ll
llvm/test/CodeGen/AArch64/O3-pipeline.ll
llvm/test/CodeGen/AMDGPU/llc-pipeline.ll
llvm/test/CodeGen/ARM/O3-pipeline.ll
llvm/test/CodeGen/M68k/pipeline.ll
llvm/test/CodeGen/PowerPC/O3-pipeline.ll
llvm/test/CodeGen/RISCV/O0-pipeline.ll
llvm/test/CodeGen/RISCV/O3-pipeline.ll
llvm/test/CodeGen/X86/O0-pipeline.ll
llvm/test/CodeGen/X86/opt-pipeline.ll

Removed: 




diff  --git a/clang/include/clang/Basic/CodeGenOptions.def 
b/clang/include/clang/Basic/CodeGenOptions.def
index 43521b76652db..81d5ccd4856d4 100644
--- a/clang/include/clang/Basic/CodeGenOptions.def
+++ b/clang/include/clang/Basic/CodeGenOptions.def
@@ -288,6 +288,8 @@ CODEGENOPT(SanitizeCoverageTraceLoads, 1, 0) ///< Enable 
tracing of loads.
 CODEGENOPT(SanitizeCoverageTraceStores, 1, 0) ///< Enable tracing of stores.
 CODEGENOPT(SanitizeBinaryMetadataCovered, 1, 0) ///< Emit PCs for covered 
functions.
 CODEGENOPT(SanitizeBinaryMetadataAtomics, 1, 0) ///< Emit PCs for atomic 
operations.
+CODEGENOPT(SanitizeBinaryMetadataUAR, 1, 0) ///< Emit PCs for start of 
functions
+///< that are subject for 
use-after-return checking.
 CODEGENOPT(SanitizeStats , 1, 0) ///< Collect statistics for sanitizers.
 CODEGENOPT(SimplifyLibCalls  , 1, 1) ///< Set when -fbuiltin is enabled.
 CODEGENOPT(SoftFloat , 1, 0) ///< -soft-float.

diff  --git a/clang/include/clang/Basic/CodeGenOptions.h 
b/clang/include/clang/Basic/CodeGenOptions.h
index 24cc56c8e05df..d34ed1d6d4919 100644
--- a/clang/include/clang/Basic/CodeGenOptions.h
+++ b/clang/include/clang/Basic/CodeGenOptions.h
@@ -497,7 +497,8 @@ class CodeGenOptions : public CodeGenOptionsBase {
 
   // Check if any one of SanitizeBinaryMetadata* is enabled.
   bool hasSanitizeBinaryMetadata() const {
-return SanitizeBinaryMetadataCovered || SanitizeBinaryMetadataAtomics;
+return SanitizeBinaryMetadataCovered || SanitizeBinaryMetadataAtomics ||
+   SanitizeBinaryMetadataUAR;
   }
 };
 

diff  --git a/clang/include/clang/Driver/Options.td 
b/clang/include/clang/Driver/Options.td
index 11f6253db7445..c888d4f6194ab 100644
--- a/clang/include/clang/Driver/Options.td
+++ b/clang/include/clang/Driver/Options.td
@@ -5582,6 +5582,10 @@ def fexperimental_sanitize_metadata_EQ_atomics
 : Flag<["-"], "fexperimental-sanitize-metadata=atomics">,
   HelpText<"Emit PCs for atomic operations used by binary analysis 
sanitizers">,
   MarshallingInfoFlag>;
+def fexperimental_sanitize_metadata_EQ_uar
+: Flag<["-"], "fexperimental-sanitize-metadata=uar">,
+  HelpText<"Emit PCs for start of functions that are subject for 
use-after-return checking.">,
+  MarshallingInfoFlag>;
 def fpatchable_function_entry_offset_EQ
 : Joined<["-"], "fpatchable-function-entry-offset=">, MetaVarName<"">,
   HelpText<"Generate M NOPs before function entry">,

diff  --git a/clang/lib/CodeGen/BackendUtil.cpp 
b/clang/lib/CodeGen/BackendUtil.cpp
index b18ead066c6d2..16b48c6dc1d18 100644
--- a/clang/lib/CodeGen/BackendUtil.cpp
+++ b/clang/lib/CodeGen/BackendUtil.cpp
@@ -235,6 +235,7 @@ getSanitizerBinaryMetadataOptions(const CodeGenOptions 
&CGOpts) {
   

Re: [PATCH] D24628: [ASAN] Pass previous stack information through __sanitizer_finish_switch_fiber

2016-09-16 Thread Dmitry Vyukov via cfe-commits
dvyukov added a comment.

We need a test that passes non-NULL to these arguments and shows how to use the 
returned values.



Comment at: test/asan/TestCases/Linux/swapcontext_annotation.cc:47
@@ -46,3 +46,3 @@
   CallNoReturn();
-  __sanitizer_finish_switch_fiber();
+  __sanitizer_finish_switch_fiber(NULL, NULL, NULL);
 

#include  for NULL


https://reviews.llvm.org/D24628



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


Re: r296374 - [ubsan] Factor out logic to emit a range check. NFC.

2017-02-27 Thread Dmitry Vyukov via cfe-commits
Does not seem to be related to tsan. It's just that somebody called a
directory with compiler tsan_release_build, but that seems to be the
only relation to tsan. Otherwise looks like a violated assertion in
clang.


On Mon, Feb 27, 2017 at 9:46 PM, Ivan Krasin  wrote:
> Hi Vedant,
>
> not on top of my head. Dmitriy, can you please take a look?
>
> krasin
>
> On Mon, Feb 27, 2017 at 12:43 PM, Vedant Kumar  wrote:
>>
>> Hi Ivan,
>>
>> I saw a bot failure on your job after this commit:
>>
>>
>> http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-autoconf/builds/5467/steps/tsan%20analyze/logs/stdio
>>
>> http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-autoconf/builds/5467/steps/build%20release%20tsan%20with%20clang/logs/stdio
>>
>> However, I cannot reproduce it locally with a stage2 TSAN build.
>>
>> After staring at my diff I couldn't find anything that would explain the
>> failure. No other bots seem upset.
>>
>> Do you have any idea about what's going on? Let me know if you want me to
>> revert...
>>
>> vedant
>>
>> > On Feb 27, 2017, at 11:46 AM, Vedant Kumar via cfe-commits
>> >  wrote:
>> >
>> > Author: vedantk
>> > Date: Mon Feb 27 13:46:19 2017
>> > New Revision: 296374
>> >
>> > URL: http://llvm.org/viewvc/llvm-project?rev=296374&view=rev
>> > Log:
>> > [ubsan] Factor out logic to emit a range check. NFC.
>> >
>> > This is a readability improvement, but it will also help prep an
>> > upcoming patch to detect UB loads from bitfields.
>> >
>> > Modified:
>> >cfe/trunk/lib/CodeGen/CGExpr.cpp
>> >cfe/trunk/lib/CodeGen/CodeGenFunction.h
>> >
>> > Modified: cfe/trunk/lib/CodeGen/CGExpr.cpp
>> > URL:
>> > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGExpr.cpp?rev=296374&r1=296373&r2=296374&view=diff
>> >
>> > ==
>> > --- cfe/trunk/lib/CodeGen/CGExpr.cpp (original)
>> > +++ cfe/trunk/lib/CodeGen/CGExpr.cpp Mon Feb 27 13:46:19 2017
>> > @@ -1301,6 +1301,46 @@ llvm::MDNode *CodeGenFunction::getRangeF
>> >   return MDHelper.createRange(Min, End);
>> > }
>> >
>> > +bool CodeGenFunction::EmitScalarRangeCheck(llvm::Value *Value, QualType
>> > Ty,
>> > +   SourceLocation Loc) {
>> > +  bool HasBoolCheck = SanOpts.has(SanitizerKind::Bool);
>> > +  bool HasEnumCheck = SanOpts.has(SanitizerKind::Enum);
>> > +  if (!HasBoolCheck && !HasEnumCheck)
>> > +return false;
>> > +
>> > +  bool IsBool = hasBooleanRepresentation(Ty) ||
>> > +NSAPI(CGM.getContext()).isObjCBOOLType(Ty);
>> > +  bool NeedsBoolCheck = HasBoolCheck && IsBool;
>> > +  bool NeedsEnumCheck = HasEnumCheck && Ty->getAs();
>> > +  if (!NeedsBoolCheck && !NeedsEnumCheck)
>> > +return false;
>> > +
>> > +  llvm::APInt Min, End;
>> > +  if (!getRangeForType(*this, Ty, Min, End, /*StrictEnums=*/true,
>> > IsBool))
>> > +return true;
>> > +
>> > +  SanitizerScope SanScope(this);
>> > +  llvm::Value *Check;
>> > +  --End;
>> > +  if (!Min) {
>> > +Check = Builder.CreateICmpULE(
>> > +Value, llvm::ConstantInt::get(getLLVMContext(), End));
>> > +  } else {
>> > +llvm::Value *Upper = Builder.CreateICmpSLE(
>> > +Value, llvm::ConstantInt::get(getLLVMContext(), End));
>> > +llvm::Value *Lower = Builder.CreateICmpSGE(
>> > +Value, llvm::ConstantInt::get(getLLVMContext(), Min));
>> > +Check = Builder.CreateAnd(Upper, Lower);
>> > +  }
>> > +  llvm::Constant *StaticArgs[] = {EmitCheckSourceLocation(Loc),
>> > +  EmitCheckTypeDescriptor(Ty)};
>> > +  SanitizerMask Kind =
>> > +  NeedsEnumCheck ? SanitizerKind::Enum : SanitizerKind::Bool;
>> > +  EmitCheck(std::make_pair(Check, Kind),
>> > SanitizerHandler::LoadInvalidValue,
>> > +StaticArgs, EmitCheckValue(Value));
>> > +  return true;
>> > +}
>> > +
>> > llvm::Value *CodeGenFunction::EmitLoadOfScalar(Address Addr, bool
>> > Volatile,
>> >QualType Ty,
>> >SourceLocation Loc,
>> > @@ -1353,35 +1393,9 @@ llvm::Value *CodeGenFunction::EmitLoadOf
>> >   false /*ConvertTypeToTag*/);
>> >   }
>> >
>> > -  bool IsBool = hasBooleanRepresentation(Ty) ||
>> > -NSAPI(CGM.getContext()).isObjCBOOLType(Ty);
>> > -  bool NeedsBoolCheck = SanOpts.has(SanitizerKind::Bool) && IsBool;
>> > -  bool NeedsEnumCheck =
>> > -  SanOpts.has(SanitizerKind::Enum) && Ty->getAs();
>> > -  if (NeedsBoolCheck || NeedsEnumCheck) {
>> > -SanitizerScope SanScope(this);
>> > -llvm::APInt Min, End;
>> > -if (getRangeForType(*this, Ty, Min, End, /*StrictEnums=*/true,
>> > IsBool)) {
>> > -  --End;
>> > -  llvm::Value *Check;
>> > -  if (!Min)
>> > -Check = Builder.CreateICmpULE(
>> > -  Load, llvm::ConstantInt::get(getLLVMContext(), End));
>> > -  else {
>> > -llvm::Value *Upper = Builder.Create

Re: r296374 - [ubsan] Factor out logic to emit a range check. NFC.

2017-02-27 Thread Dmitry Vyukov via cfe-commits
Ivan, you are listed as admin of
http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-autoconf
Please issue a clobber for it.

If it does not help, the bot runs the following script:
https://github.com/llvm-mirror/zorg/blob/master/zorg/buildbot/builders/sanitizers/buildbot_standard.sh
It builds clang with clang, but the first clang is just a normal
clang, it's not build tsan or anything as far as I see.


On Mon, Feb 27, 2017 at 10:00 PM, Vedant Kumar  wrote:
> Hm, still can't reproduce this with a normal stage2-RA build of 
> clang+compiler_rt.
>
> And it looks like the next build on the job has the same issue:
>
>   
> http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-autoconf/builds/5468/steps/annotate/logs/stdio
>
> Do you think there could be stale build products on the machine? Could we try 
> to run a 'make clean' in the top-level build dir?
>
> vedant
>
>> On Feb 27, 2017, at 12:51 PM, Dmitry Vyukov  wrote:
>>
>> Does not seem to be related to tsan. It's just that somebody called a
>> directory with compiler tsan_release_build, but that seems to be the
>> only relation to tsan. Otherwise looks like a violated assertion in
>> clang.
>>
>>
>> On Mon, Feb 27, 2017 at 9:46 PM, Ivan Krasin  wrote:
>>> Hi Vedant,
>>>
>>> not on top of my head. Dmitriy, can you please take a look?
>>>
>>> krasin
>>>
>>> On Mon, Feb 27, 2017 at 12:43 PM, Vedant Kumar  wrote:

 Hi Ivan,

 I saw a bot failure on your job after this commit:


 http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-autoconf/builds/5467/steps/tsan%20analyze/logs/stdio

 http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-autoconf/builds/5467/steps/build%20release%20tsan%20with%20clang/logs/stdio

 However, I cannot reproduce it locally with a stage2 TSAN build.

 After staring at my diff I couldn't find anything that would explain the
 failure. No other bots seem upset.

 Do you have any idea about what's going on? Let me know if you want me to
 revert...

 vedant

> On Feb 27, 2017, at 11:46 AM, Vedant Kumar via cfe-commits
>  wrote:
>
> Author: vedantk
> Date: Mon Feb 27 13:46:19 2017
> New Revision: 296374
>
> URL: http://llvm.org/viewvc/llvm-project?rev=296374&view=rev
> Log:
> [ubsan] Factor out logic to emit a range check. NFC.
>
> This is a readability improvement, but it will also help prep an
> upcoming patch to detect UB loads from bitfields.
>
> Modified:
>   cfe/trunk/lib/CodeGen/CGExpr.cpp
>   cfe/trunk/lib/CodeGen/CodeGenFunction.h
>
> Modified: cfe/trunk/lib/CodeGen/CGExpr.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGExpr.cpp?rev=296374&r1=296373&r2=296374&view=diff
>
> ==
> --- cfe/trunk/lib/CodeGen/CGExpr.cpp (original)
> +++ cfe/trunk/lib/CodeGen/CGExpr.cpp Mon Feb 27 13:46:19 2017
> @@ -1301,6 +1301,46 @@ llvm::MDNode *CodeGenFunction::getRangeF
>  return MDHelper.createRange(Min, End);
> }
>
> +bool CodeGenFunction::EmitScalarRangeCheck(llvm::Value *Value, QualType
> Ty,
> +   SourceLocation Loc) {
> +  bool HasBoolCheck = SanOpts.has(SanitizerKind::Bool);
> +  bool HasEnumCheck = SanOpts.has(SanitizerKind::Enum);
> +  if (!HasBoolCheck && !HasEnumCheck)
> +return false;
> +
> +  bool IsBool = hasBooleanRepresentation(Ty) ||
> +NSAPI(CGM.getContext()).isObjCBOOLType(Ty);
> +  bool NeedsBoolCheck = HasBoolCheck && IsBool;
> +  bool NeedsEnumCheck = HasEnumCheck && Ty->getAs();
> +  if (!NeedsBoolCheck && !NeedsEnumCheck)
> +return false;
> +
> +  llvm::APInt Min, End;
> +  if (!getRangeForType(*this, Ty, Min, End, /*StrictEnums=*/true,
> IsBool))
> +return true;
> +
> +  SanitizerScope SanScope(this);
> +  llvm::Value *Check;
> +  --End;
> +  if (!Min) {
> +Check = Builder.CreateICmpULE(
> +Value, llvm::ConstantInt::get(getLLVMContext(), End));
> +  } else {
> +llvm::Value *Upper = Builder.CreateICmpSLE(
> +Value, llvm::ConstantInt::get(getLLVMContext(), End));
> +llvm::Value *Lower = Builder.CreateICmpSGE(
> +Value, llvm::ConstantInt::get(getLLVMContext(), Min));
> +Check = Builder.CreateAnd(Upper, Lower);
> +  }
> +  llvm::Constant *StaticArgs[] = {EmitCheckSourceLocation(Loc),
> +  EmitCheckTypeDescriptor(Ty)};
> +  SanitizerMask Kind =
> +  NeedsEnumCheck ? SanitizerKind::Enum : SanitizerKind::Bool;
> +  EmitCheck(std::make_pair(Check, Kind),
> SanitizerHandler::LoadInvalidValue,
> +StaticArgs, EmitCheckValue(Value));
> +  return true;
> +}
> +
> llvm::Value *CodeGenFunction::EmitLoad

[PATCH] D23835: [compiler-rt] tsan/tests: Add missing -I for top-level include directory

2016-11-22 Thread Dmitry Vyukov via cfe-commits
dvyukov added a comment.

What is standalone build? And how does it fail?


https://reviews.llvm.org/D23835



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D25857: [tsan][clang] Introduce a function attribute to disable TSan checking at run time

2016-10-30 Thread Dmitry Vyukov via cfe-commits
dvyukov added inline comments.



Comment at: lib/CodeGen/CodeGenFunction.cpp:717
 
+  // Ignore TSan memory acesses from within dealloc and all of its calees at
+  // run time.

This is unpleasant. We had recursive ignores in the old Valgrind-based tsan, 
but managed to not reintroduce them in the new tsan so far. But I also don't 
see any better solution.




Comment at: lib/CodeGen/CodeGenFunction.cpp:721
+if (const auto *M = dyn_cast_or_null(D))
+  if (M->getMethodFamily() == OMF_dealloc)
+Fn->addFnAttr("sanitize_thread_no_checking_at_run_time");

Can we do this check right in the tsan pass? Or this information is already 
lost there?



Comment at: lib/CodeGen/CodeGenFunction.cpp:722
+  if (M->getMethodFamily() == OMF_dealloc)
+Fn->addFnAttr("sanitize_thread_no_checking_at_run_time");
+

Also do:
   Fn->removeFnAttr(llvm::Attribute::SanitizeThread);
That's what will effectively happen. And it will allow to simplify the other 
patch.


https://reviews.llvm.org/D25857



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D25857: [tsan][clang] Introduce a function attribute to disable TSan checking at run time

2016-11-06 Thread Dmitry Vyukov via cfe-commits
dvyukov added inline comments.



Comment at: test/CodeGen/sanitize-thread-no-checking-at-run-time.m:1
+// RUN: %clang_cc1 -triple x86_64-apple-darwin -x objective-c++ -emit-llvm -o 
- %s | FileCheck -check-prefix=WITHOUT %s
+// RUN: %clang_cc1 -triple x86_64-apple-darwin -x objective-c++ -emit-llvm -o 
- %s -fsanitize=thread | FileCheck -check-prefix=TSAN %s

Are you sure this is the right location for the test?
test/CodeGen does not seem to contain any tests, only subdirs.



Comment at: test/CodeGen/sanitize-thread-no-checking-at-run-time.m:35
+// TSAN: attributes [[ATTR]] = { nounwind {{.*}} 
"sanitize_thread_no_checking_at_run_time" {{.*}} }
+// TSAN-NOT: sanitize_thread

Does this check actually work?
I would expect that sanitize_thread, if present, will be eaten by the previous 
line.
Not sure what's the best way to fix it. What is the exact list of attributes on 
the previous line? Maybe we can just specify them all without using {{.*}}?


https://reviews.llvm.org/D25857



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D26461: Tread TSan LLVM flags to driver: add TSan controlling flags to clang.

2016-11-09 Thread Dmitry Vyukov via cfe-commits
dvyukov added inline comments.



Comment at: include/clang/Driver/Options.td:733
+  Group, Flags<[CC1Option]>,
+  HelpText<"Enable data race detection in 
ThreadSanitizer">;
+def fno_sanitize_thread_data_races : Flag<["-"], 
"fno-sanitize-thread-data-races">,

These descriptions may be confusing for users.
This does not disable data race detection in tsan. Even if all files are 
compiled with this flag, tsan can still report races. Same for traces and 
atomics.
Please make it clear that it only enables/disables source _instrumentation_.

Does user see what's the default value? If not, then I guess some users will 
add flags just because they do want data races detection and stack traces. We 
need to make it clear that all flags are enabled by default.


https://reviews.llvm.org/D26461



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D25857: [tsan][clang] Introduce a function attribute to disable TSan checking at run time

2016-11-10 Thread Dmitry Vyukov via cfe-commits
dvyukov accepted this revision.
dvyukov added a comment.
This revision is now accepted and ready to land.

> Alternatively, I could drop this aspect of the test altogether since I have 
> an assert in the llvm pass.

Dropping the check is fine in this case.


https://reviews.llvm.org/D25857



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


Re: [PATCH] D14858: Support building tsan on android.

2015-11-20 Thread Dmitry Vyukov via cfe-commits
dvyukov added a comment.

> Yes, we should use shared runtime library on Android.


Note that tsan is different from all of asan/msan/ubsan in that it does 
zillions of calls into runtime, so the indirection will have non-zero runtime 
cost.
Is it possible to statically link it into something that has the bulk of 
verified code?


http://reviews.llvm.org/D14858



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [llvm] [SanitizerBinaryMetadata] Fix multi-version sanitizer metadata (PR #97848)

2024-07-07 Thread Dmitry Vyukov via cfe-commits

https://github.com/dvyukov approved this pull request.


https://github.com/llvm/llvm-project/pull/97848
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits