Read dynamic symbols table even if binary contains debug info

A=Wander Lairson Costa <wcosta@mozilla.com>. R=ted at https://breakpad.appspot.com/9684002/

git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@1400 4c0a9323-5329-0410-9bdc-e9ce6186880e
This commit is contained in:
ted.mielczarek@gmail.com 2014-11-03 18:25:43 +00:00
parent c971cf439c
commit 8127f56dff
2 changed files with 53 additions and 45 deletions

View file

@ -98,10 +98,21 @@ void Module::AddStackFrameEntry(StackFrameEntry *stack_frame_entry) {
}
void Module::AddExtern(Extern *ext) {
std::pair<ExternSet::iterator,bool> ret = externs_.insert(ext);
if (!ret.second) {
// Free the duplicate that was not inserted because this Module
// now owns it.
Function func;
func.name = ext->name;
func.address = ext->address;
// Since parsing debug section and public info are not necessarily
// mutually exclusive, check if the symbol has already been read
// as a function to avoid duplicates.
if (functions_.find(&func) == functions_.end()) {
std::pair<ExternSet::iterator,bool> ret = externs_.insert(ext);
if (!ret.second) {
// Free the duplicate that was not inserted because this Module
// now owns it.
delete ext;
}
} else {
delete ext;
}
}