Path: blob/main/contrib/llvm-project/lldb/source/Plugins/Process/Utility/RegisterContextFreeBSD_powerpc.cpp
96381 views
//===-- RegisterContextFreeBSD_powerpc.cpp --------------------------------===//1//2// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.3// See https://llvm.org/LICENSE.txt for license information.4// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception5//6//===---------------------------------------------------------------------===//78#include "RegisterContextFreeBSD_powerpc.h"9#include "RegisterContextPOSIX_powerpc.h"10#include <vector>1112using namespace lldb_private;13using namespace lldb;1415// http://svnweb.freebsd.org/base/head/sys/powerpc/include/reg.h16typedef struct _GPR64 {17uint64_t r0;18uint64_t r1;19uint64_t r2;20uint64_t r3;21uint64_t r4;22uint64_t r5;23uint64_t r6;24uint64_t r7;25uint64_t r8;26uint64_t r9;27uint64_t r10;28uint64_t r11;29uint64_t r12;30uint64_t r13;31uint64_t r14;32uint64_t r15;33uint64_t r16;34uint64_t r17;35uint64_t r18;36uint64_t r19;37uint64_t r20;38uint64_t r21;39uint64_t r22;40uint64_t r23;41uint64_t r24;42uint64_t r25;43uint64_t r26;44uint64_t r27;45uint64_t r28;46uint64_t r29;47uint64_t r30;48uint64_t r31;49uint64_t lr;50uint64_t cr;51uint64_t xer;52uint64_t ctr;53uint64_t pc;54} GPR64;5556typedef struct _GPR32 {57uint32_t r0;58uint32_t r1;59uint32_t r2;60uint32_t r3;61uint32_t r4;62uint32_t r5;63uint32_t r6;64uint32_t r7;65uint32_t r8;66uint32_t r9;67uint32_t r10;68uint32_t r11;69uint32_t r12;70uint32_t r13;71uint32_t r14;72uint32_t r15;73uint32_t r16;74uint32_t r17;75uint32_t r18;76uint32_t r19;77uint32_t r20;78uint32_t r21;79uint32_t r22;80uint32_t r23;81uint32_t r24;82uint32_t r25;83uint32_t r26;84uint32_t r27;85uint32_t r28;86uint32_t r29;87uint32_t r30;88uint32_t r31;89uint32_t lr;90uint32_t cr;91uint32_t xer;92uint32_t ctr;93uint32_t pc;94} GPR32;9596typedef struct _FPR {97uint64_t f0;98uint64_t f1;99uint64_t f2;100uint64_t f3;101uint64_t f4;102uint64_t f5;103uint64_t f6;104uint64_t f7;105uint64_t f8;106uint64_t f9;107uint64_t f10;108uint64_t f11;109uint64_t f12;110uint64_t f13;111uint64_t f14;112uint64_t f15;113uint64_t f16;114uint64_t f17;115uint64_t f18;116uint64_t f19;117uint64_t f20;118uint64_t f21;119uint64_t f22;120uint64_t f23;121uint64_t f24;122uint64_t f25;123uint64_t f26;124uint64_t f27;125uint64_t f28;126uint64_t f29;127uint64_t f30;128uint64_t f31;129uint64_t fpscr;130} FPR;131132typedef struct _VMX {133uint32_t v0[4];134uint32_t v1[4];135uint32_t v2[4];136uint32_t v3[4];137uint32_t v4[4];138uint32_t v5[4];139uint32_t v6[4];140uint32_t v7[4];141uint32_t v8[4];142uint32_t v9[4];143uint32_t v10[4];144uint32_t v11[4];145uint32_t v12[4];146uint32_t v13[4];147uint32_t v14[4];148uint32_t v15[4];149uint32_t v16[4];150uint32_t v17[4];151uint32_t v18[4];152uint32_t v19[4];153uint32_t v20[4];154uint32_t v21[4];155uint32_t v22[4];156uint32_t v23[4];157uint32_t v24[4];158uint32_t v25[4];159uint32_t v26[4];160uint32_t v27[4];161uint32_t v28[4];162uint32_t v29[4];163uint32_t v30[4];164uint32_t v31[4];165uint32_t pad[2];166uint32_t vrsave;167uint32_t vscr;168} VMX;169170// Include RegisterInfos_powerpc to declare our g_register_infos_powerpc171// structure.172#define DECLARE_REGISTER_INFOS_POWERPC_STRUCT173#include "RegisterInfos_powerpc.h"174#undef DECLARE_REGISTER_INFOS_POWERPC_STRUCT175176RegisterContextFreeBSD_powerpc::RegisterContextFreeBSD_powerpc(177const ArchSpec &target_arch)178: RegisterInfoInterface(target_arch) {}179180RegisterContextFreeBSD_powerpc::~RegisterContextFreeBSD_powerpc() = default;181182size_t RegisterContextFreeBSD_powerpc::GetGPRSize() const {183// This is an 'abstract' base, so no GPR struct.184return 0;185}186187const RegisterInfo *RegisterContextFreeBSD_powerpc::GetRegisterInfo() const {188llvm_unreachable("Abstract class!");189return nullptr;190}191192uint32_t RegisterContextFreeBSD_powerpc::GetRegisterCount() const { return 0; }193194RegisterContextFreeBSD_powerpc32::RegisterContextFreeBSD_powerpc32(195const ArchSpec &target_arch)196: RegisterContextFreeBSD_powerpc(target_arch) {}197198RegisterContextFreeBSD_powerpc32::~RegisterContextFreeBSD_powerpc32() = default;199200size_t RegisterContextFreeBSD_powerpc32::GetGPRSize() const {201return sizeof(GPR32);202}203204const RegisterInfo *RegisterContextFreeBSD_powerpc32::GetRegisterInfo() const {205return g_register_infos_powerpc32;206}207208uint32_t RegisterContextFreeBSD_powerpc32::GetRegisterCount() const {209return static_cast<uint32_t>(sizeof(g_register_infos_powerpc32) /210sizeof(g_register_infos_powerpc32[0]));211}212213RegisterContextFreeBSD_powerpc64::RegisterContextFreeBSD_powerpc64(214const ArchSpec &target_arch)215: RegisterContextFreeBSD_powerpc(target_arch) {}216217RegisterContextFreeBSD_powerpc64::~RegisterContextFreeBSD_powerpc64() = default;218219size_t RegisterContextFreeBSD_powerpc64::GetGPRSize() const {220return sizeof(GPR64);221}222223const RegisterInfo *RegisterContextFreeBSD_powerpc64::GetRegisterInfo() const {224if (GetTargetArchitecture().GetMachine() == llvm::Triple::ppc)225return g_register_infos_powerpc64_32;226return g_register_infos_powerpc64;227}228229uint32_t RegisterContextFreeBSD_powerpc64::GetRegisterCount() const {230return static_cast<uint32_t>(sizeof(g_register_infos_powerpc64) /231sizeof(g_register_infos_powerpc64[0]));232}233234235