tsan: add IsSymbolizerAvailable() function for querying for presence of internal/external symbolizer
llvm-svn: 173783
This commit is contained in:
		
							parent
							
								
									b130fc3c0d
								
							
						
					
					
						commit
						7943b69002
					
				| 
						 | 
				
			
			@ -315,6 +315,12 @@ class Symbolizer {
 | 
			
		|||
    return true;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  bool IsSymbolizerAvailable() {
 | 
			
		||||
    if (internal_symbolizer_ == 0)
 | 
			
		||||
      internal_symbolizer_ = InternalSymbolizer::get();
 | 
			
		||||
    return internal_symbolizer_ || external_symbolizer_;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 private:
 | 
			
		||||
  char *SendCommand(bool is_data, const char *module_name, uptr module_offset) {
 | 
			
		||||
    // First, try to use internal symbolizer.
 | 
			
		||||
| 
						 | 
				
			
			@ -397,4 +403,8 @@ bool InitializeExternalSymbolizer(const char *path_to_symbolizer) {
 | 
			
		|||
  return symbolizer.InitializeExternalSymbolizer(path_to_symbolizer);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool IsSymbolizerAvailable() {
 | 
			
		||||
  return symbolizer.IsSymbolizerAvailable();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}  // namespace __sanitizer
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -69,6 +69,8 @@ struct DataInfo {
 | 
			
		|||
uptr SymbolizeCode(uptr address, AddressInfo *frames, uptr max_frames);
 | 
			
		||||
bool SymbolizeData(uptr address, DataInfo *info);
 | 
			
		||||
 | 
			
		||||
bool IsSymbolizerAvailable();
 | 
			
		||||
 | 
			
		||||
// Attempts to demangle the provided C++ mangled name.
 | 
			
		||||
const char *Demangle(const char *Name);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -55,7 +55,8 @@ static ReportStack *NewReportStackEntry(const AddressInfo &info) {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
ReportStack *SymbolizeCode(uptr addr) {
 | 
			
		||||
  if (flags()->external_symbolizer_path[0]) {
 | 
			
		||||
  if (!IsSymbolizerAvailable())
 | 
			
		||||
    return SymbolizeCodeAddr2Line(addr);
 | 
			
		||||
  static const uptr kMaxAddrFrames = 16;
 | 
			
		||||
  InternalScopedBuffer<AddressInfo> addr_frames(kMaxAddrFrames);
 | 
			
		||||
  for (uptr i = 0; i < kMaxAddrFrames; i++)
 | 
			
		||||
| 
						 | 
				
			
			@ -78,11 +79,9 @@ ReportStack *SymbolizeCode(uptr addr) {
 | 
			
		|||
  }
 | 
			
		||||
  return top;
 | 
			
		||||
}
 | 
			
		||||
  return SymbolizeCodeAddr2Line(addr);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ReportLocation *SymbolizeData(uptr addr) {
 | 
			
		||||
  if (flags()->external_symbolizer_path[0] == 0)
 | 
			
		||||
  if (!IsSymbolizerAvailable())
 | 
			
		||||
    return 0;
 | 
			
		||||
  DataInfo info;
 | 
			
		||||
  if (!__sanitizer::SymbolizeData(addr, &info))
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue