diff options
author | Michał Górny <mgorny@moritz.systems> | 2021-02-02 18:29:06 +0100 |
---|---|---|
committer | Michał Górny <mgorny@moritz.systems> | 2021-02-09 21:10:45 +0100 |
commit | bd03f6df51d161551a0439d8f51e2640a218048f (patch) | |
tree | d616fd82b2a8ee667aab6cc57f2fadeef5fbf1f0 /lldb/source/Host/common/NativeProcessProtocol.cpp | |
parent | fe7c0d90b2940232cc6ab396253091bcf1ca4f2f (diff) | |
download | llvm-bd03f6df51d161551a0439d8f51e2640a218048f.zip llvm-bd03f6df51d161551a0439d8f51e2640a218048f.tar.gz llvm-bd03f6df51d161551a0439d8f51e2640a218048f.tar.bz2 |
[lldb] [Process/FreeBSDRemote] Introduce powerpc support
Introduce a minimal support for the 32-bit powerpc platform. This
includes support for GPR and FPR registers. I also needed to add
software breakpoint opcode for PPC32/PPC64 (big endian), and to fix
offsets in RegisterInfos_powerpc.h (used only by FreeBSD register
context to be globally unique rather than relative to each struct).
Differential Revision: https://reviews.llvm.org/D95947
Diffstat (limited to 'lldb/source/Host/common/NativeProcessProtocol.cpp')
-rw-r--r-- | lldb/source/Host/common/NativeProcessProtocol.cpp | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/lldb/source/Host/common/NativeProcessProtocol.cpp b/lldb/source/Host/common/NativeProcessProtocol.cpp index 493e14c..070fda6 100644 --- a/lldb/source/Host/common/NativeProcessProtocol.cpp +++ b/lldb/source/Host/common/NativeProcessProtocol.cpp @@ -522,7 +522,8 @@ NativeProcessProtocol::GetSoftwareBreakpointTrapOpcode(size_t size_hint) { static const uint8_t g_mips64_opcode[] = {0x00, 0x00, 0x00, 0x0d}; static const uint8_t g_mips64el_opcode[] = {0x0d, 0x00, 0x00, 0x00}; static const uint8_t g_s390x_opcode[] = {0x00, 0x01}; - static const uint8_t g_ppc64le_opcode[] = {0x08, 0x00, 0xe0, 0x7f}; // trap + static const uint8_t g_ppc_opcode[] = {0x7f, 0xe0, 0x00, 0x08}; // trap + static const uint8_t g_ppcle_opcode[] = {0x08, 0x00, 0xe0, 0x7f}; // trap switch (GetArchitecture().GetMachine()) { case llvm::Triple::aarch64: @@ -544,8 +545,12 @@ NativeProcessProtocol::GetSoftwareBreakpointTrapOpcode(size_t size_hint) { case llvm::Triple::systemz: return llvm::makeArrayRef(g_s390x_opcode); + case llvm::Triple::ppc: + case llvm::Triple::ppc64: + return llvm::makeArrayRef(g_ppc_opcode); + case llvm::Triple::ppc64le: - return llvm::makeArrayRef(g_ppc64le_opcode); + return llvm::makeArrayRef(g_ppcle_opcode); default: return llvm::createStringError(llvm::inconvertibleErrorCode(), @@ -568,6 +573,8 @@ size_t NativeProcessProtocol::GetSoftwareBreakpointPCOffset() { case llvm::Triple::mips64el: case llvm::Triple::mips: case llvm::Triple::mipsel: + case llvm::Triple::ppc: + case llvm::Triple::ppc64: case llvm::Triple::ppc64le: // On these architectures the PC doesn't get updated for breakpoint hits. return 0; |