[compiler-rt] r175040 - [msan] don't check shadow inside interceptors if we are inside symbolizer; add weak function __msan_default_options that overrides default options
Alexander Potapenko
glider at google.com
Wed Feb 13 23:21:57 PST 2013
Why don't you make it is_in_runtime_library?
On Feb 13, 2013 11:21 AM, "Kostya Serebryany" <kcc at google.com> wrote:
> Author: kcc
> Date: Wed Feb 13 01:19:47 2013
> New Revision: 175040
>
> URL: http://llvm.org/viewvc/llvm-project?rev=175040&view=rev
> Log:
> [msan] don't check shadow inside interceptors if we are inside symbolizer;
> add weak function __msan_default_options that overrides default options
>
> Modified:
> compiler-rt/trunk/lib/msan/msan.cc
> compiler-rt/trunk/lib/msan/msan.h
> compiler-rt/trunk/lib/msan/msan_interceptors.cc
> compiler-rt/trunk/lib/msan/msan_interface_internal.h
> compiler-rt/trunk/lib/msan/msan_report.cc
>
> Modified: compiler-rt/trunk/lib/msan/msan.cc
> URL:
> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/msan/msan.cc?rev=175040&r1=175039&r2=175040&view=diff
>
> ==============================================================================
> --- compiler-rt/trunk/lib/msan/msan.cc (original)
> +++ compiler-rt/trunk/lib/msan/msan.cc Wed Feb 13 01:19:47 2013
> @@ -58,6 +58,8 @@ static THREADLOCAL struct {
> uptr stack_top, stack_bottom;
> } __msan_stack_bounds;
>
> +static THREADLOCAL bool is_in_symbolizer;
> +
> extern "C" const int __msan_track_origins;
> int __msan_get_track_origins() {
> return __msan_track_origins;
> @@ -81,6 +83,10 @@ static bool IsRunningUnderDr() {
> return result;
> }
>
> +void EnterSymbolizer() { is_in_symbolizer = true; }
> +void ExitSymbolizer() { is_in_symbolizer = false; }
> +bool IsInSymbolizer() { return is_in_symbolizer; }
> +
> static Flags msan_flags;
>
> Flags *flags() {
> @@ -126,6 +132,9 @@ static void InitializeFlags(Flags *f, co
> f->verbosity = 0;
> f->strip_path_prefix = "";
>
> + // Override from user-specified string.
> + if (__msan_default_options)
> + ParseFlagsFromString(f, __msan_default_options());
> ParseFlagsFromString(f, options);
> }
>
> @@ -417,3 +426,11 @@ u32 __msan_get_origin(void *a) {
> u32 __msan_get_umr_origin() {
> return __msan_origin_tls;
> }
> +
> +#if !SANITIZER_SUPPORTS_WEAK_HOOKS
> +extern "C" {
> +SANITIZER_WEAK_ATTRIBUTE SANITIZER_INTERFACE_ATTRIBUTE
> +const char* __msan_default_options() { return ""; }
> +} // extern "C"
> +#endif
> +
>
> Modified: compiler-rt/trunk/lib/msan/msan.h
> URL:
> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/msan/msan.h?rev=175040&r1=175039&r2=175040&view=diff
>
> ==============================================================================
> --- compiler-rt/trunk/lib/msan/msan.h (original)
> +++ compiler-rt/trunk/lib/msan/msan.h Wed Feb 13 01:19:47 2013
> @@ -46,6 +46,10 @@ void InstallTrapHandler();
> void InstallAtExitHandler();
> void ReplaceOperatorsNewAndDelete();
>
> +void EnterSymbolizer();
> +void ExitSymbolizer();
> +bool IsInSymbolizer();
> +
> void MsanDie();
> void PrintWarning(uptr pc, uptr bp);
> void PrintWarningWithOrigin(uptr pc, uptr bp, u32 origin);
>
> Modified: compiler-rt/trunk/lib/msan/msan_interceptors.cc
> URL:
> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/msan/msan_interceptors.cc?rev=175040&r1=175039&r2=175040&view=diff
>
> ==============================================================================
> --- compiler-rt/trunk/lib/msan/msan_interceptors.cc (original)
> +++ compiler-rt/trunk/lib/msan/msan_interceptors.cc Wed Feb 13 01:19:47
> 2013
> @@ -41,6 +41,7 @@ using namespace __msan;
> #define CHECK_UNPOISONED(x, n) \
> do { \
> sptr offset = __msan_test_shadow(x, n); \
> + if (__msan::IsInSymbolizer()) break; \
> if (offset >= 0 && flags()->report_umrs) { \
> GET_CALLER_PC_BP_SP; \
> (void)sp; \
>
> Modified: compiler-rt/trunk/lib/msan/msan_interface_internal.h
> URL:
> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/msan/msan_interface_internal.h?rev=175040&r1=175039&r2=175040&view=diff
>
> ==============================================================================
> --- compiler-rt/trunk/lib/msan/msan_interface_internal.h (original)
> +++ compiler-rt/trunk/lib/msan/msan_interface_internal.h Wed Feb 13
> 01:19:47 2013
> @@ -85,6 +85,9 @@ void __msan_set_exit_code(int exit_code)
> SANITIZER_INTERFACE_ATTRIBUTE
> int __msan_set_poison_in_malloc(int do_poison);
>
> +SANITIZER_WEAK_ATTRIBUTE SANITIZER_INTERFACE_ATTRIBUTE
> +/* OPTIONAL */ const char* __msan_default_options();
> +
> // For testing.
> SANITIZER_INTERFACE_ATTRIBUTE
> void __msan_set_expect_umr(int expect_umr);
>
> Modified: compiler-rt/trunk/lib/msan/msan_report.cc
> URL:
> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/msan/msan_report.cc?rev=175040&r1=175039&r2=175040&view=diff
>
> ==============================================================================
> --- compiler-rt/trunk/lib/msan/msan_report.cc (original)
> +++ compiler-rt/trunk/lib/msan/msan_report.cc Wed Feb 13 01:19:47 2013
> @@ -44,6 +44,16 @@ class Decorator: private __sanitizer::An
> const char *End() { return Default(); }
> };
>
> +struct SymbolizerScope {
> + SymbolizerScope() { EnterSymbolizer(); }
> + ~SymbolizerScope() { ExitSymbolizer(); }
> +};
> +
> +static void PrintStack(const uptr *trace, uptr size) {
> + SymbolizerScope sym_scope;
> + StackTrace::PrintStack(trace, size, true, flags()->strip_path_prefix,
> 0);
> +}
> +
> static void DescribeOrigin(u32 origin) {
> Decorator d;
> if (flags()->verbosity)
> @@ -64,7 +74,7 @@ static void DescribeOrigin(u32 origin) {
> const uptr *trace = StackDepotGet(origin, &size);
> Printf(" %sUninitialized value was created by a heap allocation%s\n",
> d.Origin(), d.End());
> - StackTrace::PrintStack(trace, size, true, flags()->strip_path_prefix,
> 0);
> + PrintStack(trace, size);
> }
> }
>
> @@ -72,7 +82,10 @@ static void ReportSummary(const char *er
> if (!stack->size || !IsSymbolizerAvailable()) return;
> AddressInfo ai;
> uptr pc = StackTrace::GetPreviousInstructionPc(stack->trace[0]);
> - SymbolizeCode(pc, &ai, 1);
> + {
> + SymbolizerScope sym_scope;
> + SymbolizeCode(pc, &ai, 1);
> + }
> ReportErrorSummary(error_type,
> StripPathPrefix(ai.file, flags()->strip_path_prefix),
> ai.line, ai.function);
> @@ -87,8 +100,7 @@ void ReportUMR(StackTrace *stack, u32 or
> Printf("%s", d.Warning());
> Report(" WARNING: Use of uninitialized value\n");
> Printf("%s", d.End());
> - StackTrace::PrintStack(stack->trace, stack->size, true,
> - flags()->strip_path_prefix, 0);
> + PrintStack(stack->trace, stack->size);
> if (origin) {
> DescribeOrigin(origin);
> }
> @@ -99,8 +111,7 @@ void ReportExpectedUMRNotFound(StackTrac
> GenericScopedLock<StaticSpinMutex> lock(&report_mu);
>
> Printf(" WARNING: Expected use of uninitialized value not found\n");
> - StackTrace::PrintStack(stack->trace, stack->size, true,
> - flags()->strip_path_prefix, 0);
> + PrintStack(stack->trace, stack->size);
> }
>
> void ReportAtExitStatistics() {
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20130214/d5273cef/attachment.html>
More information about the llvm-commits
mailing list