aboutsummaryrefslogtreecommitdiff
path: root/src/processor/stackwalker.cc
diff options
context:
space:
mode:
authorSiyangXie@gmail.com <SiyangXie@gmail.com@4c0a9323-5329-0410-9bdc-e9ce6186880e>2010-10-07 20:31:36 +0000
committerSiyangXie@gmail.com <SiyangXie@gmail.com@4c0a9323-5329-0410-9bdc-e9ce6186880e>2010-10-07 20:31:36 +0000
commit5b117cf53af46f357d28761ced3a1d94aeb5df91 (patch)
tree2d6a68637909ef385a5fef6e21962f749d6ef9eb /src/processor/stackwalker.cc
parentMake dump_syms output an INFO CODE_ID line that includes the code file and co... (diff)
downloadbreakpad-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.cc22
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;