[Lldb-commits] [lldb] 835b5ef - [lldb] Strip metadata bits on function pointer in IndirectCallEdge::GetCallee (#196204)
via lldb-commits
lldb-commits at lists.llvm.org
Thu May 7 11:13:21 PDT 2026
Author: Alex Langford
Date: 2026-05-07T18:13:15Z
New Revision: 835b5ef1e3acee1e70b9ea97ed8c2f579da8c2e8
URL: https://github.com/llvm/llvm-project/commit/835b5ef1e3acee1e70b9ea97ed8c2f579da8c2e8
DIFF: https://github.com/llvm/llvm-project/commit/835b5ef1e3acee1e70b9ea97ed8c2f579da8c2e8.diff
LOG: [lldb] Strip metadata bits on function pointer in IndirectCallEdge::GetCallee (#196204)
IndirectCallEdge::GetCallee calculates the raw address of a function
pointer and tries to resolve a load address for it. If the function
pointer has metadata bits in it (e.g. a signed pointer in arm64e) then
the resolution will fail.
---------
Co-authored-by: Jonas Devlieghere <jonas at devlieghere.com>
Added:
Modified:
lldb/source/Symbol/Function.cpp
Removed:
################################################################################
diff --git a/lldb/source/Symbol/Function.cpp b/lldb/source/Symbol/Function.cpp
index cc8347fd5c510..9b9dd3fbc0c65 100644
--- a/lldb/source/Symbol/Function.cpp
+++ b/lldb/source/Symbol/Function.cpp
@@ -235,6 +235,13 @@ Function *IndirectCallEdge::GetCallee(ModuleList &images,
return nullptr;
}
+ if (auto *process = exe_ctx.GetProcessPtr()) {
+ raw_addr = process->FixCodeAddress(raw_addr);
+ } else {
+ LLDB_LOG(log, "IndirectCallEdge: No Process available, unable to call "
+ "FixCodeAddress on function pointer");
+ }
+
Address callee_addr;
if (!exe_ctx.GetTargetPtr()->ResolveLoadAddress(raw_addr, callee_addr)) {
LLDB_LOG(log, "IndirectCallEdge: Could not resolve callee's load address");
More information about the lldb-commits
mailing list