brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.1 KiB · d8dfa43 Raw
234 lines · cpp
1//===-- RegisterContextFreeBSD_powerpc.cpp --------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===---------------------------------------------------------------------===//8 9#include "RegisterContextFreeBSD_powerpc.h"10#include "RegisterContextPOSIX_powerpc.h"11#include <vector>12 13using namespace lldb_private;14using namespace lldb;15 16// http://svnweb.freebsd.org/base/head/sys/powerpc/include/reg.h17typedef struct _GPR64 {18  uint64_t r0;19  uint64_t r1;20  uint64_t r2;21  uint64_t r3;22  uint64_t r4;23  uint64_t r5;24  uint64_t r6;25  uint64_t r7;26  uint64_t r8;27  uint64_t r9;28  uint64_t r10;29  uint64_t r11;30  uint64_t r12;31  uint64_t r13;32  uint64_t r14;33  uint64_t r15;34  uint64_t r16;35  uint64_t r17;36  uint64_t r18;37  uint64_t r19;38  uint64_t r20;39  uint64_t r21;40  uint64_t r22;41  uint64_t r23;42  uint64_t r24;43  uint64_t r25;44  uint64_t r26;45  uint64_t r27;46  uint64_t r28;47  uint64_t r29;48  uint64_t r30;49  uint64_t r31;50  uint64_t lr;51  uint64_t cr;52  uint64_t xer;53  uint64_t ctr;54  uint64_t pc;55} GPR64;56 57typedef struct _GPR32 {58  uint32_t r0;59  uint32_t r1;60  uint32_t r2;61  uint32_t r3;62  uint32_t r4;63  uint32_t r5;64  uint32_t r6;65  uint32_t r7;66  uint32_t r8;67  uint32_t r9;68  uint32_t r10;69  uint32_t r11;70  uint32_t r12;71  uint32_t r13;72  uint32_t r14;73  uint32_t r15;74  uint32_t r16;75  uint32_t r17;76  uint32_t r18;77  uint32_t r19;78  uint32_t r20;79  uint32_t r21;80  uint32_t r22;81  uint32_t r23;82  uint32_t r24;83  uint32_t r25;84  uint32_t r26;85  uint32_t r27;86  uint32_t r28;87  uint32_t r29;88  uint32_t r30;89  uint32_t r31;90  uint32_t lr;91  uint32_t cr;92  uint32_t xer;93  uint32_t ctr;94  uint32_t pc;95} GPR32;96 97typedef struct _FPR {98  uint64_t f0;99  uint64_t f1;100  uint64_t f2;101  uint64_t f3;102  uint64_t f4;103  uint64_t f5;104  uint64_t f6;105  uint64_t f7;106  uint64_t f8;107  uint64_t f9;108  uint64_t f10;109  uint64_t f11;110  uint64_t f12;111  uint64_t f13;112  uint64_t f14;113  uint64_t f15;114  uint64_t f16;115  uint64_t f17;116  uint64_t f18;117  uint64_t f19;118  uint64_t f20;119  uint64_t f21;120  uint64_t f22;121  uint64_t f23;122  uint64_t f24;123  uint64_t f25;124  uint64_t f26;125  uint64_t f27;126  uint64_t f28;127  uint64_t f29;128  uint64_t f30;129  uint64_t f31;130  uint64_t fpscr;131} FPR;132 133typedef struct _VMX {134  uint32_t v0[4];135  uint32_t v1[4];136  uint32_t v2[4];137  uint32_t v3[4];138  uint32_t v4[4];139  uint32_t v5[4];140  uint32_t v6[4];141  uint32_t v7[4];142  uint32_t v8[4];143  uint32_t v9[4];144  uint32_t v10[4];145  uint32_t v11[4];146  uint32_t v12[4];147  uint32_t v13[4];148  uint32_t v14[4];149  uint32_t v15[4];150  uint32_t v16[4];151  uint32_t v17[4];152  uint32_t v18[4];153  uint32_t v19[4];154  uint32_t v20[4];155  uint32_t v21[4];156  uint32_t v22[4];157  uint32_t v23[4];158  uint32_t v24[4];159  uint32_t v25[4];160  uint32_t v26[4];161  uint32_t v27[4];162  uint32_t v28[4];163  uint32_t v29[4];164  uint32_t v30[4];165  uint32_t v31[4];166  uint32_t pad[2];167  uint32_t vrsave;168  uint32_t vscr;169} VMX;170 171// Include RegisterInfos_powerpc to declare our g_register_infos_powerpc172// structure.173#define DECLARE_REGISTER_INFOS_POWERPC_STRUCT174#include "RegisterInfos_powerpc.h"175#undef DECLARE_REGISTER_INFOS_POWERPC_STRUCT176 177RegisterContextFreeBSD_powerpc::RegisterContextFreeBSD_powerpc(178    const ArchSpec &target_arch)179    : RegisterInfoInterface(target_arch) {}180 181RegisterContextFreeBSD_powerpc::~RegisterContextFreeBSD_powerpc() = default;182 183size_t RegisterContextFreeBSD_powerpc::GetGPRSize() const {184  // This is an 'abstract' base, so no GPR struct.185  return 0;186}187 188const RegisterInfo *RegisterContextFreeBSD_powerpc::GetRegisterInfo() const {189  llvm_unreachable("Abstract class!");190  return nullptr;191}192 193uint32_t RegisterContextFreeBSD_powerpc::GetRegisterCount() const { return 0; }194 195RegisterContextFreeBSD_powerpc32::RegisterContextFreeBSD_powerpc32(196    const ArchSpec &target_arch)197    : RegisterContextFreeBSD_powerpc(target_arch) {}198 199RegisterContextFreeBSD_powerpc32::~RegisterContextFreeBSD_powerpc32() = default;200 201size_t RegisterContextFreeBSD_powerpc32::GetGPRSize() const {202  return sizeof(GPR32);203}204 205const RegisterInfo *RegisterContextFreeBSD_powerpc32::GetRegisterInfo() const {206  return g_register_infos_powerpc32;207}208 209uint32_t RegisterContextFreeBSD_powerpc32::GetRegisterCount() const {210  return static_cast<uint32_t>(sizeof(g_register_infos_powerpc32) /211                               sizeof(g_register_infos_powerpc32[0]));212}213 214RegisterContextFreeBSD_powerpc64::RegisterContextFreeBSD_powerpc64(215    const ArchSpec &target_arch)216    : RegisterContextFreeBSD_powerpc(target_arch) {}217 218RegisterContextFreeBSD_powerpc64::~RegisterContextFreeBSD_powerpc64() = default;219 220size_t RegisterContextFreeBSD_powerpc64::GetGPRSize() const {221  return sizeof(GPR64);222}223 224const RegisterInfo *RegisterContextFreeBSD_powerpc64::GetRegisterInfo() const {225  if (GetTargetArchitecture().GetMachine() == llvm::Triple::ppc)226    return g_register_infos_powerpc64_32;227  return g_register_infos_powerpc64;228}229 230uint32_t RegisterContextFreeBSD_powerpc64::GetRegisterCount() const {231  return static_cast<uint32_t>(sizeof(g_register_infos_powerpc64) /232                               sizeof(g_register_infos_powerpc64[0]));233}234