https://github.com/satyajanga updated https://github.com/llvm/llvm-project/pull/214088
>From b021cffcaf76f4d1440279342117cde0e32d888b Mon Sep 17 00:00:00 2001 From: satya janga <[email protected]> Date: Tue, 4 Aug 2026 12:15:29 -0700 Subject: [PATCH 1/2] [lldb] Add AddressSpaceInfo and ProcessAddress utility classes Add the two value types used by the upcoming generic address space support. Nothing uses them yet; adopting them is done separately. AddressSpaceInfo describes a single address space exposed by a process: a name, a numeric id, and whether it is thread specific. It has JSON serialization so it can be carried over the gdb-remote protocol. ProcessAddress pairs an address with an address space id. LLDB_DEFAULT_ADDRESS_SPACE_ID (0) is the default (flat) address space, so a ProcessAddress with no explicit space behaves like a plain lldb::addr_t. The constructor from lldb::addr_t is implicit so that existing call sites keep working when the read memory APIs adopt it. --- lldb/include/lldb/Utility/AddressSpace.h | 34 +++++++++++++ lldb/include/lldb/Utility/ProcessAddress.h | 51 +++++++++++++++++++ lldb/include/lldb/lldb-defines.h | 2 + lldb/include/lldb/lldb-forward.h | 1 + lldb/source/Utility/AddressSpace.cpp | 28 +++++++++++ lldb/source/Utility/CMakeLists.txt | 1 + lldb/unittests/Utility/AddressSpaceTest.cpp | 56 +++++++++++++++++++++ lldb/unittests/Utility/CMakeLists.txt | 1 + 8 files changed, 174 insertions(+) create mode 100644 lldb/include/lldb/Utility/AddressSpace.h create mode 100644 lldb/include/lldb/Utility/ProcessAddress.h create mode 100644 lldb/source/Utility/AddressSpace.cpp create mode 100644 lldb/unittests/Utility/AddressSpaceTest.cpp diff --git a/lldb/include/lldb/Utility/AddressSpace.h b/lldb/include/lldb/Utility/AddressSpace.h new file mode 100644 index 0000000000000..ce5119f573d8d --- /dev/null +++ b/lldb/include/lldb/Utility/AddressSpace.h @@ -0,0 +1,34 @@ +//===-- AddressSpace.h ----------------------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#ifndef LLDB_UTILITY_ADDRESSSPACE_H +#define LLDB_UTILITY_ADDRESSSPACE_H + +#include "lldb/lldb-types.h" +#include "llvm/Support/JSON.h" +#include <string> +#include <vector> + +namespace lldb_private { + +/// A single address space reported by a process (see the "jAddressSpacesInfo" +/// packet in docs/resources/lldbgdbremote.md). +struct AddressSpaceInfo { + std::string name; + uint64_t space_id = 0; + bool is_thread_specific = false; +}; + +bool fromJSON(const llvm::json::Value &value, AddressSpaceInfo &data, + llvm::json::Path path); + +llvm::json::Value toJSON(const AddressSpaceInfo &data); + +} // namespace lldb_private + +#endif // LLDB_UTILITY_ADDRESSSPACE_H diff --git a/lldb/include/lldb/Utility/ProcessAddress.h b/lldb/include/lldb/Utility/ProcessAddress.h new file mode 100644 index 0000000000000..97ae53d4e3580 --- /dev/null +++ b/lldb/include/lldb/Utility/ProcessAddress.h @@ -0,0 +1,51 @@ +//===-- ProcessAddress.h --------------------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#ifndef LLDB_UTILITY_PROCESSADDRESS_H +#define LLDB_UTILITY_PROCESSADDRESS_H + +#include "lldb/lldb-defines.h" +#include "lldb/lldb-types.h" +#include <optional> + +namespace lldb_private { + +/// An address in a process, qualified by an address space. +/// +/// The address space is a numeric id reported by the process (see +/// Process::GetAddressSpaces). LLDB_DEFAULT_ADDRESS_SPACE_ID is the default +/// (flat) address space, so a ProcessAddress with no space behaves like a plain +/// lldb::addr_t. +class ProcessAddress { + lldb::addr_t m_value; + uint64_t m_addr_space = LLDB_DEFAULT_ADDRESS_SPACE_ID; + /// If this has a value, then this is a thread specific address. + std::optional<lldb::tid_t> m_tid; + +public: + /// Implicit so existing lldb::addr_t call sites keep working. + ProcessAddress(lldb::addr_t load_addr) : m_value(load_addr) {} + + ProcessAddress(lldb::addr_t addr, uint64_t addr_space, + std::optional<lldb::tid_t> tid = std::nullopt) + : m_value(addr), m_addr_space(addr_space), m_tid(tid) {} + + bool IsInDefaultAddressSpace() const { + return m_addr_space == LLDB_DEFAULT_ADDRESS_SPACE_ID; + } + + lldb::addr_t GetValue() const { return m_value; } + + uint64_t GetAddressSpace() const { return m_addr_space; } + + std::optional<lldb::tid_t> GetThreadID() const { return m_tid; } +}; + +} // namespace lldb_private + +#endif // LLDB_UTILITY_PROCESSADDRESS_H diff --git a/lldb/include/lldb/lldb-defines.h b/lldb/include/lldb/lldb-defines.h index e3f88c4681a53..347b5dfb3434d 100644 --- a/lldb/include/lldb/lldb-defines.h +++ b/lldb/include/lldb/lldb-defines.h @@ -80,6 +80,8 @@ /// Invalid value definitions #define LLDB_INVALID_STOP_ID 0 #define LLDB_INVALID_ADDRESS UINT64_MAX +#define LLDB_DEFAULT_ADDRESS_SPACE_ID 0 +#define LLDB_INVALID_ADDRESS_SPACE_ID UINT64_MAX #define LLDB_INVALID_INDEX32 UINT32_MAX #define LLDB_INVALID_INDEX64 UINT64_MAX #define LLDB_INVALID_IVAR_OFFSET UINT32_MAX diff --git a/lldb/include/lldb/lldb-forward.h b/lldb/include/lldb/lldb-forward.h index 47362915d6a56..f691b5a3a76e9 100644 --- a/lldb/include/lldb/lldb-forward.h +++ b/lldb/include/lldb/lldb-forward.h @@ -22,6 +22,7 @@ class AddressRange; class AddressRanges; class AddressRangeList; class AddressResolver; +class ProcessAddress; class ArchSpec; class Architecture; class Args; diff --git a/lldb/source/Utility/AddressSpace.cpp b/lldb/source/Utility/AddressSpace.cpp new file mode 100644 index 0000000000000..b6fc9335e8113 --- /dev/null +++ b/lldb/source/Utility/AddressSpace.cpp @@ -0,0 +1,28 @@ +//===-- AddressSpace.cpp --------------------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#include "lldb/Utility/AddressSpace.h" + +using namespace llvm; +using namespace llvm::json; + +namespace lldb_private { + +bool fromJSON(const json::Value &value, AddressSpaceInfo &data, Path path) { + ObjectMapper o(value, path); + return o && o.map("name", data.name) && o.map("space_id", data.space_id) && + o.map("is_thread_specific", data.is_thread_specific); +} + +json::Value toJSON(const AddressSpaceInfo &data) { + return json::Value(Object{{"name", data.name}, + {"space_id", data.space_id}, + {"is_thread_specific", data.is_thread_specific}}); +} + +} // namespace lldb_private diff --git a/lldb/source/Utility/CMakeLists.txt b/lldb/source/Utility/CMakeLists.txt index 8efcbe47dd19b..75749d60c4d0f 100644 --- a/lldb/source/Utility/CMakeLists.txt +++ b/lldb/source/Utility/CMakeLists.txt @@ -25,6 +25,7 @@ endif() add_lldb_library(lldbUtility NO_INTERNAL_DEPENDENCIES AddressableBits.cpp + AddressSpace.cpp ArchSpec.cpp Args.cpp Baton.cpp diff --git a/lldb/unittests/Utility/AddressSpaceTest.cpp b/lldb/unittests/Utility/AddressSpaceTest.cpp new file mode 100644 index 0000000000000..5a5ccfd1b5b81 --- /dev/null +++ b/lldb/unittests/Utility/AddressSpaceTest.cpp @@ -0,0 +1,56 @@ +//===-- AddressSpaceTest.cpp ----------------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#include "lldb/Utility/AddressSpace.h" +#include "llvm/Support/JSON.h" +#include "llvm/Testing/Support/Error.h" +#include "gtest/gtest.h" + +using namespace lldb_private; + +static std::string ToString(const llvm::json::Value &value) { + return llvm::formatv("{0}", value).str(); +} + +TEST(AddressSpaceTest, RoundTrip) { + AddressSpaceInfo info{"local", 2, /*is_thread_specific=*/true}; + llvm::Expected<AddressSpaceInfo> parsed = llvm::json::parse<AddressSpaceInfo>( + ToString(toJSON(info)), "AddressSpaceInfo"); + ASSERT_THAT_EXPECTED(parsed, llvm::Succeeded()); + EXPECT_EQ(parsed->name, "local"); + EXPECT_EQ(parsed->space_id, 2u); + EXPECT_TRUE(parsed->is_thread_specific); +} + +TEST(AddressSpaceTest, ArrayRoundTrip) { + std::vector<AddressSpaceInfo> spaces = { + {"global", 1, false}, + {"local", 2, true}, + {"private", 3, false}, + }; + llvm::json::Array array; + for (const AddressSpaceInfo &space : spaces) + array.push_back(toJSON(space)); + + llvm::Expected<std::vector<AddressSpaceInfo>> parsed = + llvm::json::parse<std::vector<AddressSpaceInfo>>( + ToString(llvm::json::Value(std::move(array))), "AddressSpaceInfo"); + ASSERT_THAT_EXPECTED(parsed, llvm::Succeeded()); + ASSERT_EQ(parsed->size(), 3u); + EXPECT_EQ((*parsed)[1].name, "local"); + EXPECT_EQ((*parsed)[1].space_id, 2u); + EXPECT_TRUE((*parsed)[1].is_thread_specific); + EXPECT_FALSE((*parsed)[0].is_thread_specific); +} + +TEST(AddressSpaceTest, MissingFieldFails) { + // "space_id" is required. + llvm::Expected<AddressSpaceInfo> parsed = llvm::json::parse<AddressSpaceInfo>( + R"({"name":"global"})", "AddressSpaceInfo"); + EXPECT_THAT_EXPECTED(parsed, llvm::Failed()); +} diff --git a/lldb/unittests/Utility/CMakeLists.txt b/lldb/unittests/Utility/CMakeLists.txt index ed159748838b5..e46a1774f020d 100644 --- a/lldb/unittests/Utility/CMakeLists.txt +++ b/lldb/unittests/Utility/CMakeLists.txt @@ -1,5 +1,6 @@ add_lldb_unittest(UtilityTests AcceleratorGDBRemotePacketsTest.cpp + AddressSpaceTest.cpp AnsiTerminalTest.cpp ArgsTest.cpp OptionsWithRawTest.cpp >From 15b3ee17dae5404779d8157868f6c40d97e7d2c5 Mon Sep 17 00:00:00 2001 From: satya janga <[email protected]> Date: Tue, 4 Aug 2026 12:21:36 -0700 Subject: [PATCH 2/2] [lldb] Adopt ProcessAddress in the read memory APIs (NFC) Mechanical change: switch the read memory entry points from lldb::addr_t to const ProcessAddress &, and update every override. Process::ReadMemory / Process::DoReadMemory NativeProcessProtocol::ReadMemory / ReadMemoryWithoutTrap ProcessAddress is implicitly constructible from lldb::addr_t, so callers are unchanged; only the virtual signatures and their overrides needed updating. Each override extracts the address with GetValue() and keeps its existing body, so behavior is identical. No address space is ever non-default after this change. --- .../lldb/Host/common/NativeProcessProtocol.h | 7 ++++--- lldb/include/lldb/Target/Process.h | 9 +++++---- lldb/include/lldb/Target/ProcessTrace.h | 4 ++-- .../Host/common/NativeProcessProtocol.cpp | 10 ++++++---- .../Plugins/Process/AIX/NativeProcessAIX.cpp | 5 ++++- .../Plugins/Process/AIX/NativeProcessAIX.h | 2 +- .../ProcessFreeBSDKernelCore.cpp | 6 ++++-- .../ProcessFreeBSDKernelCore.h | 4 ++-- .../Process/FreeBSD/NativeProcessFreeBSD.cpp | 6 ++++-- .../Process/FreeBSD/NativeProcessFreeBSD.h | 2 +- .../Process/Linux/NativeProcessLinux.cpp | 4 +++- .../Plugins/Process/Linux/NativeProcessLinux.h | 2 +- .../Process/MacOSX-Kernel/ProcessKDP.cpp | 5 +++-- .../Plugins/Process/MacOSX-Kernel/ProcessKDP.h | 4 ++-- .../Process/NetBSD/NativeProcessNetBSD.cpp | 6 ++++-- .../Process/NetBSD/NativeProcessNetBSD.h | 2 +- .../Windows/Common/NativeProcessWindows.cpp | 6 ++++-- .../Windows/Common/NativeProcessWindows.h | 2 +- .../Process/Windows/Common/ProcessWindows.cpp | 5 +++-- .../Process/Windows/Common/ProcessWindows.h | 2 +- .../Plugins/Process/elf-core/ProcessElfCore.cpp | 10 ++++++---- .../Plugins/Process/elf-core/ProcessElfCore.h | 8 ++++---- .../Process/gdb-remote/ProcessGDBRemote.cpp | 5 +++-- .../Process/gdb-remote/ProcessGDBRemote.h | 4 ++-- .../Process/mach-core/ProcessMachCore.cpp | 10 ++++++---- .../Plugins/Process/mach-core/ProcessMachCore.h | 8 ++++---- .../Process/minidump/ProcessMinidump.cpp | 10 ++++++---- .../Plugins/Process/minidump/ProcessMinidump.h | 4 ++-- .../Process/scripted/ScriptedProcess.cpp | 5 +++-- .../Plugins/Process/scripted/ScriptedProcess.h | 2 +- .../source/Plugins/Process/wasm/ProcessWasm.cpp | 5 +++-- lldb/source/Plugins/Process/wasm/ProcessWasm.h | 2 +- lldb/source/Target/Process.cpp | 4 +++- lldb/source/Target/ProcessTrace.cpp | 10 ++++++---- .../Accelerator/Mock/ProcessMockAccelerator.cpp | 7 +++++-- .../Accelerator/Mock/ProcessMockAccelerator.h | 2 +- .../DataFormatter/FormatterSectionTest.cpp | 4 ++-- .../Expression/DWARFExpressionTest.cpp | 9 +++++---- lldb/unittests/Expression/IRMemoryMapTest.cpp | 4 ++-- lldb/unittests/Process/ProcessEventDataTest.cpp | 4 ++-- .../Process/elf-core/ThreadElfCoreTest.cpp | 4 ++-- lldb/unittests/Target/ExecutionContextTest.cpp | 4 ++-- .../Target/LocateModuleCallbackTest.cpp | 4 ++-- lldb/unittests/Target/MemoryTest.cpp | 17 ++++++++++------- .../Host/NativeProcessTestUtils.h | 3 ++- lldb/unittests/Thread/ThreadTest.cpp | 4 ++-- .../ValueObject/DumpValueObjectOptionsTests.cpp | 4 ++-- .../DynamicValueObjectLocalBuffer.cpp | 4 ++-- 48 files changed, 147 insertions(+), 107 deletions(-) diff --git a/lldb/include/lldb/Host/common/NativeProcessProtocol.h b/lldb/include/lldb/Host/common/NativeProcessProtocol.h index 435185a38f3f9..67206c4b55b79 100644 --- a/lldb/include/lldb/Host/common/NativeProcessProtocol.h +++ b/lldb/include/lldb/Host/common/NativeProcessProtocol.h @@ -16,6 +16,7 @@ #include "lldb/Host/MainLoop.h" #include "lldb/Utility/ArchSpec.h" #include "lldb/Utility/Iterable.h" +#include "lldb/Utility/ProcessAddress.h" #include "lldb/Utility/Status.h" #include "lldb/Utility/TraceGDBRemotePackets.h" #include "lldb/Utility/UnimplementedError.h" @@ -96,11 +97,11 @@ class NativeProcessProtocol { virtual Status GetMemoryRegionInfo(lldb::addr_t load_addr, MemoryRegionInfo &range_info); - virtual Status ReadMemory(lldb::addr_t addr, void *buf, size_t size, + virtual Status ReadMemory(const ProcessAddress &addr, void *buf, size_t size, size_t &bytes_read) = 0; - Status ReadMemoryWithoutTrap(lldb::addr_t addr, void *buf, size_t size, - size_t &bytes_read); + Status ReadMemoryWithoutTrap(const ProcessAddress &addr, void *buf, + size_t size, size_t &bytes_read); virtual Status ReadMemoryTags(int32_t type, lldb::addr_t addr, size_t len, std::vector<uint8_t> &tags); diff --git a/lldb/include/lldb/Target/Process.h b/lldb/include/lldb/Target/Process.h index 9162158a277d9..f4902ceed1b8a 100644 --- a/lldb/include/lldb/Target/Process.h +++ b/lldb/include/lldb/Target/Process.h @@ -54,6 +54,7 @@ #include "lldb/Utility/Listener.h" #include "lldb/Utility/NameMatches.h" #include "lldb/Utility/Policy.h" +#include "lldb/Utility/ProcessAddress.h" #include "lldb/Utility/ProcessInfo.h" #include "lldb/Utility/Status.h" #include "lldb/Utility/StructuredData.h" @@ -1629,8 +1630,8 @@ class Process : public std::enable_shared_from_this<Process>, /// size, then this function will get called again with \a /// vm_addr, \a buf, and \a size updated appropriately. Zero is /// returned in the case of an error. - virtual size_t ReadMemory(lldb::addr_t vm_addr, void *buf, size_t size, - Status &error); + virtual size_t ReadMemory(const ProcessAddress &process_addr, void *buf, + size_t size, Status &error); /// Read from multiple memory ranges and write the results into buffer. /// @@ -3051,8 +3052,8 @@ void PruneThreadPlans(); /// \return /// The number of bytes that were actually read into \a buf. /// Zero is returned in the case of an error. - virtual size_t DoReadMemory(lldb::addr_t vm_addr, void *buf, size_t size, - Status &error) = 0; + virtual size_t DoReadMemory(const ProcessAddress &process_addr, void *buf, + size_t size, Status &error) = 0; /// Reads each range individually via ReadMemoryFromInferior, bypassing the /// memory cache. Subclasses may override it to batch the reads more diff --git a/lldb/include/lldb/Target/ProcessTrace.h b/lldb/include/lldb/Target/ProcessTrace.h index 50237c2af9189..2c7df58137330 100644 --- a/lldb/include/lldb/Target/ProcessTrace.h +++ b/lldb/include/lldb/Target/ProcessTrace.h @@ -54,10 +54,10 @@ class ProcessTrace : public PostMortemProcess { bool WarnBeforeDetach() const override { return false; } - size_t ReadMemory(lldb::addr_t addr, void *buf, size_t size, + size_t ReadMemory(const ProcessAddress &addr, void *buf, size_t size, Status &error) override; - size_t DoReadMemory(lldb::addr_t addr, void *buf, size_t size, + size_t DoReadMemory(const ProcessAddress &addr, void *buf, size_t size, Status &error) override; ArchSpec GetArchitecture(); diff --git a/lldb/source/Host/common/NativeProcessProtocol.cpp b/lldb/source/Host/common/NativeProcessProtocol.cpp index dbffdc619ef42..8c5991e93aab3 100644 --- a/lldb/source/Host/common/NativeProcessProtocol.cpp +++ b/lldb/source/Host/common/NativeProcessProtocol.cpp @@ -649,13 +649,15 @@ Status NativeProcessProtocol::RemoveBreakpoint(lldb::addr_t addr, return RemoveSoftwareBreakpoint(addr); } -Status NativeProcessProtocol::ReadMemoryWithoutTrap(lldb::addr_t addr, - void *buf, size_t size, - size_t &bytes_read) { - Status error = ReadMemory(addr, buf, size, bytes_read); +Status +NativeProcessProtocol::ReadMemoryWithoutTrap(const ProcessAddress &process_addr, + void *buf, size_t size, + size_t &bytes_read) { + Status error = ReadMemory(process_addr, buf, size, bytes_read); if (error.Fail()) return error; + lldb::addr_t addr = process_addr.GetValue(); llvm::MutableArrayRef data(static_cast<uint8_t *>(buf), bytes_read); for (const auto &pair : m_software_breakpoints) { lldb::addr_t bp_addr = pair.first; diff --git a/lldb/source/Plugins/Process/AIX/NativeProcessAIX.cpp b/lldb/source/Plugins/Process/AIX/NativeProcessAIX.cpp index 9c7e66cb79028..21c5920ecee28 100644 --- a/lldb/source/Plugins/Process/AIX/NativeProcessAIX.cpp +++ b/lldb/source/Plugins/Process/AIX/NativeProcessAIX.cpp @@ -238,8 +238,11 @@ Status NativeProcessAIX::Kill() { return error; } -Status NativeProcessAIX::ReadMemory(lldb::addr_t addr, void *buf, size_t size, +Status NativeProcessAIX::ReadMemory(const ProcessAddress &process_addr, + void *buf, size_t size, size_t &bytes_read) { + lldb::addr_t addr = process_addr.GetValue(); + (void)addr; return Status("unsupported"); } diff --git a/lldb/source/Plugins/Process/AIX/NativeProcessAIX.h b/lldb/source/Plugins/Process/AIX/NativeProcessAIX.h index bc44f2b02af98..068b428e1c8a9 100644 --- a/lldb/source/Plugins/Process/AIX/NativeProcessAIX.h +++ b/lldb/source/Plugins/Process/AIX/NativeProcessAIX.h @@ -77,7 +77,7 @@ class NativeProcessAIX : public NativeProcessProtocol { lldb::addr_t GetSharedLibraryInfoAddress() override; - Status ReadMemory(lldb::addr_t addr, void *buf, size_t size, + Status ReadMemory(const ProcessAddress &addr, void *buf, size_t size, size_t &bytes_read) override; Status WriteMemory(lldb::addr_t addr, const void *buf, size_t size, diff --git a/lldb/source/Plugins/Process/FreeBSD-Kernel-Core/ProcessFreeBSDKernelCore.cpp b/lldb/source/Plugins/Process/FreeBSD-Kernel-Core/ProcessFreeBSDKernelCore.cpp index 3ec46ea7fdf25..208069d7f9ff3 100644 --- a/lldb/source/Plugins/Process/FreeBSD-Kernel-Core/ProcessFreeBSDKernelCore.cpp +++ b/lldb/source/Plugins/Process/FreeBSD-Kernel-Core/ProcessFreeBSDKernelCore.cpp @@ -505,8 +505,10 @@ bool ProcessFreeBSDKernelCore::DoUpdateThreadList(ThreadList &old_thread_list, return new_thread_list.GetSize(false) > 0; } -size_t ProcessFreeBSDKernelCore::DoReadMemory(lldb::addr_t addr, void *buf, - size_t size, Status &error) { +size_t +ProcessFreeBSDKernelCore::DoReadMemory(const ProcessAddress &process_addr, + void *buf, size_t size, Status &error) { + lldb::addr_t addr = process_addr.GetValue(); ssize_t rd = 0; rd = kvm_read2(m_kvm, addr, buf, size); if (rd < 0 || static_cast<size_t>(rd) != size) { diff --git a/lldb/source/Plugins/Process/FreeBSD-Kernel-Core/ProcessFreeBSDKernelCore.h b/lldb/source/Plugins/Process/FreeBSD-Kernel-Core/ProcessFreeBSDKernelCore.h index c8355b3f5b56f..477ae77791e51 100644 --- a/lldb/source/Plugins/Process/FreeBSD-Kernel-Core/ProcessFreeBSDKernelCore.h +++ b/lldb/source/Plugins/Process/FreeBSD-Kernel-Core/ProcessFreeBSDKernelCore.h @@ -62,8 +62,8 @@ class ProcessFreeBSDKernelCore : public lldb_private::PostMortemProcess { bool DoUpdateThreadList(lldb_private::ThreadList &old_thread_list, lldb_private::ThreadList &new_thread_list) override; - size_t DoReadMemory(lldb::addr_t addr, void *buf, size_t size, - lldb_private::Status &error) override; + size_t DoReadMemory(const lldb_private::ProcessAddress &addr, void *buf, + size_t size, lldb_private::Status &error) override; lldb::addr_t FindSymbol(const char *name); diff --git a/lldb/source/Plugins/Process/FreeBSD/NativeProcessFreeBSD.cpp b/lldb/source/Plugins/Process/FreeBSD/NativeProcessFreeBSD.cpp index 4853ab2827d9e..39ce514ac3c26 100644 --- a/lldb/source/Plugins/Process/FreeBSD/NativeProcessFreeBSD.cpp +++ b/lldb/source/Plugins/Process/FreeBSD/NativeProcessFreeBSD.cpp @@ -871,8 +871,10 @@ Status NativeProcessFreeBSD::Attach() { return Status(); } -Status NativeProcessFreeBSD::ReadMemory(lldb::addr_t addr, void *buf, - size_t size, size_t &bytes_read) { +Status NativeProcessFreeBSD::ReadMemory(const ProcessAddress &process_addr, + void *buf, size_t size, + size_t &bytes_read) { + lldb::addr_t addr = process_addr.GetValue(); unsigned char *dst = static_cast<unsigned char *>(buf); struct ptrace_io_desc io; diff --git a/lldb/source/Plugins/Process/FreeBSD/NativeProcessFreeBSD.h b/lldb/source/Plugins/Process/FreeBSD/NativeProcessFreeBSD.h index 7e8bdc527f420..aecb7ab74d0f3 100644 --- a/lldb/source/Plugins/Process/FreeBSD/NativeProcessFreeBSD.h +++ b/lldb/source/Plugins/Process/FreeBSD/NativeProcessFreeBSD.h @@ -59,7 +59,7 @@ class NativeProcessFreeBSD : public NativeProcessELF { Status GetMemoryRegionInfo(lldb::addr_t load_addr, MemoryRegionInfo &range_info) override; - Status ReadMemory(lldb::addr_t addr, void *buf, size_t size, + Status ReadMemory(const ProcessAddress &addr, void *buf, size_t size, size_t &bytes_read) override; Status WriteMemory(lldb::addr_t addr, const void *buf, size_t size, diff --git a/lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp b/lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp index 80f1b5662ba61..0f793d1c3fa5c 100644 --- a/lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp +++ b/lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp @@ -1614,8 +1614,10 @@ NativeProcessLinux::GetSoftwareBreakpointTrapOpcode(size_t size_hint) { } } -Status NativeProcessLinux::ReadMemory(lldb::addr_t addr, void *buf, size_t size, +Status NativeProcessLinux::ReadMemory(const ProcessAddress &process_addr, + void *buf, size_t size, size_t &bytes_read) { + lldb::addr_t addr = process_addr.GetValue(); Log *log = GetLog(POSIXLog::Memory); LLDB_LOG(log, "addr = {0}, buf = {1}, size = {2}", addr, buf, size); diff --git a/lldb/source/Plugins/Process/Linux/NativeProcessLinux.h b/lldb/source/Plugins/Process/Linux/NativeProcessLinux.h index 936d690e42ae7..b45e5ff1546ef 100644 --- a/lldb/source/Plugins/Process/Linux/NativeProcessLinux.h +++ b/lldb/source/Plugins/Process/Linux/NativeProcessLinux.h @@ -96,7 +96,7 @@ class NativeProcessLinux : public NativeProcessELF, Status GetMemoryRegionInfo(lldb::addr_t load_addr, MemoryRegionInfo &range_info) override; - Status ReadMemory(lldb::addr_t addr, void *buf, size_t size, + Status ReadMemory(const ProcessAddress &addr, void *buf, size_t size, size_t &bytes_read) override; Status WriteMemory(lldb::addr_t addr, const void *buf, size_t size, diff --git a/lldb/source/Plugins/Process/MacOSX-Kernel/ProcessKDP.cpp b/lldb/source/Plugins/Process/MacOSX-Kernel/ProcessKDP.cpp index 6166096a4e1d3..9a8f92979f370 100644 --- a/lldb/source/Plugins/Process/MacOSX-Kernel/ProcessKDP.cpp +++ b/lldb/source/Plugins/Process/MacOSX-Kernel/ProcessKDP.cpp @@ -577,8 +577,9 @@ bool ProcessKDP::IsAlive() { } // Process Memory -size_t ProcessKDP::DoReadMemory(addr_t addr, void *buf, size_t size, - Status &error) { +size_t ProcessKDP::DoReadMemory(const ProcessAddress &process_addr, void *buf, + size_t size, Status &error) { + lldb::addr_t addr = process_addr.GetValue(); uint8_t *data_buffer = (uint8_t *)buf; if (m_comm.IsConnected()) { const size_t max_read_size = 512; diff --git a/lldb/source/Plugins/Process/MacOSX-Kernel/ProcessKDP.h b/lldb/source/Plugins/Process/MacOSX-Kernel/ProcessKDP.h index 1b71d83f70b08..7b790b06a9cb9 100644 --- a/lldb/source/Plugins/Process/MacOSX-Kernel/ProcessKDP.h +++ b/lldb/source/Plugins/Process/MacOSX-Kernel/ProcessKDP.h @@ -106,8 +106,8 @@ class ProcessKDP : public lldb_private::Process { bool IsAlive() override; // Process Memory - size_t DoReadMemory(lldb::addr_t addr, void *buf, size_t size, - lldb_private::Status &error) override; + size_t DoReadMemory(const lldb_private::ProcessAddress &addr, void *buf, + size_t size, lldb_private::Status &error) override; size_t DoWriteMemory(lldb::addr_t addr, const void *buf, size_t size, lldb_private::Status &error) override; diff --git a/lldb/source/Plugins/Process/NetBSD/NativeProcessNetBSD.cpp b/lldb/source/Plugins/Process/NetBSD/NativeProcessNetBSD.cpp index 3fd14c4c43071..8224345b67394 100644 --- a/lldb/source/Plugins/Process/NetBSD/NativeProcessNetBSD.cpp +++ b/lldb/source/Plugins/Process/NetBSD/NativeProcessNetBSD.cpp @@ -899,8 +899,10 @@ Status NativeProcessNetBSD::Attach() { return Status(); } -Status NativeProcessNetBSD::ReadMemory(lldb::addr_t addr, void *buf, - size_t size, size_t &bytes_read) { +Status NativeProcessNetBSD::ReadMemory(const ProcessAddress &process_addr, + void *buf, size_t size, + size_t &bytes_read) { + lldb::addr_t addr = process_addr.GetValue(); unsigned char *dst = static_cast<unsigned char *>(buf); struct ptrace_io_desc io; diff --git a/lldb/source/Plugins/Process/NetBSD/NativeProcessNetBSD.h b/lldb/source/Plugins/Process/NetBSD/NativeProcessNetBSD.h index 976d48e74854e..599943290c163 100644 --- a/lldb/source/Plugins/Process/NetBSD/NativeProcessNetBSD.h +++ b/lldb/source/Plugins/Process/NetBSD/NativeProcessNetBSD.h @@ -57,7 +57,7 @@ class NativeProcessNetBSD : public NativeProcessELF { Status GetMemoryRegionInfo(lldb::addr_t load_addr, MemoryRegionInfo &range_info) override; - Status ReadMemory(lldb::addr_t addr, void *buf, size_t size, + Status ReadMemory(const ProcessAddress &addr, void *buf, size_t size, size_t &bytes_read) override; Status WriteMemory(lldb::addr_t addr, const void *buf, size_t size, diff --git a/lldb/source/Plugins/Process/Windows/Common/NativeProcessWindows.cpp b/lldb/source/Plugins/Process/Windows/Common/NativeProcessWindows.cpp index f87fd23f5a047..081143fd32a2f 100644 --- a/lldb/source/Plugins/Process/Windows/Common/NativeProcessWindows.cpp +++ b/lldb/source/Plugins/Process/Windows/Common/NativeProcessWindows.cpp @@ -232,8 +232,10 @@ Status NativeProcessWindows::GetMemoryRegionInfo(lldb::addr_t load_addr, return ProcessDebugger::GetMemoryRegionInfo(load_addr, range_info); } -Status NativeProcessWindows::ReadMemory(lldb::addr_t addr, void *buf, - size_t size, size_t &bytes_read) { +Status NativeProcessWindows::ReadMemory(const ProcessAddress &process_addr, + void *buf, size_t size, + size_t &bytes_read) { + lldb::addr_t addr = process_addr.GetValue(); return ProcessDebugger::ReadMemory(addr, buf, size, bytes_read); } diff --git a/lldb/source/Plugins/Process/Windows/Common/NativeProcessWindows.h b/lldb/source/Plugins/Process/Windows/Common/NativeProcessWindows.h index 17469f18fbc73..7801d6febd28a 100644 --- a/lldb/source/Plugins/Process/Windows/Common/NativeProcessWindows.h +++ b/lldb/source/Plugins/Process/Windows/Common/NativeProcessWindows.h @@ -68,7 +68,7 @@ class NativeProcessWindows : public NativeProcessProtocol, Status GetMemoryRegionInfo(lldb::addr_t load_addr, MemoryRegionInfo &range_info) override; - Status ReadMemory(lldb::addr_t addr, void *buf, size_t size, + Status ReadMemory(const ProcessAddress &addr, void *buf, size_t size, size_t &bytes_read) override; Status WriteMemory(lldb::addr_t addr, const void *buf, size_t size, diff --git a/lldb/source/Plugins/Process/Windows/Common/ProcessWindows.cpp b/lldb/source/Plugins/Process/Windows/Common/ProcessWindows.cpp index 561710ccec3c8..0b29b898cd342 100644 --- a/lldb/source/Plugins/Process/Windows/Common/ProcessWindows.cpp +++ b/lldb/source/Plugins/Process/Windows/Common/ProcessWindows.cpp @@ -547,8 +547,9 @@ ArchSpec ProcessWindows::GetSystemArchitecture() { return HostInfo::GetArchitecture(); } -size_t ProcessWindows::DoReadMemory(lldb::addr_t vm_addr, void *buf, - size_t size, Status &error) { +size_t ProcessWindows::DoReadMemory(const ProcessAddress &process_addr, + void *buf, size_t size, Status &error) { + lldb::addr_t vm_addr = process_addr.GetValue(); size_t bytes_read = 0; error = ProcessDebugger::ReadMemory(vm_addr, buf, size, bytes_read); return bytes_read; diff --git a/lldb/source/Plugins/Process/Windows/Common/ProcessWindows.h b/lldb/source/Plugins/Process/Windows/Common/ProcessWindows.h index 2d2f3ca59ac70..73fd92f11cdff 100644 --- a/lldb/source/Plugins/Process/Windows/Common/ProcessWindows.h +++ b/lldb/source/Plugins/Process/Windows/Common/ProcessWindows.h @@ -69,7 +69,7 @@ class ProcessWindows : public Process, public ProcessDebugger { ArchSpec GetSystemArchitecture() override; - size_t DoReadMemory(lldb::addr_t vm_addr, void *buf, size_t size, + size_t DoReadMemory(const ProcessAddress &vm_addr, void *buf, size_t size, Status &error) override; size_t DoWriteMemory(lldb::addr_t vm_addr, const void *buf, size_t size, Status &error) override; diff --git a/lldb/source/Plugins/Process/elf-core/ProcessElfCore.cpp b/lldb/source/Plugins/Process/elf-core/ProcessElfCore.cpp index 4cc760de54a5c..a36461bad1b1f 100644 --- a/lldb/source/Plugins/Process/elf-core/ProcessElfCore.cpp +++ b/lldb/source/Plugins/Process/elf-core/ProcessElfCore.cpp @@ -453,8 +453,9 @@ Status ProcessElfCore::DoDestroy() { return Status(); } bool ProcessElfCore::IsAlive() { return true; } // Process Memory -size_t ProcessElfCore::ReadMemory(lldb::addr_t addr, void *buf, size_t size, - Status &error) { +size_t ProcessElfCore::ReadMemory(const ProcessAddress &process_addr, void *buf, + size_t size, Status &error) { + lldb::addr_t addr = process_addr.GetValue(); if (lldb::ABISP abi_sp = GetABI()) addr = abi_sp->FixAnyAddress(addr); @@ -514,8 +515,9 @@ Status ProcessElfCore::DoGetMemoryRegionInfo(lldb::addr_t load_addr, return Status(); } -size_t ProcessElfCore::DoReadMemory(lldb::addr_t addr, void *buf, size_t size, - Status &error) { +size_t ProcessElfCore::DoReadMemory(const ProcessAddress &process_addr, + void *buf, size_t size, Status &error) { + lldb::addr_t addr = process_addr.GetValue(); ObjectFile *core_objfile = m_core_module_sp->GetObjectFile(); if (core_objfile == nullptr) diff --git a/lldb/source/Plugins/Process/elf-core/ProcessElfCore.h b/lldb/source/Plugins/Process/elf-core/ProcessElfCore.h index 846d8cb91cadf..cfb0a772bfed7 100644 --- a/lldb/source/Plugins/Process/elf-core/ProcessElfCore.h +++ b/lldb/source/Plugins/Process/elf-core/ProcessElfCore.h @@ -79,11 +79,11 @@ class ProcessElfCore : public lldb_private::PostMortemProcess { bool WarnBeforeDetach() const override { return false; } // Process Memory - size_t ReadMemory(lldb::addr_t addr, void *buf, size_t size, - lldb_private::Status &error) override; + size_t ReadMemory(const lldb_private::ProcessAddress &addr, void *buf, + size_t size, lldb_private::Status &error) override; - size_t DoReadMemory(lldb::addr_t addr, void *buf, size_t size, - lldb_private::Status &error) override; + size_t DoReadMemory(const lldb_private::ProcessAddress &addr, void *buf, + size_t size, lldb_private::Status &error) override; // We do not implement DoReadMemoryTags. Instead all the work is done in // ReadMemoryTags which avoids having to unpack and repack tags. diff --git a/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp b/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp index 724e7f2e71bd8..6700d85d6f5c6 100644 --- a/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp +++ b/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp @@ -2902,10 +2902,11 @@ void ProcessGDBRemote::WillPublicStop() { } // Process Memory -size_t ProcessGDBRemote::DoReadMemory(addr_t addr, void *buf, size_t size, - Status &error) { +size_t ProcessGDBRemote::DoReadMemory(const ProcessAddress &process_addr, + void *buf, size_t size, Status &error) { using xPacketState = GDBRemoteCommunicationClient::xPacketState; + lldb::addr_t addr = process_addr.GetValue(); GetMaxMemorySize(); xPacketState x_state = m_gdb_comm.GetxPacketState(); diff --git a/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.h b/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.h index ca75899bc5cbf..85db0fc051979 100644 --- a/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.h +++ b/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.h @@ -137,8 +137,8 @@ class ProcessGDBRemote : public Process, void WillPublicStop() override; // Process Memory - size_t DoReadMemory(lldb::addr_t addr, void *buf, size_t size, - Status &error) override; + size_t DoReadMemory(const ProcessAddress &process_addr, void *buf, + size_t size, Status &error) override; /// Override of DoReadMemoryRanges that uses MultiMemRead to perform this /// operation in a single packet. diff --git a/lldb/source/Plugins/Process/mach-core/ProcessMachCore.cpp b/lldb/source/Plugins/Process/mach-core/ProcessMachCore.cpp index d0b9de0091511..8acdf75028292 100644 --- a/lldb/source/Plugins/Process/mach-core/ProcessMachCore.cpp +++ b/lldb/source/Plugins/Process/mach-core/ProcessMachCore.cpp @@ -712,15 +712,17 @@ bool ProcessMachCore::IsAlive() { return true; } bool ProcessMachCore::WarnBeforeDetach() const { return false; } // Process Memory -size_t ProcessMachCore::ReadMemory(addr_t addr, void *buf, size_t size, - Status &error) { +size_t ProcessMachCore::ReadMemory(const ProcessAddress &process_addr, + void *buf, size_t size, Status &error) { + lldb::addr_t addr = process_addr.GetValue(); // Don't allow the caching that lldb_private::Process::ReadMemory does since // in core files we have it all cached our our core file anyway. return DoReadMemory(FixAnyAddress(addr), buf, size, error); } -size_t ProcessMachCore::DoReadMemory(addr_t addr, void *buf, size_t size, - Status &error) { +size_t ProcessMachCore::DoReadMemory(const ProcessAddress &process_addr, + void *buf, size_t size, Status &error) { + lldb::addr_t addr = process_addr.GetValue(); ObjectFile *core_objfile = m_core_module_sp->GetObjectFile(); size_t bytes_read = 0; diff --git a/lldb/source/Plugins/Process/mach-core/ProcessMachCore.h b/lldb/source/Plugins/Process/mach-core/ProcessMachCore.h index 6ba9f2354edf9..b425168c5c148 100644 --- a/lldb/source/Plugins/Process/mach-core/ProcessMachCore.h +++ b/lldb/source/Plugins/Process/mach-core/ProcessMachCore.h @@ -62,11 +62,11 @@ class ProcessMachCore : public lldb_private::PostMortemProcess { bool WarnBeforeDetach() const override; // Process Memory - size_t ReadMemory(lldb::addr_t addr, void *buf, size_t size, - lldb_private::Status &error) override; + size_t ReadMemory(const lldb_private::ProcessAddress &addr, void *buf, + size_t size, lldb_private::Status &error) override; - size_t DoReadMemory(lldb::addr_t addr, void *buf, size_t size, - lldb_private::Status &error) override; + size_t DoReadMemory(const lldb_private::ProcessAddress &addr, void *buf, + size_t size, lldb_private::Status &error) override; lldb::addr_t GetImageInfoAddress() override; diff --git a/lldb/source/Plugins/Process/minidump/ProcessMinidump.cpp b/lldb/source/Plugins/Process/minidump/ProcessMinidump.cpp index 7b3c090286349..ca448434b81b8 100644 --- a/lldb/source/Plugins/Process/minidump/ProcessMinidump.cpp +++ b/lldb/source/Plugins/Process/minidump/ProcessMinidump.cpp @@ -314,15 +314,17 @@ bool ProcessMinidump::IsAlive() { return true; } bool ProcessMinidump::WarnBeforeDetach() const { return false; } -size_t ProcessMinidump::ReadMemory(lldb::addr_t addr, void *buf, size_t size, - Status &error) { +size_t ProcessMinidump::ReadMemory(const ProcessAddress &process_addr, + void *buf, size_t size, Status &error) { + lldb::addr_t addr = process_addr.GetValue(); // Don't allow the caching that lldb_private::Process::ReadMemory does since // we have it all cached in our dump file anyway. return DoReadMemory(addr, buf, size, error); } -size_t ProcessMinidump::DoReadMemory(lldb::addr_t addr, void *buf, size_t size, - Status &error) { +size_t ProcessMinidump::DoReadMemory(const ProcessAddress &process_addr, + void *buf, size_t size, Status &error) { + lldb::addr_t addr = process_addr.GetValue(); llvm::Expected<llvm::ArrayRef<uint8_t>> mem_maybe = m_minidump_parser->GetMemory(addr, size); diff --git a/lldb/source/Plugins/Process/minidump/ProcessMinidump.h b/lldb/source/Plugins/Process/minidump/ProcessMinidump.h index ad8d0ed7a4832..590af4d0426f7 100644 --- a/lldb/source/Plugins/Process/minidump/ProcessMinidump.h +++ b/lldb/source/Plugins/Process/minidump/ProcessMinidump.h @@ -68,10 +68,10 @@ class ProcessMinidump : public PostMortemProcess { bool WarnBeforeDetach() const override; - size_t ReadMemory(lldb::addr_t addr, void *buf, size_t size, + size_t ReadMemory(const ProcessAddress &addr, void *buf, size_t size, Status &error) override; - size_t DoReadMemory(lldb::addr_t addr, void *buf, size_t size, + size_t DoReadMemory(const ProcessAddress &addr, void *buf, size_t size, Status &error) override; ArchSpec GetArchitecture(); diff --git a/lldb/source/Plugins/Process/scripted/ScriptedProcess.cpp b/lldb/source/Plugins/Process/scripted/ScriptedProcess.cpp index 502c2f1146e7a..e95425e87374e 100644 --- a/lldb/source/Plugins/Process/scripted/ScriptedProcess.cpp +++ b/lldb/source/Plugins/Process/scripted/ScriptedProcess.cpp @@ -240,8 +240,9 @@ Status ScriptedProcess::DoDestroy() { return Status(); } bool ScriptedProcess::IsAlive() { return GetInterface().IsAlive(); } -size_t ScriptedProcess::DoReadMemory(lldb::addr_t addr, void *buf, size_t size, - Status &error) { +size_t ScriptedProcess::DoReadMemory(const ProcessAddress &process_addr, + void *buf, size_t size, Status &error) { + lldb::addr_t addr = process_addr.GetValue(); lldb::DataExtractorSP data_extractor_sp = GetInterface().ReadMemoryAtAddress(addr, size, error); diff --git a/lldb/source/Plugins/Process/scripted/ScriptedProcess.h b/lldb/source/Plugins/Process/scripted/ScriptedProcess.h index 9510f2f06dabd..c3cdf30a9d477 100644 --- a/lldb/source/Plugins/Process/scripted/ScriptedProcess.h +++ b/lldb/source/Plugins/Process/scripted/ScriptedProcess.h @@ -67,7 +67,7 @@ class ScriptedProcess : public Process { bool IsAlive() override; - size_t DoReadMemory(lldb::addr_t addr, void *buf, size_t size, + size_t DoReadMemory(const ProcessAddress &addr, void *buf, size_t size, Status &error) override; size_t DoWriteMemory(lldb::addr_t vm_addr, const void *buf, size_t size, diff --git a/lldb/source/Plugins/Process/wasm/ProcessWasm.cpp b/lldb/source/Plugins/Process/wasm/ProcessWasm.cpp index e119b3e3ecf6d..10d7d8ca587d8 100644 --- a/lldb/source/Plugins/Process/wasm/ProcessWasm.cpp +++ b/lldb/source/Plugins/Process/wasm/ProcessWasm.cpp @@ -125,8 +125,9 @@ size_t ProcessWasm::ReadGlobal(uint32_t module_id, uint32_t index, void *buf, return size; } -size_t ProcessWasm::ReadMemory(lldb::addr_t vm_addr, void *buf, size_t size, - Status &error) { +size_t ProcessWasm::ReadMemory(const ProcessAddress &process_addr, void *buf, + size_t size, Status &error) { + lldb::addr_t vm_addr = process_addr.GetValue(); wasm_addr_t wasm_addr(vm_addr); switch (wasm_addr.GetType()) { diff --git a/lldb/source/Plugins/Process/wasm/ProcessWasm.h b/lldb/source/Plugins/Process/wasm/ProcessWasm.h index 9bce07ec5691c..1e73e42af412a 100644 --- a/lldb/source/Plugins/Process/wasm/ProcessWasm.h +++ b/lldb/source/Plugins/Process/wasm/ProcessWasm.h @@ -37,7 +37,7 @@ class ProcessWasm : public process_gdb_remote::ProcessGDBRemote { llvm::StringRef GetPluginName() override; - size_t ReadMemory(lldb::addr_t vm_addr, void *buf, size_t size, + size_t ReadMemory(const ProcessAddress &vm_addr, void *buf, size_t size, Status &error) override; bool CanDebug(lldb::TargetSP target_sp, diff --git a/lldb/source/Target/Process.cpp b/lldb/source/Target/Process.cpp index 256ce12abc1ef..1aeb3f0591f53 100644 --- a/lldb/source/Target/Process.cpp +++ b/lldb/source/Target/Process.cpp @@ -2035,7 +2035,9 @@ Status Process::DisableSoftwareBreakpoint(BreakpointSite *bp_site) { // code //#define VERIFY_MEMORY_READS -size_t Process::ReadMemory(addr_t addr, void *buf, size_t size, Status &error) { +size_t Process::ReadMemory(const ProcessAddress &process_addr, void *buf, + size_t size, Status &error) { + lldb::addr_t addr = process_addr.GetValue(); if (ABISP abi_sp = GetABI()) addr = abi_sp->FixAnyAddress(addr); diff --git a/lldb/source/Target/ProcessTrace.cpp b/lldb/source/Target/ProcessTrace.cpp index 50000f22900f4..38816b6625d5c 100644 --- a/lldb/source/Target/ProcessTrace.cpp +++ b/lldb/source/Target/ProcessTrace.cpp @@ -93,8 +93,9 @@ void ProcessTrace::RefreshStateAfterStop() {} Status ProcessTrace::DoDestroy() { return Status(); } -size_t ProcessTrace::ReadMemory(addr_t addr, void *buf, size_t size, - Status &error) { +size_t ProcessTrace::ReadMemory(const ProcessAddress &process_addr, void *buf, + size_t size, Status &error) { + lldb::addr_t addr = process_addr.GetValue(); if (const ABISP &abi = GetABI()) addr = abi->FixAnyAddress(addr); @@ -127,8 +128,9 @@ bool ProcessTrace::GetProcessInfo(ProcessInstanceInfo &info) { return true; } -size_t ProcessTrace::DoReadMemory(addr_t addr, void *buf, size_t size, - Status &error) { +size_t ProcessTrace::DoReadMemory(const ProcessAddress &process_addr, void *buf, + size_t size, Status &error) { + lldb::addr_t addr = process_addr.GetValue(); Address resolved_address; GetTarget().ResolveLoadAddress(addr, resolved_address); diff --git a/lldb/tools/lldb-server/Plugins/Accelerator/Mock/ProcessMockAccelerator.cpp b/lldb/tools/lldb-server/Plugins/Accelerator/Mock/ProcessMockAccelerator.cpp index 174ab1a0143d4..9659db1876ad3 100644 --- a/lldb/tools/lldb-server/Plugins/Accelerator/Mock/ProcessMockAccelerator.cpp +++ b/lldb/tools/lldb-server/Plugins/Accelerator/Mock/ProcessMockAccelerator.cpp @@ -59,8 +59,11 @@ Status ProcessMockAccelerator::Signal(int signo) { Status ProcessMockAccelerator::Kill() { return Status(); } -Status ProcessMockAccelerator::ReadMemory(lldb::addr_t addr, void *buf, - size_t size, size_t &bytes_read) { +Status ProcessMockAccelerator::ReadMemory(const ProcessAddress &process_addr, + void *buf, size_t size, + size_t &bytes_read) { + lldb::addr_t addr = process_addr.GetValue(); + (void)addr; bytes_read = 0; return Status::FromErrorString("unimplemented"); } diff --git a/lldb/tools/lldb-server/Plugins/Accelerator/Mock/ProcessMockAccelerator.h b/lldb/tools/lldb-server/Plugins/Accelerator/Mock/ProcessMockAccelerator.h index 6fc07b5ac011a..6346773e40141 100644 --- a/lldb/tools/lldb-server/Plugins/Accelerator/Mock/ProcessMockAccelerator.h +++ b/lldb/tools/lldb-server/Plugins/Accelerator/Mock/ProcessMockAccelerator.h @@ -40,7 +40,7 @@ class ProcessMockAccelerator : public NativeProcessProtocol { Status Signal(int signo) override; Status Kill() override; - Status ReadMemory(lldb::addr_t addr, void *buf, size_t size, + Status ReadMemory(const ProcessAddress &addr, void *buf, size_t size, size_t &bytes_read) override; Status WriteMemory(lldb::addr_t addr, const void *buf, size_t size, size_t &bytes_written) override; diff --git a/lldb/unittests/DataFormatter/FormatterSectionTest.cpp b/lldb/unittests/DataFormatter/FormatterSectionTest.cpp index 35a24bef7b0aa..a67bb7c44ab1a 100644 --- a/lldb/unittests/DataFormatter/FormatterSectionTest.cpp +++ b/lldb/unittests/DataFormatter/FormatterSectionTest.cpp @@ -108,8 +108,8 @@ struct MockProcess : Process { return false; }; - size_t DoReadMemory(addr_t vm_addr, void *buf, size_t size, - Status &error) override { + size_t DoReadMemory(const ProcessAddress &process_addr, void *buf, + size_t size, Status &error) override { return 0; } }; diff --git a/lldb/unittests/Expression/DWARFExpressionTest.cpp b/lldb/unittests/Expression/DWARFExpressionTest.cpp index e8bca7208c8d5..74a1b66b9a587 100644 --- a/lldb/unittests/Expression/DWARFExpressionTest.cpp +++ b/lldb/unittests/Expression/DWARFExpressionTest.cpp @@ -142,8 +142,9 @@ struct MockProcess : Process { MockProcess(lldb::TargetSP target_sp, lldb::ListenerSP listener_sp, MockMemory memory) : Process(target_sp, listener_sp), m_memory(std::move(memory)) {} - size_t DoReadMemory(addr_t vm_addr, void *buf, size_t size, - Status &error) override { + size_t DoReadMemory(const ProcessAddress &process_addr, void *buf, + size_t size, Status &error) override { + addr_t vm_addr = process_addr.GetValue(); auto expected_memory = m_memory.ReadMemory(vm_addr, size); if (!expected_memory) { error = Status::FromError(expected_memory.takeError()); @@ -153,9 +154,9 @@ struct MockProcess : Process { std::memcpy(buf, expected_memory->data(), expected_memory->size()); return size; } - size_t ReadMemory(addr_t addr, void *buf, size_t size, + size_t ReadMemory(const ProcessAddress &process_addr, void *buf, size_t size, Status &status) override { - return DoReadMemory(addr, buf, size, status); + return DoReadMemory(process_addr, buf, size, status); } bool CanDebug(lldb::TargetSP, bool) override { return true; } Status DoDestroy() override { return Status(); } diff --git a/lldb/unittests/Expression/IRMemoryMapTest.cpp b/lldb/unittests/Expression/IRMemoryMapTest.cpp index 7c78a3abd359c..df9a3862efc77 100644 --- a/lldb/unittests/Expression/IRMemoryMapTest.cpp +++ b/lldb/unittests/Expression/IRMemoryMapTest.cpp @@ -36,8 +36,8 @@ class NoJITProcess : public Process { } Status DoDestroy() override { return {}; } void RefreshStateAfterStop() override {} - size_t DoReadMemory(addr_t vm_addr, void *buf, size_t size, - Status &error) override { + size_t DoReadMemory(const ProcessAddress &process_addr, void *buf, + size_t size, Status &error) override { return 0; } bool DoUpdateThreadList(ThreadList &old_thread_list, diff --git a/lldb/unittests/Process/ProcessEventDataTest.cpp b/lldb/unittests/Process/ProcessEventDataTest.cpp index 88ea394bbb1e5..237ee639eda16 100644 --- a/lldb/unittests/Process/ProcessEventDataTest.cpp +++ b/lldb/unittests/Process/ProcessEventDataTest.cpp @@ -49,8 +49,8 @@ class DummyProcess : public Process { } Status DoDestroy() override { return {}; } void RefreshStateAfterStop() override {} - size_t DoReadMemory(lldb::addr_t vm_addr, void *buf, size_t size, - Status &error) override { + size_t DoReadMemory(const ProcessAddress &process_addr, void *buf, + size_t size, Status &error) override { return 0; } bool DoUpdateThreadList(ThreadList &old_thread_list, diff --git a/lldb/unittests/Process/elf-core/ThreadElfCoreTest.cpp b/lldb/unittests/Process/elf-core/ThreadElfCoreTest.cpp index 68919945198d4..95c8fa24702f4 100644 --- a/lldb/unittests/Process/elf-core/ThreadElfCoreTest.cpp +++ b/lldb/unittests/Process/elf-core/ThreadElfCoreTest.cpp @@ -59,8 +59,8 @@ struct DummyProcess : public Process { } Status DoDestroy() override { return {}; } void RefreshStateAfterStop() override {} - size_t DoReadMemory(lldb::addr_t vm_addr, void *buf, size_t size, - Status &error) override { + size_t DoReadMemory(const ProcessAddress &process_addr, void *buf, + size_t size, Status &error) override { return 0; } bool DoUpdateThreadList(ThreadList &old_thread_list, diff --git a/lldb/unittests/Target/ExecutionContextTest.cpp b/lldb/unittests/Target/ExecutionContextTest.cpp index 7918b252ebe35..6415bce7c18eb 100644 --- a/lldb/unittests/Target/ExecutionContextTest.cpp +++ b/lldb/unittests/Target/ExecutionContextTest.cpp @@ -51,8 +51,8 @@ class DummyProcess : public Process { } Status DoDestroy() override { return {}; } void RefreshStateAfterStop() override {} - size_t DoReadMemory(lldb::addr_t vm_addr, void *buf, size_t size, - Status &error) override { + size_t DoReadMemory(const ProcessAddress &process_addr, void *buf, + size_t size, Status &error) override { return 0; } bool DoUpdateThreadList(ThreadList &old_thread_list, diff --git a/lldb/unittests/Target/LocateModuleCallbackTest.cpp b/lldb/unittests/Target/LocateModuleCallbackTest.cpp index 1fe4487892060..fbf716c017f19 100644 --- a/lldb/unittests/Target/LocateModuleCallbackTest.cpp +++ b/lldb/unittests/Target/LocateModuleCallbackTest.cpp @@ -64,8 +64,8 @@ class MockProcess : public Process { return false; } - size_t DoReadMemory(addr_t vm_addr, void *buf, size_t size, - Status &error) override { + size_t DoReadMemory(const ProcessAddress &process_addr, void *buf, + size_t size, Status &error) override { return 0; } diff --git a/lldb/unittests/Target/MemoryTest.cpp b/lldb/unittests/Target/MemoryTest.cpp index f89e9215de713..0ab48a9a8acb7 100644 --- a/lldb/unittests/Target/MemoryTest.cpp +++ b/lldb/unittests/Target/MemoryTest.cpp @@ -91,8 +91,8 @@ class DummyProcess : public Process { void RefreshStateAfterStop() override {} // Required by Target::ReadMemory() to call Process::ReadMemory() bool IsAlive() override { return true; } - size_t DoReadMemory(lldb::addr_t vm_addr, void *buf, size_t size, - Status &error) override { + size_t DoReadMemory(const ProcessAddress &process_addr, void *buf, + size_t size, Status &error) override { if (m_bytes_left == 0) return 0; @@ -463,8 +463,9 @@ class DummyReaderProcess : public Process { bool read_less_than_requested = false; bool read_more_than_requested = false; - size_t DoReadMemory(lldb::addr_t vm_addr, void *buf, size_t size, - Status &error) override { + size_t DoReadMemory(const ProcessAddress &process_addr, void *buf, + size_t size, Status &error) override { + lldb::addr_t vm_addr = process_addr.GetValue(); if (read_less_than_requested && size > 0) size--; if (read_more_than_requested) @@ -629,8 +630,9 @@ class StringReaderProcess : public Process { strcpy(&memory[300], long_str.data()); } - size_t DoReadMemory(lldb::addr_t vm_addr, void *buf, size_t size, - Status &error) override { + size_t DoReadMemory(const ProcessAddress &process_addr, void *buf, + size_t size, Status &error) override { + lldb::addr_t vm_addr = process_addr.GetValue(); if (vm_addr >= 1024) { error = Status::FromErrorString("out of bounds!"); return 0; @@ -794,7 +796,8 @@ class DummyMSBReaderProcess : public Process { void RefreshStateAfterStop() override {} bool DoUpdateThreadList(ThreadList &, ThreadList &) override { return false; } llvm::StringRef GetPluginName() override { return "Dummy"; } - size_t DoReadMemory(addr_t, void *, size_t, Status &) override { + size_t DoReadMemory(const ProcessAddress &, void *, size_t, + Status &) override { llvm_unreachable("don't call this"); } }; diff --git a/lldb/unittests/TestingSupport/Host/NativeProcessTestUtils.h b/lldb/unittests/TestingSupport/Host/NativeProcessTestUtils.h index 1a017122411a8..087a6e7f92913 100644 --- a/lldb/unittests/TestingSupport/Host/NativeProcessTestUtils.h +++ b/lldb/unittests/TestingSupport/Host/NativeProcessTestUtils.h @@ -70,8 +70,9 @@ template <typename T> class MockProcess : public T { // Redirect base class Read/Write Memory methods to functions whose signatures // are more mock-friendly. - Status ReadMemory(addr_t Addr, void *Buf, size_t Size, + Status ReadMemory(const ProcessAddress &process_addr, void *Buf, size_t Size, size_t &BytesRead) /*override*/ { + addr_t Addr = process_addr.GetValue(); auto ExpectedMemory = this->ReadMemory(Addr, Size); if (!ExpectedMemory) { BytesRead = 0; diff --git a/lldb/unittests/Thread/ThreadTest.cpp b/lldb/unittests/Thread/ThreadTest.cpp index 4f4a5558db8df..ee23ce0c172ee 100644 --- a/lldb/unittests/Thread/ThreadTest.cpp +++ b/lldb/unittests/Thread/ThreadTest.cpp @@ -75,8 +75,8 @@ class DummyProcess : public Process { } Status DoDestroy() override { return {}; } void RefreshStateAfterStop() override {} - size_t DoReadMemory(lldb::addr_t vm_addr, void *buf, size_t size, - Status &error) override { + size_t DoReadMemory(const ProcessAddress &process_addr, void *buf, + size_t size, Status &error) override { return 0; } bool DoUpdateThreadList(ThreadList &old_thread_list, diff --git a/lldb/unittests/ValueObject/DumpValueObjectOptionsTests.cpp b/lldb/unittests/ValueObject/DumpValueObjectOptionsTests.cpp index c3fb8cbeb60ae..955dae59281e6 100644 --- a/lldb/unittests/ValueObject/DumpValueObjectOptionsTests.cpp +++ b/lldb/unittests/ValueObject/DumpValueObjectOptionsTests.cpp @@ -42,8 +42,8 @@ struct MockProcess : Process { return false; }; - size_t DoReadMemory(lldb::addr_t vm_addr, void *buf, size_t size, - Status &error) override { + size_t DoReadMemory(const ProcessAddress &process_addr, void *buf, + size_t size, Status &error) override { // No need to read memory in these tests. return size; } diff --git a/lldb/unittests/ValueObject/DynamicValueObjectLocalBuffer.cpp b/lldb/unittests/ValueObject/DynamicValueObjectLocalBuffer.cpp index 0f3d2d2ba9d68..058353806d2ac 100644 --- a/lldb/unittests/ValueObject/DynamicValueObjectLocalBuffer.cpp +++ b/lldb/unittests/ValueObject/DynamicValueObjectLocalBuffer.cpp @@ -142,8 +142,8 @@ struct MockProcess : Process { return false; }; - size_t DoReadMemory(lldb::addr_t vm_addr, void *buf, size_t size, - Status &error) override { + size_t DoReadMemory(const ProcessAddress &process_addr, void *buf, + size_t size, Status &error) override { // No need to read memory in these tests. return size; } _______________________________________________ lldb-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
