[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
Kostya Serebryany
kcc at google.com
Wed Feb 13 23:51:28 PST 2013
On Thu, Feb 14, 2013 at 11:21 AM, Alexander Potapenko <glider at google.com>wrote:
> Why don't you make it is_in_runtime_library?
>
There is not much happening inside msan-rt (unlike asan/tsan),
so I chose the name that reflects the actual usage, not a potential
extension of it.
--kcc
> 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/47ae1e7f/attachment.html>
More information about the llvm-commits
mailing list