aboutsummaryrefslogtreecommitdiffstats
path: root/eval
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@online.no>2021-09-10 11:50:35 +0200
committerTor Egge <Tor.Egge@online.no>2021-09-10 11:50:35 +0200
commit1988749f85d0e2b920213800d8ada5705e2954f5 (patch)
tree2e699248f1ae6f2214c15092cf03ca7a6b289142 /eval
parent34adf677b98abd47a2c75f43287878ac8ccef8fc (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.cpp11
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());
}
}