[Lldb-commits] [lldb] ce12b52 - [lldb] Fixup more code addresses
Jonas Devlieghere via lldb-commits
lldb-commits at lists.llvm.org
Thu May 13 10:27:28 PDT 2021
Author: Jonas Devlieghere
Date: 2021-05-13T10:27:22-07:00
New Revision: ce12b52de2fb3f319ff18effc4ea9ff4d369f328
URL: https://github.com/llvm/llvm-project/commit/ce12b52de2fb3f319ff18effc4ea9ff4d369f328
DIFF: https://github.com/llvm/llvm-project/commit/ce12b52de2fb3f319ff18effc4ea9ff4d369f328.diff
LOG: [lldb] Fixup more code addresses
The Swift async task pointers are signed on arm64e and we need to fixup
the addresses in the CFA and DWARF expressions.
Added:
Modified:
lldb/source/Expression/DWARFExpression.cpp
lldb/source/Target/RegisterContextUnwind.cpp
Removed:
################################################################################
diff --git a/lldb/source/Expression/DWARFExpression.cpp b/lldb/source/Expression/DWARFExpression.cpp
index 12fe76ee95d2f..776d7f253a8ff 100644
--- a/lldb/source/Expression/DWARFExpression.cpp
+++ b/lldb/source/Expression/DWARFExpression.cpp
@@ -1130,6 +1130,8 @@ bool DWARFExpression::Evaluate(
lldb::addr_t pointer_value =
process->ReadPointerFromMemory(pointer_addr, error);
if (pointer_value != LLDB_INVALID_ADDRESS) {
+ if (ABISP abi_sp = process->GetABI())
+ pointer_value = abi_sp->FixCodeAddress(pointer_value);
stack.back().GetScalar() = pointer_value;
stack.back().ClearContext();
} else {
diff --git a/lldb/source/Target/RegisterContextUnwind.cpp b/lldb/source/Target/RegisterContextUnwind.cpp
index b8d9926ac77ba..1ce21e6306e09 100644
--- a/lldb/source/Target/RegisterContextUnwind.cpp
+++ b/lldb/source/Target/RegisterContextUnwind.cpp
@@ -1946,6 +1946,8 @@ bool RegisterContextUnwind::ReadFrameAddress(
reg_info, cfa_reg_contents, reg_info->byte_size, reg_value);
if (error.Success()) {
address = reg_value.GetAsUInt64();
+ if (ABISP abi_sp = m_thread.GetProcess()->GetABI())
+ address = abi_sp->FixCodeAddress(address);
UnwindLogMsg(
"CFA value via dereferencing reg %s (%d): reg has val 0x%" PRIx64
", CFA value is 0x%" PRIx64,
@@ -2000,6 +2002,8 @@ bool RegisterContextUnwind::ReadFrameAddress(
if (dwarfexpr.Evaluate(&exe_ctx, this, 0, nullptr, nullptr, result,
&error)) {
address = result.GetScalar().ULongLong();
+ if (ABISP abi_sp = m_thread.GetProcess()->GetABI())
+ address = abi_sp->FixCodeAddress(address);
UnwindLogMsg("CFA value set by DWARF expression is 0x%" PRIx64,
address);
More information about the lldb-commits
mailing list