[Lldb-commits] [lldb] 90d9f88 - Add Fix*Address methods to Process, call into ABI
Jason Molenda via lldb-commits
lldb-commits at lists.llvm.org
Wed Jun 14 13:49:34 PDT 2023
Author: Jason Molenda
Date: 2023-06-14T13:49:26-07:00
New Revision: 90d9f88f19a128a6bacd7c8db594feb96047cded
URL: https://github.com/llvm/llvm-project/commit/90d9f88f19a128a6bacd7c8db594feb96047cded
DIFF: https://github.com/llvm/llvm-project/commit/90d9f88f19a128a6bacd7c8db594feb96047cded.diff
LOG: Add Fix*Address methods to Process, call into ABI
We need to clear non-addressable bits from addresses across
the lldb sources. Currently these need to use an ABI method
to clear those bits from addresses, which you do by taking a
Process, getting the current ABI, then calling the method.
Simplify this by providing methods in Process which call into
the ABI methods themselves.
Differential Revision: https://reviews.llvm.org/D152863
Added:
Modified:
lldb/include/lldb/Target/Process.h
lldb/source/Target/Process.cpp
Removed:
################################################################################
diff --git a/lldb/include/lldb/Target/Process.h b/lldb/include/lldb/Target/Process.h
index b27fd212ad1f9..3b9de13206ac8 100644
--- a/lldb/include/lldb/Target/Process.h
+++ b/lldb/include/lldb/Target/Process.h
@@ -1392,6 +1392,22 @@ class Process : public std::enable_shared_from_this<Process>,
m_highmem_data_address_mask = data_address_mask;
}
+ /// Some targets might use bits in a code address to indicate a mode switch,
+ /// ARM uses bit zero to signify a code address is thumb, so any ARM ABI
+ /// plug-ins would strip those bits.
+ /// Or use the high bits to authenticate a pointer value.
+ lldb::addr_t FixCodeAddress(lldb::addr_t pc);
+ lldb::addr_t FixDataAddress(lldb::addr_t pc);
+
+ /// Use this method when you do not know, or do not care what kind of address
+ /// you are fixing. On platforms where there would be a
diff erence between the
+ /// two types, it will pick the safest option.
+ ///
+ /// Its purpose is to signal that no specific choice was made and provide an
+ /// alternative to randomly picking FixCode/FixData address. Which could break
+ /// platforms where there is a
diff erence (only Arm Thumb at this time).
+ lldb::addr_t FixAnyAddress(lldb::addr_t pc);
+
/// Get the Modification ID of the process.
///
/// \return
diff --git a/lldb/source/Target/Process.cpp b/lldb/source/Target/Process.cpp
index 3dd807aa83632..9730d7217eda3 100644
--- a/lldb/source/Target/Process.cpp
+++ b/lldb/source/Target/Process.cpp
@@ -5688,6 +5688,24 @@ lldb::addr_t Process::GetHighmemDataAddressMask() {
return GetDataAddressMask();
}
+addr_t Process::FixCodeAddress(addr_t addr) {
+ if (ABISP abi_sp = GetABI())
+ addr = abi_sp->FixCodeAddress(addr);
+ return addr;
+}
+
+addr_t Process::FixDataAddress(addr_t addr) {
+ if (ABISP abi_sp = GetABI())
+ addr = abi_sp->FixDataAddress(addr);
+ return addr;
+}
+
+addr_t Process::FixAnyAddress(addr_t addr) {
+ if (ABISP abi_sp = GetABI())
+ addr = abi_sp->FixAnyAddress(addr);
+ return addr;
+}
+
void Process::DidExec() {
Log *log = GetLog(LLDBLog::Process);
LLDB_LOGF(log, "Process::%s()", __FUNCTION__);
More information about the lldb-commits
mailing list