<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Tue, Jan 28, 2014 at 1:28 PM, Alexander Potapenko <span dir="ltr"><<a href="mailto:glider@google.com" target="_blank">glider@google.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: glider<br>
Date: Tue Jan 28 03:28:57 2014<br>
New Revision: 200295<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=200295&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=200295&view=rev</a><br>
Log:<br>
[ASan] Move the signal handling-related flags to sanitizer_common.<br>
This change is a part of refactoring intended to have common signal handling behavior in all tools.<br>
<br>
Modified:<br>
compiler-rt/trunk/lib/asan/CMakeLists.txt<br>
compiler-rt/trunk/lib/asan/asan_flags.h<br>
compiler-rt/trunk/lib/asan/asan_interceptors.cc<br>
compiler-rt/trunk/lib/asan/asan_internal.h<br>
compiler-rt/trunk/lib/asan/asan_linux.cc<br>
compiler-rt/trunk/lib/asan/asan_mac.cc<br>
compiler-rt/trunk/lib/asan/asan_posix.cc<br>
compiler-rt/trunk/lib/asan/asan_rtl.cc<br>
compiler-rt/trunk/lib/asan/asan_thread.cc<br>
compiler-rt/trunk/lib/sanitizer_common/CMakeLists.txt<br>
compiler-rt/trunk/lib/sanitizer_common/sanitizer_flags.cc<br>
compiler-rt/trunk/lib/sanitizer_common/sanitizer_flags.h<br>
compiler-rt/trunk/lib/sanitizer_common/sanitizer_internal_defs.h<br>
<br>
Modified: compiler-rt/trunk/lib/asan/CMakeLists.txt<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/CMakeLists.txt?rev=200295&r1=200294&r2=200295&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/CMakeLists.txt?rev=200295&r1=200294&r2=200295&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/asan/CMakeLists.txt (original)<br>
+++ compiler-rt/trunk/lib/asan/CMakeLists.txt Tue Jan 28 03:28:57 2014<br>
@@ -37,18 +37,6 @@ endif()<br>
set(ASAN_COMMON_DEFINITIONS<br>
ASAN_HAS_EXCEPTIONS=1)<br>
<br>
-if(ANDROID)<br>
- list(APPEND ASAN_COMMON_DEFINITIONS<br>
- ASAN_NEEDS_SEGV=0<br>
- ASAN_LOW_MEMORY=1)<br>
-elseif(MSVC)<br>
- list(APPEND ASAN_COMMON_DEFINITIONS<br>
- ASAN_NEEDS_SEGV=0)<br>
-else()<br>
- list(APPEND ASAN_COMMON_DEFINITIONS<br>
- ASAN_NEEDS_SEGV=1)<br>
-endif()<br>
-<br>
# Architectures supported by ASan.<br>
filter_available_targets(ASAN_SUPPORTED_ARCH<br>
x86_64 i386 powerpc64)<br>
<br>
Modified: compiler-rt/trunk/lib/asan/asan_flags.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_flags.h?rev=200295&r1=200294&r2=200295&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_flags.h?rev=200295&r1=200294&r2=200295&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/asan/asan_flags.h (original)<br>
+++ compiler-rt/trunk/lib/asan/asan_flags.h Tue Jan 28 03:28:57 2014<br>
@@ -70,12 +70,6 @@ struct Flags {<br>
// terminating application. Useful for debug purposes (when one needs<br>
// to attach gdb, for example).<br>
int sleep_before_dying;<br>
- // If set, registers ASan custom segv handler.<br>
- bool handle_segv;<br>
- // If set, allows user register segv handler even if ASan registers one.<br>
- bool allow_user_segv_handler;<br>
- // If set, uses alternate stack for signal handling.<br>
- bool use_sigaltstack;<br>
// Allow the users to work around the bug in Nvidia drivers prior to 295.*.<br>
bool check_malloc_usable_size;<br>
// If set, explicitly unmaps (huge) shadow at exit.<br>
<br>
Modified: compiler-rt/trunk/lib/asan/asan_interceptors.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_interceptors.cc?rev=200295&r1=200294&r2=200295&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_interceptors.cc?rev=200295&r1=200294&r2=200295&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/asan/asan_interceptors.cc (original)<br>
+++ compiler-rt/trunk/lib/asan/asan_interceptors.cc Tue Jan 28 03:28:57 2014<br>
@@ -187,7 +187,8 @@ INTERCEPTOR(int, pthread_create, void *t<br>
<br>
#if ASAN_INTERCEPT_SIGNAL_AND_SIGACTION<br>
INTERCEPTOR(void*, signal, int signum, void *handler) {<br>
- if (!AsanInterceptsSignal(signum) || flags()->allow_user_segv_handler) {<br>
+ if (!AsanInterceptsSignal(signum) ||<br>
+ common_flags()->allow_user_segv_handler) {<br>
return REAL(signal)(signum, handler);<br>
}<br>
return 0;<br>
@@ -195,7 +196,8 @@ INTERCEPTOR(void*, signal, int signum, v<br>
<br>
INTERCEPTOR(int, sigaction, int signum, const struct sigaction *act,<br>
struct sigaction *oldact) {<br>
- if (!AsanInterceptsSignal(signum) || flags()->allow_user_segv_handler) {<br>
+ if (!AsanInterceptsSignal(signum) ||<br>
+ common_flags()->allow_user_segv_handler) {<br>
return REAL(sigaction)(signum, act, oldact);<br>
}<br>
return 0;<br>
<br>
Modified: compiler-rt/trunk/lib/asan/asan_internal.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_internal.h?rev=200295&r1=200294&r2=200295&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_internal.h?rev=200295&r1=200294&r2=200295&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/asan/asan_internal.h (original)<br>
+++ compiler-rt/trunk/lib/asan/asan_internal.h Tue Jan 28 03:28:57 2014<br>
@@ -30,15 +30,6 @@<br>
<br>
// Build-time configuration options.<br>
<br>
-// If set, asan will install its own SEGV signal handler.<br>
-#ifndef ASAN_NEEDS_SEGV<br>
-# if SANITIZER_ANDROID == 1<br>
-# define ASAN_NEEDS_SEGV 0<br>
-# else<br>
-# define ASAN_NEEDS_SEGV 1<br>
-# endif<br>
-#endif<br>
-<br>
// If set, asan will intercept C++ exception api call(s).<br>
#ifndef ASAN_HAS_EXCEPTIONS<br>
# define ASAN_HAS_EXCEPTIONS 1<br>
<br>
Modified: compiler-rt/trunk/lib/asan/asan_linux.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_linux.cc?rev=200295&r1=200294&r2=200295&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_linux.cc?rev=200295&r1=200294&r2=200295&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/asan/asan_linux.cc (original)<br>
+++ compiler-rt/trunk/lib/asan/asan_linux.cc Tue Jan 28 03:28:57 2014<br>
@@ -99,7 +99,7 @@ void GetPcSpBp(void *context, uptr *pc,<br>
}<br>
<br>
bool AsanInterceptsSignal(int signum) {<br>
- return signum == SIGSEGV && flags()->handle_segv;<br>
+ return signum == SIGSEGV && common_flags()->handle_segv;<br>
}<br>
<br>
void AsanPlatformThreadInit() {<br>
<br>
Modified: compiler-rt/trunk/lib/asan/asan_mac.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_mac.cc?rev=200295&r1=200294&r2=200295&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_mac.cc?rev=200295&r1=200294&r2=200295&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/asan/asan_mac.cc (original)<br>
+++ compiler-rt/trunk/lib/asan/asan_mac.cc Tue Jan 28 03:28:57 2014<br>
@@ -237,7 +237,8 @@ void *AsanDoesNotSupportStaticLinkage()<br>
}<br>
<br>
bool AsanInterceptsSignal(int signum) {<br>
- return (signum == SIGSEGV || signum == SIGBUS) && flags()->handle_segv;<br>
+ return (signum == SIGSEGV || signum == SIGBUS) &&<br>
+ common_flags()->handle_segv;<br>
}<br>
<br>
void AsanPlatformThreadInit() {<br>
<br>
Modified: compiler-rt/trunk/lib/asan/asan_posix.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_posix.cc?rev=200295&r1=200294&r2=200295&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_posix.cc?rev=200295&r1=200294&r2=200295&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/asan/asan_posix.cc (original)<br>
+++ compiler-rt/trunk/lib/asan/asan_posix.cc Tue Jan 28 03:28:57 2014<br>
@@ -42,7 +42,7 @@ static void MaybeInstallSigaction(int si<br>
REAL(memset)(&sigact, 0, sizeof(sigact));<br>
sigact.sa_sigaction = handler;<br>
sigact.sa_flags = SA_SIGINFO;<br>
- if (flags()->use_sigaltstack) sigact.sa_flags |= SA_ONSTACK;<br>
+ if (common_flags()->use_sigaltstack) sigact.sa_flags |= SA_ONSTACK;<br>
CHECK_EQ(0, REAL(sigaction)(signum, &sigact, 0));<br>
VReport(1, "Installed the sigaction for signal %d\n", signum);<br>
}<br>
@@ -87,7 +87,7 @@ void InstallSignalHandlers() {<br>
// Set the alternate signal stack for the main thread.<br>
// This will cause SetAlternateSignalStack to be called twice, but the stack<br>
// will be actually set only once.<br>
- if (flags()->use_sigaltstack) SetAlternateSignalStack();<br>
+ if (common_flags()->use_sigaltstack) SetAlternateSignalStack();<br>
MaybeInstallSigaction(SIGSEGV, ASAN_OnSIGSEGV);<br>
MaybeInstallSigaction(SIGBUS, ASAN_OnSIGSEGV);<br>
}<br>
<br>
Modified: compiler-rt/trunk/lib/asan/asan_rtl.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_rtl.cc?rev=200295&r1=200294&r2=200295&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_rtl.cc?rev=200295&r1=200294&r2=200295&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/asan/asan_rtl.cc (original)<br>
+++ compiler-rt/trunk/lib/asan/asan_rtl.cc Tue Jan 28 03:28:57 2014<br>
@@ -121,9 +121,6 @@ static void ParseFlagsFromString(Flags *<br>
ParseFlag(str, &f->exitcode, "exitcode");<br>
ParseFlag(str, &f->allow_user_poisoning, "allow_user_poisoning");<br>
ParseFlag(str, &f->sleep_before_dying, "sleep_before_dying");<br>
- ParseFlag(str, &f->handle_segv, "handle_segv");<br>
- ParseFlag(str, &f->allow_user_segv_handler, "allow_user_segv_handler");<br>
- ParseFlag(str, &f->use_sigaltstack, "use_sigaltstack");<br>
ParseFlag(str, &f->check_malloc_usable_size, "check_malloc_usable_size");<br>
ParseFlag(str, &f->unmap_shadow_on_exit, "unmap_shadow_on_exit");<br>
ParseFlag(str, &f->abort_on_error, "abort_on_error");<br>
@@ -167,9 +164,6 @@ void InitializeFlags(Flags *f, const cha<br>
f->exitcode = ASAN_DEFAULT_FAILURE_EXITCODE;<br>
f->allow_user_poisoning = true;<br>
f->sleep_before_dying = 0;<br>
- f->handle_segv = ASAN_NEEDS_SEGV;<br>
- f->allow_user_segv_handler = false;<br>
- f->use_sigaltstack = false;<br>
f->check_malloc_usable_size = true;<br>
f->unmap_shadow_on_exit = false;<br>
f->abort_on_error = false;<br>
<br>
Modified: compiler-rt/trunk/lib/asan/asan_thread.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_thread.cc?rev=200295&r1=200294&r2=200295&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_thread.cc?rev=200295&r1=200294&r2=200295&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/asan/asan_thread.cc (original)<br>
+++ compiler-rt/trunk/lib/asan/asan_thread.cc Tue Jan 28 03:28:57 2014<br>
@@ -97,7 +97,7 @@ void AsanThread::Destroy() {<br>
VReport(1, "T%d exited\n", tid);<br>
<br>
malloc_storage().CommitBack();<br>
- if (flags()->use_sigaltstack) UnsetAlternateSignalStack();<br>
+ if (common_flags()->use_sigaltstack) UnsetAlternateSignalStack();<br>
asanThreadRegistry().FinishThread(tid);<br>
FlushToDeadThreadStats(&stats_);<br>
// We also clear the shadow on thread destruction because<br>
@@ -154,7 +154,7 @@ void AsanThread::Init() {<br>
thread_return_t AsanThread::ThreadStart(uptr os_id) {<br>
Init();<br>
asanThreadRegistry().StartThread(tid(), os_id, 0);<br>
- if (flags()->use_sigaltstack) SetAlternateSignalStack();<br>
+ if (common_flags()->use_sigaltstack) SetAlternateSignalStack();<br>
<br>
if (!start_routine_) {<br>
// start_routine_ == 0 if we're on the main thread or on one of the<br>
<br>
Modified: compiler-rt/trunk/lib/sanitizer_common/CMakeLists.txt<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/CMakeLists.txt?rev=200295&r1=200294&r2=200295&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/CMakeLists.txt?rev=200295&r1=200294&r2=200295&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/sanitizer_common/CMakeLists.txt (original)<br>
+++ compiler-rt/trunk/lib/sanitizer_common/CMakeLists.txt Tue Jan 28 03:28:57 2014<br>
@@ -73,6 +73,20 @@ set(SANITIZER_HEADERS<br>
sanitizer_syscall_linux_x86_64.inc<br>
sanitizer_thread_registry.h)<br>
<br>
+set(SANITIZER_COMMON_DEFINITIONS)<br>
+<br>
+if(ANDROID)<br>
+ list(APPEND SANITIZER_COMMON_DEFINITIONS<br>
+ SANITIZER_NEEDS_SEGV=0<br>
+ SANITIZER_LOW_MEMORY=1)<br>
+elseif(MSVC)<br>
+ list(APPEND SANITIZER_COMMON_DEFINITIONS<br>
+ SANITIZER_NEEDS_SEGV=0)<br>
+else()<br>
+ list(APPEND SANITIZER_COMMON_DEFINITIONS<br>
+ SANITIZER_NEEDS_SEGV=1)<br>
+endif()<br>
+<br>
if (NOT MSVC)<br>
set(SANITIZER_CFLAGS<br>
${SANITIZER_COMMON_CFLAGS}<br>
@@ -94,7 +108,8 @@ if(APPLE)<br>
add_compiler_rt_darwin_object_library(RTSanitizerCommon ${os}<br>
ARCH ${SANITIZER_COMMON_SUPPORTED_ARCH}<br>
SOURCES ${SANITIZER_SOURCES} ${SANITIZER_LIBCDEP_SOURCES}<br>
- CFLAGS ${SANITIZER_CFLAGS})<br>
+ CFLAGS ${SANITIZER_CFLAGS}<br>
+ DEFS ${SANITIZER_COMMON_DEFINITIONS})<br>
list(APPEND SANITIZER_RUNTIME_LIBRARIES RTSanitizerCommon.${os})<br>
endforeach()<br>
elseif(ANDROID)<br>
@@ -102,18 +117,23 @@ elseif(ANDROID)<br>
${SANITIZER_SOURCES} ${SANITIZER_LIBCDEP_SOURCES})<br>
set_target_compile_flags(RTSanitizerCommon.arm.android<br>
${SANITIZER_CFLAGS})<br>
+ set_property(TARGET RTSanitizerCommon.arm.android APPEND PROPERTY<br>
+ COMPILE_DEFINITIONS ${SANITIZER_COMMON_DEFINITIONS})<br>
list(APPEND SANITIZER_RUNTIME_LIBRARIES RTSanitizerCommon.arm.android)<br>
else()<br>
# Otherwise, build separate libraries for each target.<br>
foreach(arch ${SANITIZER_COMMON_SUPPORTED_ARCH})<br>
add_compiler_rt_object_library(RTSanitizerCommon ${arch}<br>
- SOURCES ${SANITIZER_SOURCES} CFLAGS ${SANITIZER_CFLAGS})<br>
+ SOURCES ${SANITIZER_SOURCES} CFLAGS ${SANITIZER_CFLAGS}<br>
+ DEFS ${SANITIZER_COMMON_DEFINITIONS})<br>
add_compiler_rt_object_library(RTSanitizerCommonLibc ${arch}<br>
- SOURCES ${SANITIZER_LIBCDEP_SOURCES} CFLAGS ${SANITIZER_CFLAGS})<br>
+ SOURCES ${SANITIZER_LIBCDEP_SOURCES} CFLAGS ${SANITIZER_CFLAGS}<br>
+ DEFS ${SANITIZER_COMMON_DEFINITIONS})<br>
add_compiler_rt_static_runtime(clang_rt.san-${arch} ${arch}<br>
SOURCES $<TARGET_OBJECTS:RTSanitizerCommon.${arch}><br>
$<TARGET_OBJECTS:RTSanitizerCommonLibc.${arch}><br>
- CFLAGS ${SANITIZER_CFLAGS})<br>
+ CFLAGS ${SANITIZER_CFLAGS}<br>
+ DEFS ${SANITIZER_COMMON_DEFINITIONS})<br>
list(APPEND SANITIZER_RUNTIME_LIBRARIES RTSanitizerCommon.${arch}<br>
RTSanitizerCommonLibc.${arch})<br>
endforeach()<br>
<br>
Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_flags.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_flags.cc?rev=200295&r1=200294&r2=200295&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_flags.cc?rev=200295&r1=200294&r2=200295&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_flags.cc (original)<br>
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_flags.cc Tue Jan 28 03:28:57 2014<br>
@@ -33,6 +33,10 @@ void SetCommonFlagsDefaults(CommonFlags<br>
f->allocator_may_return_null = false;<br>
f->print_summary = true;<br>
f->check_printf = false;<br>
+ // TODO(glider): tools may want to set different defaults for handle_segv.<br>
+ f->handle_segv = SANITIZER_NEEDS_SEGV;<br>
+ f->allow_user_segv_handler = false;<br>
+ f->use_sigaltstack = false;<br>
}<br>
<br>
void ParseCommonFlagsFromString(CommonFlags *f, const char *str) {<br>
@@ -50,6 +54,9 @@ void ParseCommonFlagsFromString(CommonFl<br>
ParseFlag(str, &f->allocator_may_return_null, "allocator_may_return_null");<br>
ParseFlag(str, &f->print_summary, "print_summary");<br>
ParseFlag(str, &f->check_printf, "check_printf");<br>
+ ParseFlag(str, &f->handle_segv, "handle_segv");<br>
+ ParseFlag(str, &f->allow_user_segv_handler, "allow_user_segv_handler");<br>
+ ParseFlag(str, &f->use_sigaltstack, "use_sigaltstack");<br>
<br>
// Do a sanity check for certain flags.<br>
if (f->malloc_context_size < 1)<br>
<br>
Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_flags.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_flags.h?rev=200295&r1=200294&r2=200295&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_flags.h?rev=200295&r1=200294&r2=200295&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_flags.h (original)<br>
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_flags.h Tue Jan 28 03:28:57 2014<br>
@@ -58,6 +58,14 @@ struct CommonFlags {<br>
bool print_summary;<br>
// Check printf arguments.<br>
bool check_printf;<br>
+ // If set, registers the tool's custom SEGV handler (both SIGBUS and SIGSEGV<br>
+ // on OSX).<br>
+ bool handle_segv;<br>
+ // If set, allows user to register a SEGV handler even if the tool registers<br>
+ // one.<br>
+ bool allow_user_segv_handler;<br>
+ // If set, uses alternate stack for signal handling.<br>
+ bool use_sigaltstack;<br>
};<br>
<br>
inline CommonFlags *common_flags() {<br>
<br>
Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_internal_defs.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_internal_defs.h?rev=200295&r1=200294&r2=200295&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_internal_defs.h?rev=200295&r1=200294&r2=200295&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_internal_defs.h (original)<br>
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_internal_defs.h Tue Jan 28 03:28:57 2014<br>
@@ -34,6 +34,15 @@<br>
# define SANITIZER_SUPPORTS_WEAK_HOOKS 0<br>
#endif<br>
<br>
+// If set, the tool will install its own SEGV signal handler.<br>
+#ifndef SANITIZER_NEEDS_SEGV<br>
+# if SANITIZER_ANDROID == 1<br>
+# define SANITIZER_NEEDS_SEGV 0<br>
+# else<br>
+# define SANITIZER_NEEDS_SEGV 1<br>
+# endif<br>
+#endif<br></blockquote><div><br></div><div>what about SANITIZER_LOW_MEMORY ?</div><div>Who provides a definition for it, and is ASAN_LOW_MEMORY replaced with it?</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
+<br>
// GCC does not understand __has_feature<br>
#if !defined(__has_feature)<br>
# define __has_feature(x) 0<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div>Alexey Samsonov, MSK</div>
</div></div>