diff options
author | Tor Egge <Tor.Egge@online.no> | 2021-09-10 11:50:35 +0200 |
---|---|---|
committer | Tor Egge <Tor.Egge@online.no> | 2021-09-10 11:50:35 +0200 |
commit | 1988749f85d0e2b920213800d8ada5705e2954f5 (patch) | |
tree | 2e699248f1ae6f2214c15092cf03ca7a6b289142 /eval | |
parent | 34adf677b98abd47a2c75f43287878ac8ccef8fc (diff) |
Check symbol type when mapping from address to symbol.
Diffstat (limited to 'eval')
-rw-r--r-- | eval/src/vespa/eval/eval/llvm/addr_to_symbol.cpp | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/eval/src/vespa/eval/eval/llvm/addr_to_symbol.cpp b/eval/src/vespa/eval/eval/llvm/addr_to_symbol.cpp index 566ab931837..99aeb390544 100644 --- a/eval/src/vespa/eval/eval/llvm/addr_to_symbol.cpp +++ b/eval/src/vespa/eval/eval/llvm/addr_to_symbol.cpp @@ -8,6 +8,7 @@ using vespalib::demangle; using llvm::object::ObjectFile; +using SymbolType = llvm::object::SymbolRef::Type; namespace vespalib::eval { @@ -15,6 +16,11 @@ namespace { void my_local_test_symbol() {} +bool symbol_is_data_or_function(SymbolType type) +{ + return ((type == SymbolType::ST_Data) || (type == SymbolType::ST_Function)); +} + } // <unnamed> vespalib::string addr_to_symbol(const void *addr) { @@ -42,7 +48,10 @@ vespalib::string addr_to_symbol(const void *addr) { for (const auto &symbol: symbols) { auto sym_name = symbol.getName(); auto sym_addr = symbol.getAddress(); - if (sym_name && sym_addr && (*sym_addr == offset)) { + auto sym_type = symbol.getType(); + if (sym_name && sym_addr && sym_type && + symbol_is_data_or_function(*sym_type) && + (*sym_addr == offset)) { return demangle(sym_name->str().c_str()); } } |