This revision was automatically updated to reflect the committed changes. Closed by commit rG90d9f88f19a1: Add Fix*Address methods to Process, call into ABI (authored by jasonmolenda).
Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D152863/new/ https://reviews.llvm.org/D152863 Files: lldb/include/lldb/Target/Process.h lldb/source/Target/Process.cpp Index: lldb/source/Target/Process.cpp =================================================================== --- lldb/source/Target/Process.cpp +++ lldb/source/Target/Process.cpp @@ -5688,6 +5688,24 @@ 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__); Index: lldb/include/lldb/Target/Process.h =================================================================== --- lldb/include/lldb/Target/Process.h +++ lldb/include/lldb/Target/Process.h @@ -1392,6 +1392,22 @@ 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 difference 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 difference (only Arm Thumb at this time). + lldb::addr_t FixAnyAddress(lldb::addr_t pc); + /// Get the Modification ID of the process. /// /// \return
Index: lldb/source/Target/Process.cpp =================================================================== --- lldb/source/Target/Process.cpp +++ lldb/source/Target/Process.cpp @@ -5688,6 +5688,24 @@ 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__); Index: lldb/include/lldb/Target/Process.h =================================================================== --- lldb/include/lldb/Target/Process.h +++ lldb/include/lldb/Target/Process.h @@ -1392,6 +1392,22 @@ 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 difference 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 difference (only Arm Thumb at this time). + lldb::addr_t FixAnyAddress(lldb::addr_t pc); + /// Get the Modification ID of the process. /// /// \return
_______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits