r201391 - Enable generation of unwind tables when building with sanitizers.
Evgeniy Stepanov
eugeni.stepanov at gmail.com
Fri Feb 14 00:56:25 PST 2014
Author: eugenis
Date: Fri Feb 14 02:56:25 2014
New Revision: 201391
URL: http://llvm.org/viewvc/llvm-project?rev=201391&view=rev
Log:
Enable generation of unwind tables when building with sanitizers.
Added:
cfe/trunk/test/Driver/sanitize_unwind_tables.c (with props)
Modified:
cfe/trunk/include/clang/Driver/SanitizerArgs.h
cfe/trunk/lib/Driver/Tools.cpp
Modified: cfe/trunk/include/clang/Driver/SanitizerArgs.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/SanitizerArgs.h?rev=201391&r1=201390&r2=201391&view=diff
==============================================================================
--- cfe/trunk/include/clang/Driver/SanitizerArgs.h (original)
+++ cfe/trunk/include/clang/Driver/SanitizerArgs.h Fri Feb 14 02:56:25 2014
@@ -42,7 +42,8 @@ class SanitizerArgs {
NeedsLeakDetection = Leak,
NeedsUbsanRt = Undefined | Integer,
NotAllowedWithTrap = Vptr,
- HasZeroBaseShadow = Thread | Memory | DataFlow
+ HasZeroBaseShadow = Thread | Memory | DataFlow,
+ NeedsUnwindTables = Address | Thread | Memory | DataFlow
};
unsigned Kind;
@@ -73,6 +74,7 @@ class SanitizerArgs {
bool hasZeroBaseShadow() const {
return (Kind & HasZeroBaseShadow) || AsanZeroBaseShadow;
}
+ bool needsUnwindTables() const { return Kind & NeedsUnwindTables; }
void addArgs(const llvm::opt::ArgList &Args,
llvm::opt::ArgStringList &CmdArgs) const;
Modified: cfe/trunk/lib/Driver/Tools.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=201391&r1=201390&r2=201391&view=diff
==============================================================================
--- cfe/trunk/lib/Driver/Tools.cpp (original)
+++ cfe/trunk/lib/Driver/Tools.cpp Fri Feb 14 02:56:25 2014
@@ -2536,10 +2536,11 @@ void Clang::ConstructJob(Compilation &C,
// -fasynchronous-unwind-tables and -fnon-call-exceptions interact in more
// complicated ways.
bool AsynchronousUnwindTables =
- Args.hasFlag(options::OPT_fasynchronous_unwind_tables,
- options::OPT_fno_asynchronous_unwind_tables,
- getToolChain().IsUnwindTablesDefault() &&
- !KernelOrKext);
+ Args.hasFlag(options::OPT_fasynchronous_unwind_tables,
+ options::OPT_fno_asynchronous_unwind_tables,
+ (getToolChain().IsUnwindTablesDefault() ||
+ getToolChain().getSanitizerArgs().needsUnwindTables()) &&
+ !KernelOrKext);
if (Args.hasFlag(options::OPT_funwind_tables, options::OPT_fno_unwind_tables,
AsynchronousUnwindTables))
CmdArgs.push_back("-munwind-tables");
Added: cfe/trunk/test/Driver/sanitize_unwind_tables.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/sanitize_unwind_tables.c?rev=201391&view=auto
==============================================================================
--- cfe/trunk/test/Driver/sanitize_unwind_tables.c (added)
+++ cfe/trunk/test/Driver/sanitize_unwind_tables.c Fri Feb 14 02:56:25 2014
@@ -0,0 +1,11 @@
+// Sanitizers need to unwind stack at any code location.
+// Test that unwind tables are enabled in supported configurations.
+
+// RUN: %clang -target x86_64-linux-gnu -fsanitize=address %s -### 2>&1 | FileCheck %s
+// RUN: %clang -target i686-linux-gnu -fsanitize=address %s -### 2>&1 | FileCheck %s
+// RUN: %clang -target arm-linux-androideabi -fsanitize=address %s -### 2>&1 | FileCheck %s
+// RUN: %clang -target x86_64-linux-gnu -fsanitize=memory %s -### 2>&1 | FileCheck %s
+// RUN: %clang -target x86_64-linux-gnu -fsanitize=thread %s -### 2>&1 | FileCheck %s
+// RUN: %clang -target x86_64-linux-gnu -fsanitize=dataflow %s -### 2>&1 | FileCheck %s
+
+// CHECK: -munwind-tables
Propchange: cfe/trunk/test/Driver/sanitize_unwind_tables.c
------------------------------------------------------------------------------
svn:eol-style = LF
More information about the cfe-commits
mailing list