MCPcopy Create free account
hub / github.com/KDE/labplot / symbolize_address

Method symbolize_address

admin/asan_symbolize.py:372–412  ·  view source on GitHub ↗
(self, addr, binary, offset)

Source from the content-addressed store, hash-verified

370 self.process_line = self.process_line_posix
371
372 def symbolize_address(self, addr, binary, offset):
373 # On non-Darwin (i.e. on platforms without .dSYM debug info) always use
374 # a single symbolizer binary.
375 # On Darwin, if the dsym hint producer is present:
376 # 1. check whether we've seen this binary already; if so,
377 # use |llvm_symbolizers[binary]|, which has already loaded the debug
378 # info for this binary (might not be the case for
379 # |last_llvm_symbolizer|);
380 # 2. otherwise check if we've seen all the hints for this binary already;
381 # if so, reuse |last_llvm_symbolizer| which has the full set of hints;
382 # 3. otherwise create a new symbolizer and pass all currently known
383 # .dSYM hints to it.
384 if not binary in self.llvm_symbolizers:
385 use_new_symbolizer = True
386 if self.system == 'Darwin' and self.dsym_hint_producer:
387 dsym_hints_for_binary = set(self.dsym_hint_producer(binary))
388 use_new_symbolizer = bool(dsym_hints_for_binary - self.dsym_hints)
389 self.dsym_hints |= dsym_hints_for_binary
390 if self.last_llvm_symbolizer and not use_new_symbolizer:
391 self.llvm_symbolizers[binary] = self.last_llvm_symbolizer
392 else:
393 self.last_llvm_symbolizer = LLVMSymbolizerFactory(
394 self.system, guess_arch(addr), self.dsym_hints)
395 self.llvm_symbolizers[binary] = self.last_llvm_symbolizer
396 # Use the chain of symbolizers:
397 # Breakpad symbolizer -> LLVM symbolizer -> addr2line/atos
398 # (fall back to next symbolizer if the previous one fails).
399 if not binary in symbolizers:
400 symbolizers[binary] = ChainSymbolizer(
401 [BreakpadSymbolizerFactory(binary), self.llvm_symbolizers[binary]])
402 result = symbolizers[binary].symbolize(addr, binary, offset)
403 if result is None:
404 if not allow_system_symbolizer:
405 raise Exception('Failed to launch or use llvm-symbolizer.')
406 # Initialize system symbolizer only if other symbolizers failed.
407 symbolizers[binary].append_symbolizer(
408 SystemSymbolizerFactory(self.system, addr, binary))
409 result = symbolizers[binary].symbolize(addr, binary, offset)
410 # The system symbolizer must produce some result.
411 assert result
412 return result
413
414 def get_symbolized_lines(self, symbolized_lines):
415 if not symbolized_lines:

Callers 1

process_line_posixMethod · 0.95

Calls 7

LLVMSymbolizerFactoryFunction · 0.85
guess_archFunction · 0.85
ChainSymbolizerClass · 0.85
SystemSymbolizerFactoryFunction · 0.85
append_symbolizerMethod · 0.80
symbolizeMethod · 0.45

Tested by

no test coverage detected