forked from OSchip/llvm-project
				
			[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:
		
							parent
							
								
									1440105338
								
							
						
					
					
						commit
						e87e5ce5d6
					
				| 
						 | 
					@ -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:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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();
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue