diff options
author | SiyangXie@gmail.com <SiyangXie@gmail.com@4c0a9323-5329-0410-9bdc-e9ce6186880e> | 2010-10-07 20:31:36 +0000 |
---|---|---|
committer | SiyangXie@gmail.com <SiyangXie@gmail.com@4c0a9323-5329-0410-9bdc-e9ce6186880e> | 2010-10-07 20:31:36 +0000 |
commit | 5b117cf53af46f357d28761ced3a1d94aeb5df91 (patch) | |
tree | 2d6a68637909ef385a5fef6e21962f749d6ef9eb /src/processor/stackwalker.cc | |
parent | Make dump_syms output an INFO CODE_ID line that includes the code file and co... (diff) | |
download | breakpad-5b117cf53af46f357d28761ced3a1d94aeb5df91.tar.xz |
Refactor source line resolver, add interface in supplier and resolver.
git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@711 4c0a9323-5329-0410-9bdc-e9ce6186880e
Diffstat (limited to 'src/processor/stackwalker.cc')
-rw-r--r-- | src/processor/stackwalker.cc | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/src/processor/stackwalker.cc b/src/processor/stackwalker.cc index 39eb65ec..296697cb 100644 --- a/src/processor/stackwalker.cc +++ b/src/processor/stackwalker.cc @@ -97,15 +97,18 @@ bool Stackwalker::Walk(CallStack *stack) { no_symbol_modules_.find( module->code_file()) == no_symbol_modules_.end() && supplier_) { - string symbol_data, symbol_file; + string symbol_file; + char *symbol_data; SymbolSupplier::SymbolResult symbol_result = - supplier_->GetSymbolFile(module, system_info_, - &symbol_file, &symbol_data); + supplier_->GetCStringSymbolData(module, + system_info_, + &symbol_file, + &symbol_data); switch (symbol_result) { case SymbolSupplier::FOUND: - resolver_->LoadModuleUsingMapBuffer(frame->module, - symbol_data); + resolver_->LoadModuleUsingMemoryBuffer(frame->module, + symbol_data); break; case SymbolSupplier::NOT_FOUND: no_symbol_modules_.insert(module->code_file()); @@ -207,13 +210,14 @@ bool Stackwalker::InstructionAddressSeemsValid(u_int64_t address) { } if (!resolver_->HasModule(module)) { - string symbol_data, symbol_file; + string symbol_file; + char *symbol_data; SymbolSupplier::SymbolResult symbol_result = - supplier_->GetSymbolFile(module, system_info_, - &symbol_file, &symbol_data); + supplier_->GetCStringSymbolData(module, system_info_, + &symbol_file, &symbol_data); if (symbol_result != SymbolSupplier::FOUND || - !resolver_->LoadModuleUsingMapBuffer(module, + !resolver_->LoadModuleUsingMemoryBuffer(module, symbol_data)) { // we don't have symbols, but we're inside a loaded module return true; |