[UBSan] Initialize symbolizer inside __ubsan::Init().

We used to initialize symbolizer lazily, but this doesn't work in
various sandboxed environments. Instead, let's be consistent with
the rest of sanitizers.

llvm-svn: 214006
This commit is contained in:
Alexey Samsonov 2014-07-26 01:41:45 +00:00
parent 1440105338
commit e87e5ce5d6
2 changed files with 5 additions and 3 deletions

View File

@ -63,8 +63,8 @@ Location __ubsan::getFunctionLocation(uptr Loc, const char **FName) {
InitIfNecessary(); InitIfNecessary();
AddressInfo Info; AddressInfo Info;
if (!Symbolizer::GetOrInit()->SymbolizePC(Loc, &Info, 1) || if (!Symbolizer::Get()->SymbolizePC(Loc, &Info, 1) || !Info.module ||
!Info.module || !*Info.module) !*Info.module)
return Location(Loc); return Location(Loc);
if (FName && Info.function) if (FName && Info.function)
@ -148,7 +148,7 @@ static void renderText(const char *Message, const Diag::Arg *Args) {
Printf("%s", A.String); Printf("%s", A.String);
break; break;
case Diag::AK_Mangled: { case Diag::AK_Mangled: {
Printf("'%s'", Symbolizer::GetOrInit()->Demangle(A.String)); Printf("'%s'", Symbolizer::Get()->Demangle(A.String));
break; break;
} }
case Diag::AK_SInt: case Diag::AK_SInt:

View File

@ -17,6 +17,7 @@
#include "sanitizer_common/sanitizer_libc.h" #include "sanitizer_common/sanitizer_libc.h"
#include "sanitizer_common/sanitizer_flags.h" #include "sanitizer_common/sanitizer_flags.h"
#include "sanitizer_common/sanitizer_mutex.h" #include "sanitizer_common/sanitizer_mutex.h"
#include "sanitizer_common/sanitizer_symbolizer.h"
using namespace __ubsan; using namespace __ubsan;
@ -42,6 +43,7 @@ void __ubsan::InitIfNecessary() {
cf->print_summary = false; cf->print_summary = false;
// Common flags may only be modified via UBSAN_OPTIONS. // Common flags may only be modified via UBSAN_OPTIONS.
ParseCommonFlagsFromString(cf, GetEnv("UBSAN_OPTIONS")); ParseCommonFlagsFromString(cf, GetEnv("UBSAN_OPTIONS"));
Symbolizer::GetOrInit();
} }
// Initialize UBSan-specific flags. // Initialize UBSan-specific flags.
InitializeFlags(); InitializeFlags();