| //===-- RegisterContextFreeBSD_powerpc.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 "RegisterContextFreeBSD_powerpc.h" | |
| #include "RegisterContextPOSIX_powerpc.h" | |
| #include <vector> | |
| using namespace lldb_private; | |
| using namespace lldb; | |
| // https://cgit.freebsd.org/src/tree/sys/powerpc/include/reg.h | |
| typedef struct _GPR64 { | |
| uint64_t r0; | |
| uint64_t r1; | |
| uint64_t r2; | |
| uint64_t r3; | |
| uint64_t r4; | |
| uint64_t r5; | |
| uint64_t r6; | |
| uint64_t r7; | |
| uint64_t r8; | |
| uint64_t r9; | |
| uint64_t r10; | |
| uint64_t r11; | |
| uint64_t r12; | |
| uint64_t r13; | |
| uint64_t r14; | |
| uint64_t r15; | |
| uint64_t r16; | |
| uint64_t r17; | |
| uint64_t r18; | |
| uint64_t r19; | |
| uint64_t r20; | |
| uint64_t r21; | |
| uint64_t r22; | |
| uint64_t r23; | |
| uint64_t r24; | |
| uint64_t r25; | |
| uint64_t r26; | |
| uint64_t r27; | |
| uint64_t r28; | |
| uint64_t r29; | |
| uint64_t r30; | |
| uint64_t r31; | |
| uint64_t lr; | |
| uint64_t cr; | |
| uint64_t xer; | |
| uint64_t ctr; | |
| uint64_t pc; | |
| } GPR64; | |
| typedef struct _GPR32 { | |
| uint32_t r0; | |
| uint32_t r1; | |
| uint32_t r2; | |
| uint32_t r3; | |
| uint32_t r4; | |
| uint32_t r5; | |
| uint32_t r6; | |
| uint32_t r7; | |
| uint32_t r8; | |
| uint32_t r9; | |
| uint32_t r10; | |
| uint32_t r11; | |
| uint32_t r12; | |
| uint32_t r13; | |
| uint32_t r14; | |
| uint32_t r15; | |
| uint32_t r16; | |
| uint32_t r17; | |
| uint32_t r18; | |
| uint32_t r19; | |
| uint32_t r20; | |
| uint32_t r21; | |
| uint32_t r22; | |
| uint32_t r23; | |
| uint32_t r24; | |
| uint32_t r25; | |
| uint32_t r26; | |
| uint32_t r27; | |
| uint32_t r28; | |
| uint32_t r29; | |
| uint32_t r30; | |
| uint32_t r31; | |
| uint32_t lr; | |
| uint32_t cr; | |
| uint32_t xer; | |
| uint32_t ctr; | |
| uint32_t pc; | |
| } GPR32; | |
| typedef struct _FPR { | |
| uint64_t f0; | |
| uint64_t f1; | |
| uint64_t f2; | |
| uint64_t f3; | |
| uint64_t f4; | |
| uint64_t f5; | |
| uint64_t f6; | |
| uint64_t f7; | |
| uint64_t f8; | |
| uint64_t f9; | |
| uint64_t f10; | |
| uint64_t f11; | |
| uint64_t f12; | |
| uint64_t f13; | |
| uint64_t f14; | |
| uint64_t f15; | |
| uint64_t f16; | |
| uint64_t f17; | |
| uint64_t f18; | |
| uint64_t f19; | |
| uint64_t f20; | |
| uint64_t f21; | |
| uint64_t f22; | |
| uint64_t f23; | |
| uint64_t f24; | |
| uint64_t f25; | |
| uint64_t f26; | |
| uint64_t f27; | |
| uint64_t f28; | |
| uint64_t f29; | |
| uint64_t f30; | |
| uint64_t f31; | |
| uint64_t fpscr; | |
| } FPR; | |
| typedef struct _VMX { | |
| uint32_t v0[4]; | |
| uint32_t v1[4]; | |
| uint32_t v2[4]; | |
| uint32_t v3[4]; | |
| uint32_t v4[4]; | |
| uint32_t v5[4]; | |
| uint32_t v6[4]; | |
| uint32_t v7[4]; | |
| uint32_t v8[4]; | |
| uint32_t v9[4]; | |
| uint32_t v10[4]; | |
| uint32_t v11[4]; | |
| uint32_t v12[4]; | |
| uint32_t v13[4]; | |
| uint32_t v14[4]; | |
| uint32_t v15[4]; | |
| uint32_t v16[4]; | |
| uint32_t v17[4]; | |
| uint32_t v18[4]; | |
| uint32_t v19[4]; | |
| uint32_t v20[4]; | |
| uint32_t v21[4]; | |
| uint32_t v22[4]; | |
| uint32_t v23[4]; | |
| uint32_t v24[4]; | |
| uint32_t v25[4]; | |
| uint32_t v26[4]; | |
| uint32_t v27[4]; | |
| uint32_t v28[4]; | |
| uint32_t v29[4]; | |
| uint32_t v30[4]; | |
| uint32_t v31[4]; | |
| uint32_t pad[2]; | |
| uint32_t vrsave; | |
| uint32_t vscr; | |
| } VMX; | |
| // Include RegisterInfos_powerpc to declare our g_register_infos_powerpc | |
| // structure. | |
| #define DECLARE_REGISTER_INFOS_POWERPC_STRUCT | |
| #include "RegisterInfos_powerpc.h" | |
| #undef DECLARE_REGISTER_INFOS_POWERPC_STRUCT | |
| RegisterContextFreeBSD_powerpc::RegisterContextFreeBSD_powerpc( | |
| const ArchSpec &target_arch) | |
| : RegisterInfoInterface(target_arch) {} | |
| RegisterContextFreeBSD_powerpc::~RegisterContextFreeBSD_powerpc() = default; | |
| size_t RegisterContextFreeBSD_powerpc::GetGPRSize() const { | |
| // This is an 'abstract' base, so no GPR struct. | |
| return 0; | |
| } | |
| const RegisterInfo *RegisterContextFreeBSD_powerpc::GetRegisterInfo() const { | |
| llvm_unreachable("Abstract class!"); | |
| return nullptr; | |
| } | |
| uint32_t RegisterContextFreeBSD_powerpc::GetRegisterCount() const { return 0; } | |
| RegisterContextFreeBSD_powerpc32::RegisterContextFreeBSD_powerpc32( | |
| const ArchSpec &target_arch) | |
| : RegisterContextFreeBSD_powerpc(target_arch) {} | |
| RegisterContextFreeBSD_powerpc32::~RegisterContextFreeBSD_powerpc32() = default; | |
| size_t RegisterContextFreeBSD_powerpc32::GetGPRSize() const { | |
| return sizeof(GPR32); | |
| } | |
| const RegisterInfo *RegisterContextFreeBSD_powerpc32::GetRegisterInfo() const { | |
| return g_register_infos_powerpc32; | |
| } | |
| uint32_t RegisterContextFreeBSD_powerpc32::GetRegisterCount() const { | |
| return static_cast<uint32_t>(sizeof(g_register_infos_powerpc32) / | |
| sizeof(g_register_infos_powerpc32[0])); | |
| } | |
| RegisterContextFreeBSD_powerpc64::RegisterContextFreeBSD_powerpc64( | |
| const ArchSpec &target_arch) | |
| : RegisterContextFreeBSD_powerpc(target_arch) {} | |
| RegisterContextFreeBSD_powerpc64::~RegisterContextFreeBSD_powerpc64() = default; | |
| size_t RegisterContextFreeBSD_powerpc64::GetGPRSize() const { | |
| return sizeof(GPR64); | |
| } | |
| const RegisterInfo *RegisterContextFreeBSD_powerpc64::GetRegisterInfo() const { | |
| if (GetTargetArchitecture().GetMachine() == llvm::Triple::ppc) | |
| return g_register_infos_powerpc64_32; | |
| return g_register_infos_powerpc64; | |
| } | |
| uint32_t RegisterContextFreeBSD_powerpc64::GetRegisterCount() const { | |
| return static_cast<uint32_t>(sizeof(g_register_infos_powerpc64) / | |
| sizeof(g_register_infos_powerpc64[0])); | |
| } |