1278332Semaste//===-- RegisterContextFreeBSD_powerpc.cpp ----------------------*- C++ -*-===// 2278332Semaste// 3353358Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4353358Sdim// See https://llvm.org/LICENSE.txt for license information. 5353358Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6278332Semaste// 7278332Semaste//===---------------------------------------------------------------------===// 8278332Semaste 9314564Sdim#include "RegisterContextFreeBSD_powerpc.h" 10314564Sdim#include "RegisterContextPOSIX_powerpc.h" 11278332Semaste#include <vector> 12278332Semaste 13278332Semasteusing namespace lldb_private; 14278332Semasteusing namespace lldb; 15278332Semaste 16278332Semaste// http://svnweb.freebsd.org/base/head/sys/powerpc/include/reg.h 17314564Sdimtypedef struct _GPR64 { 18314564Sdim uint64_t r0; 19314564Sdim uint64_t r1; 20314564Sdim uint64_t r2; 21314564Sdim uint64_t r3; 22314564Sdim uint64_t r4; 23314564Sdim uint64_t r5; 24314564Sdim uint64_t r6; 25314564Sdim uint64_t r7; 26314564Sdim uint64_t r8; 27314564Sdim uint64_t r9; 28314564Sdim uint64_t r10; 29314564Sdim uint64_t r11; 30314564Sdim uint64_t r12; 31314564Sdim uint64_t r13; 32314564Sdim uint64_t r14; 33314564Sdim uint64_t r15; 34314564Sdim uint64_t r16; 35314564Sdim uint64_t r17; 36314564Sdim uint64_t r18; 37314564Sdim uint64_t r19; 38314564Sdim uint64_t r20; 39314564Sdim uint64_t r21; 40314564Sdim uint64_t r22; 41314564Sdim uint64_t r23; 42314564Sdim uint64_t r24; 43314564Sdim uint64_t r25; 44314564Sdim uint64_t r26; 45314564Sdim uint64_t r27; 46314564Sdim uint64_t r28; 47314564Sdim uint64_t r29; 48314564Sdim uint64_t r30; 49314564Sdim uint64_t r31; 50314564Sdim uint64_t lr; 51314564Sdim uint64_t cr; 52314564Sdim uint64_t xer; 53314564Sdim uint64_t ctr; 54314564Sdim uint64_t pc; 55278332Semaste} GPR64; 56278332Semaste 57314564Sdimtypedef struct _GPR32 { 58314564Sdim uint32_t r0; 59314564Sdim uint32_t r1; 60314564Sdim uint32_t r2; 61314564Sdim uint32_t r3; 62314564Sdim uint32_t r4; 63314564Sdim uint32_t r5; 64314564Sdim uint32_t r6; 65314564Sdim uint32_t r7; 66314564Sdim uint32_t r8; 67314564Sdim uint32_t r9; 68314564Sdim uint32_t r10; 69314564Sdim uint32_t r11; 70314564Sdim uint32_t r12; 71314564Sdim uint32_t r13; 72314564Sdim uint32_t r14; 73314564Sdim uint32_t r15; 74314564Sdim uint32_t r16; 75314564Sdim uint32_t r17; 76314564Sdim uint32_t r18; 77314564Sdim uint32_t r19; 78314564Sdim uint32_t r20; 79314564Sdim uint32_t r21; 80314564Sdim uint32_t r22; 81314564Sdim uint32_t r23; 82314564Sdim uint32_t r24; 83314564Sdim uint32_t r25; 84314564Sdim uint32_t r26; 85314564Sdim uint32_t r27; 86314564Sdim uint32_t r28; 87314564Sdim uint32_t r29; 88314564Sdim uint32_t r30; 89314564Sdim uint32_t r31; 90314564Sdim uint32_t lr; 91314564Sdim uint32_t cr; 92314564Sdim uint32_t xer; 93314564Sdim uint32_t ctr; 94314564Sdim uint32_t pc; 95278332Semaste} GPR32; 96278332Semaste 97314564Sdimtypedef struct _FPR { 98314564Sdim uint64_t f0; 99314564Sdim uint64_t f1; 100314564Sdim uint64_t f2; 101314564Sdim uint64_t f3; 102314564Sdim uint64_t f4; 103314564Sdim uint64_t f5; 104314564Sdim uint64_t f6; 105314564Sdim uint64_t f7; 106314564Sdim uint64_t f8; 107314564Sdim uint64_t f9; 108314564Sdim uint64_t f10; 109314564Sdim uint64_t f11; 110314564Sdim uint64_t f12; 111314564Sdim uint64_t f13; 112314564Sdim uint64_t f14; 113314564Sdim uint64_t f15; 114314564Sdim uint64_t f16; 115314564Sdim uint64_t f17; 116314564Sdim uint64_t f18; 117314564Sdim uint64_t f19; 118314564Sdim uint64_t f20; 119314564Sdim uint64_t f21; 120314564Sdim uint64_t f22; 121314564Sdim uint64_t f23; 122314564Sdim uint64_t f24; 123314564Sdim uint64_t f25; 124314564Sdim uint64_t f26; 125314564Sdim uint64_t f27; 126314564Sdim uint64_t f28; 127314564Sdim uint64_t f29; 128314564Sdim uint64_t f30; 129314564Sdim uint64_t f31; 130314564Sdim uint64_t fpscr; 131278332Semaste} FPR; 132278332Semaste 133314564Sdimtypedef struct _VMX { 134314564Sdim uint32_t v0[4]; 135314564Sdim uint32_t v1[4]; 136314564Sdim uint32_t v2[4]; 137314564Sdim uint32_t v3[4]; 138314564Sdim uint32_t v4[4]; 139314564Sdim uint32_t v5[4]; 140314564Sdim uint32_t v6[4]; 141314564Sdim uint32_t v7[4]; 142314564Sdim uint32_t v8[4]; 143314564Sdim uint32_t v9[4]; 144314564Sdim uint32_t v10[4]; 145314564Sdim uint32_t v11[4]; 146314564Sdim uint32_t v12[4]; 147314564Sdim uint32_t v13[4]; 148314564Sdim uint32_t v14[4]; 149314564Sdim uint32_t v15[4]; 150314564Sdim uint32_t v16[4]; 151314564Sdim uint32_t v17[4]; 152314564Sdim uint32_t v18[4]; 153314564Sdim uint32_t v19[4]; 154314564Sdim uint32_t v20[4]; 155314564Sdim uint32_t v21[4]; 156314564Sdim uint32_t v22[4]; 157314564Sdim uint32_t v23[4]; 158314564Sdim uint32_t v24[4]; 159314564Sdim uint32_t v25[4]; 160314564Sdim uint32_t v26[4]; 161314564Sdim uint32_t v27[4]; 162314564Sdim uint32_t v28[4]; 163314564Sdim uint32_t v29[4]; 164314564Sdim uint32_t v30[4]; 165314564Sdim uint32_t v31[4]; 166314564Sdim uint32_t pad[2]; 167314564Sdim uint32_t vrsave; 168314564Sdim uint32_t vscr; 169288943Sdim} VMX; 170288943Sdim 171314564Sdim// Include RegisterInfos_powerpc to declare our g_register_infos_powerpc 172314564Sdim// structure. 173278332Semaste#define DECLARE_REGISTER_INFOS_POWERPC_STRUCT 174278332Semaste#include "RegisterInfos_powerpc.h" 175278332Semaste#undef DECLARE_REGISTER_INFOS_POWERPC_STRUCT 176278332Semaste 177314564SdimRegisterContextFreeBSD_powerpc::RegisterContextFreeBSD_powerpc( 178314564Sdim const ArchSpec &target_arch) 179314564Sdim : RegisterInfoInterface(target_arch) {} 180278332Semaste 181314564SdimRegisterContextFreeBSD_powerpc::~RegisterContextFreeBSD_powerpc() {} 182278332Semaste 183314564Sdimsize_t RegisterContextFreeBSD_powerpc::GetGPRSize() const { 184314564Sdim // This is an 'abstract' base, so no GPR struct. 185314564Sdim return 0; 186278332Semaste} 187278332Semaste 188314564Sdimconst RegisterInfo *RegisterContextFreeBSD_powerpc::GetRegisterInfo() const { 189314564Sdim // assert (m_target_arch.GetCore() == ArchSpec::eCore_powerpc); 190314564Sdim llvm_unreachable("Abstract class!"); 191353358Sdim return nullptr; 192278332Semaste} 193278332Semaste 194314564Sdimuint32_t RegisterContextFreeBSD_powerpc::GetRegisterCount() const { return 0; } 195278332Semaste 196314564SdimRegisterContextFreeBSD_powerpc32::RegisterContextFreeBSD_powerpc32( 197314564Sdim const ArchSpec &target_arch) 198314564Sdim : RegisterContextFreeBSD_powerpc(target_arch) {} 199278332Semaste 200314564SdimRegisterContextFreeBSD_powerpc32::~RegisterContextFreeBSD_powerpc32() {} 201278332Semaste 202314564Sdimsize_t RegisterContextFreeBSD_powerpc32::GetGPRSize() const { 203314564Sdim return sizeof(GPR32); 204278332Semaste} 205278332Semaste 206314564Sdimconst RegisterInfo *RegisterContextFreeBSD_powerpc32::GetRegisterInfo() const { 207314564Sdim // assert (m_target_arch.GetCore() == ArchSpec::eCore_powerpc); 208314564Sdim return g_register_infos_powerpc32; 209278332Semaste} 210278332Semaste 211314564Sdimuint32_t RegisterContextFreeBSD_powerpc32::GetRegisterCount() const { 212314564Sdim return static_cast<uint32_t>(sizeof(g_register_infos_powerpc32) / 213314564Sdim sizeof(g_register_infos_powerpc32[0])); 214278332Semaste} 215278332Semaste 216314564SdimRegisterContextFreeBSD_powerpc64::RegisterContextFreeBSD_powerpc64( 217314564Sdim const ArchSpec &target_arch) 218314564Sdim : RegisterContextFreeBSD_powerpc(target_arch) {} 219278332Semaste 220314564SdimRegisterContextFreeBSD_powerpc64::~RegisterContextFreeBSD_powerpc64() {} 221278332Semaste 222314564Sdimsize_t RegisterContextFreeBSD_powerpc64::GetGPRSize() const { 223314564Sdim return sizeof(GPR64); 224278332Semaste} 225278332Semaste 226314564Sdimconst RegisterInfo *RegisterContextFreeBSD_powerpc64::GetRegisterInfo() const { 227314564Sdim // assert (m_target_arch.GetCore() == ArchSpec::eCore_powerpc); 228314564Sdim if (m_target_arch.GetMachine() == llvm::Triple::ppc) 229314564Sdim return g_register_infos_powerpc64_32; 230314564Sdim return g_register_infos_powerpc64; 231278332Semaste} 232278332Semaste 233314564Sdimuint32_t RegisterContextFreeBSD_powerpc64::GetRegisterCount() const { 234314564Sdim return static_cast<uint32_t>(sizeof(g_register_infos_powerpc64) / 235314564Sdim sizeof(g_register_infos_powerpc64[0])); 236278332Semaste} 237