diff options
author | Alexander Potapenko <glider@google.com> | 2012-09-26 12:12:41 +0000 |
---|---|---|
committer | Alexander Potapenko <glider@google.com> | 2012-09-26 12:12:41 +0000 |
commit | 59cc8776c40de66c2478ca52a721a79a75abb613 (patch) | |
tree | 4188218e06c0429527aea1f102f0bde53f586d11 /compiler-rt/lib/asan/scripts/asan_symbolize.py | |
parent | fa2a964540e4904af3f0917ebd01e70319f9cac5 (diff) | |
download | bcm5719-llvm-59cc8776c40de66c2478ca52a721a79a75abb613.tar.gz bcm5719-llvm-59cc8776c40de66c2478ca52a721a79a75abb613.zip |
Encapsulate the main loop into a class to allow reusing it.
llvm-svn: 164694
Diffstat (limited to 'compiler-rt/lib/asan/scripts/asan_symbolize.py')
-rwxr-xr-x | compiler-rt/lib/asan/scripts/asan_symbolize.py | 54 |
1 files changed, 28 insertions, 26 deletions
diff --git a/compiler-rt/lib/asan/scripts/asan_symbolize.py b/compiler-rt/lib/asan/scripts/asan_symbolize.py index 60caa920a73..454e6924bf4 100755 --- a/compiler-rt/lib/asan/scripts/asan_symbolize.py +++ b/compiler-rt/lib/asan/scripts/asan_symbolize.py @@ -20,6 +20,7 @@ vmaddrs = {} DEBUG = False +# FIXME: merge the code that calls fix_filename(). def fix_filename(file_name): for path_to_cut in sys.argv[1:]: file_name = re.sub(".*" + path_to_cut, "", file_name) @@ -304,29 +305,31 @@ class BreakpadSymbolizer(Symbolizer): return None -def symbolize_address(system, addr, binary, offset): - # Use the chain of symbolizers: - # Breakpad symbolizer -> LLVM symbolizer -> addr2line/atos - # (fall back to next symbolizer if the previous one fails). - if not symbolizers.has_key(binary): - symbolizers[binary] = ChainSymbolizer( - [BreakpadSymbolizerFactory(addr, binary), llvm_symbolizer]) - result = symbolizers[binary].symbolize(addr, binary, offset) - if result is None: - # Initialize system symbolizer only if other symbolizers failed. - symbolizers[binary].append_symbolizer( - SystemSymbolizerFactory(system, addr, binary)) +class SymbolizationLoop(object): + def __init__(self): + self.system = os.uname()[0] + if self.system in ['Linux', 'Darwin']: + self.llvm_symbolizer = LLVMSymbolizerFactory(self.system) + else: + raise Exception("Unknown system") + def symbolize_address(self, addr, binary, offset): + # Use the chain of symbolizers: + # Breakpad symbolizer -> LLVM symbolizer -> addr2line/atos + # (fall back to next symbolizer if the previous one fails). + if not symbolizers.has_key(binary): + symbolizers[binary] = ChainSymbolizer( + [BreakpadSymbolizerFactory(addr, binary), llvm_symbolizer]) result = symbolizers[binary].symbolize(addr, binary, offset) - # The system symbolizer must produce some result. - assert(result) - return result - -def main(): - system = os.uname()[0] - global llvm_symbolizer - llvm_symbolizer = LLVMSymbolizerFactory(system) - frame_no = 0 - if system in ['Linux', 'Darwin']: + if result is None: + # Initialize system symbolizer only if other symbolizers failed. + symbolizers[binary].append_symbolizer( + SystemSymbolizerFactory(self.system, addr, binary)) + result = symbolizers[binary].symbolize(addr, binary, offset) + # The system symbolizer must produce some result. + assert(result) + return result + def loop(self): + frame_no = 0 for line in sys.stdin: #0 0x7f6e35cf2e45 (/blah/foo.so+0x11fe45) stack_trace_line_format = ( @@ -341,16 +344,15 @@ def main(): if (frameno_str == "0"): # Assume that frame #0 is the first frame of new stack trace. frame_no = 0 - symbolized_line = symbolize_address(system, addr, binary, offset) + symbolized_line = self.symbolize_address(addr, binary, offset) if not symbolized_line: print line.rstrip() else: for symbolized_frame in symbolized_line: print " #" + str(frame_no) + " " + symbolized_frame.rstrip() frame_no += 1 - else: - print 'Unknown system: ', system if __name__ == '__main__': - main() + loop = SymbolizationLoop() + loop.loop() |