aboutsummaryrefslogtreecommitdiff
path: root/src/processor/simple_symbol_supplier.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/processor/simple_symbol_supplier.cc')
-rw-r--r--src/processor/simple_symbol_supplier.cc25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/processor/simple_symbol_supplier.cc b/src/processor/simple_symbol_supplier.cc
index fb16818d..3cbd59a3 100644
--- a/src/processor/simple_symbol_supplier.cc
+++ b/src/processor/simple_symbol_supplier.cc
@@ -33,6 +33,9 @@
//
// Author: Mark Mentovai
+#include <sys/types.h>
+#include <sys/stat.h>
+
#include <cassert>
#include "processor/simple_symbol_supplier.h"
@@ -42,6 +45,25 @@
namespace google_airbag {
+static bool file_exists(const string &file_name) {
+ struct stat sb;
+ return stat(file_name.c_str(), &sb) == 0;
+}
+
+SymbolSupplier::SymbolResult SimpleSymbolSupplier::GetSymbolFile(
+ const CodeModule *module, const SystemInfo *system_info,
+ string *symbol_file) {
+ assert(symbol_file);
+ for (unsigned int path_index = 0; path_index < paths_.size(); ++path_index) {
+ SymbolResult result;
+ if ((result = GetSymbolFileAtPath(module, system_info, paths_[path_index],
+ symbol_file)) != NOT_FOUND) {
+ return result;
+ }
+ }
+ return NOT_FOUND;
+}
+
SymbolSupplier::SymbolResult SimpleSymbolSupplier::GetSymbolFileAtPath(
const CodeModule *module, const SystemInfo *system_info,
const string &root_path, string *symbol_file) {
@@ -81,6 +103,9 @@ SymbolSupplier::SymbolResult SimpleSymbolSupplier::GetSymbolFileAtPath(
}
path.append(".sym");
+ if (!file_exists(path))
+ return NOT_FOUND;
+
*symbol_file = path;
return FOUND;
}