Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions lldb/source/Plugins/Process/Utility/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ add_lldb_library(lldbPluginProcessUtility
RegisterInfoPOSIX_arm64.cpp
RegisterInfoPOSIX_loongarch64.cpp
RegisterInfoPOSIX_ppc64le.cpp
RegisterInfoPOSIX_ppc64.cpp
RegisterInfoPOSIX_riscv32.cpp
RegisterInfoPOSIX_riscv64.cpp
StopInfoMachException.cpp
Expand Down
61 changes: 61 additions & 0 deletions lldb/source/Plugins/Process/Utility/RegisterInfoPOSIX_ppc64.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
//===-- RegisterInfoPOSIX_ppc64.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 <cassert>
#include <cstddef>
#include <vector>

#include "lldb/lldb-defines.h"
#include "llvm/Support/Compiler.h"

#include "RegisterInfoPOSIX_ppc64.h"

// Include RegisterInfoPOSIX_ppc64 to declare our g_register_infos_ppc64
#define DECLARE_REGISTER_INFOS_PPC64_STRUCT
#include "RegisterInfos_ppc64.h"
#undef DECLARE_REGISTER_INFOS_PPC64_STRUCT

static const lldb_private::RegisterInfo *
GetRegisterInfoPtr(const lldb_private::ArchSpec &target_arch) {
switch (target_arch.GetMachine()) {
case llvm::Triple::ppc64:
return g_register_infos_ppc64;
default:
assert(false && "Unhandled target architecture.");
return nullptr;
}
}

static uint32_t
GetRegisterInfoCount(const lldb_private::ArchSpec &target_arch) {
switch (target_arch.GetMachine()) {
case llvm::Triple::ppc64:
return static_cast<uint32_t>(sizeof(g_register_infos_ppc64) /
sizeof(g_register_infos_ppc64[0]));
default:
assert(false && "Unhandled target architecture.");
return 0;
}
}

RegisterInfoPOSIX_ppc64::RegisterInfoPOSIX_ppc64(
const lldb_private::ArchSpec &target_arch)
: lldb_private::RegisterInfoInterface(target_arch),
m_register_info_p(GetRegisterInfoPtr(target_arch)),
m_register_info_count(GetRegisterInfoCount(target_arch)) {}

size_t RegisterInfoPOSIX_ppc64::GetGPRSize() const { return sizeof(GPR_PPC64); }

const lldb_private::RegisterInfo *
RegisterInfoPOSIX_ppc64::GetRegisterInfo() const {
return m_register_info_p;
}

uint32_t RegisterInfoPOSIX_ppc64::GetRegisterCount() const {
return m_register_info_count;
}
31 changes: 31 additions & 0 deletions lldb/source/Plugins/Process/Utility/RegisterInfoPOSIX_ppc64.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
//===-- RegisterInfoPOSIX_ppc64.h -------------------------------*- C++ -*-===//
//
// 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_SOURCE_PLUGINS_PROCESS_UTILITY_REGISTERINFOPOSIX_PPC64_H
#define LLDB_SOURCE_PLUGINS_PROCESS_UTILITY_REGISTERINFOPOSIX_PPC64_H

#include "RegisterInfoInterface.h"
#include "lldb/Target/RegisterContext.h"
#include "lldb/lldb-private.h"

class RegisterInfoPOSIX_ppc64 : public lldb_private::RegisterInfoInterface {
public:
RegisterInfoPOSIX_ppc64(const lldb_private::ArchSpec &target_arch);

size_t GetGPRSize() const override;

const lldb_private::RegisterInfo *GetRegisterInfo() const override;

uint32_t GetRegisterCount() const override;

private:
const lldb_private::RegisterInfo *m_register_info_p;
uint32_t m_register_info_count;
};

#endif // #ifndef LLDB_SOURCE_PLUGINS_PROCESS_UTILITY_REGISTERINFOPOSIX_PPC64_H
Loading