180814287SRaphael Isemann //===-- RegisterContextFreeBSD_powerpc.cpp --------------------------------===// 26256a0eaSJustin Hibbits // 32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information. 52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 66256a0eaSJustin Hibbits // 76256a0eaSJustin Hibbits //===---------------------------------------------------------------------===// 86256a0eaSJustin Hibbits 96256a0eaSJustin Hibbits #include "RegisterContextFreeBSD_powerpc.h" 10b9c1b51eSKate Stone #include "RegisterContextPOSIX_powerpc.h" 11b9c1b51eSKate Stone #include <vector> 126256a0eaSJustin Hibbits 136256a0eaSJustin Hibbits using namespace lldb_private; 146256a0eaSJustin Hibbits using namespace lldb; 156256a0eaSJustin Hibbits 166256a0eaSJustin Hibbits // http://svnweb.freebsd.org/base/head/sys/powerpc/include/reg.h 17b9c1b51eSKate Stone typedef struct _GPR64 { 186256a0eaSJustin Hibbits uint64_t r0; 196256a0eaSJustin Hibbits uint64_t r1; 206256a0eaSJustin Hibbits uint64_t r2; 216256a0eaSJustin Hibbits uint64_t r3; 226256a0eaSJustin Hibbits uint64_t r4; 236256a0eaSJustin Hibbits uint64_t r5; 246256a0eaSJustin Hibbits uint64_t r6; 256256a0eaSJustin Hibbits uint64_t r7; 266256a0eaSJustin Hibbits uint64_t r8; 276256a0eaSJustin Hibbits uint64_t r9; 286256a0eaSJustin Hibbits uint64_t r10; 296256a0eaSJustin Hibbits uint64_t r11; 306256a0eaSJustin Hibbits uint64_t r12; 316256a0eaSJustin Hibbits uint64_t r13; 326256a0eaSJustin Hibbits uint64_t r14; 336256a0eaSJustin Hibbits uint64_t r15; 346256a0eaSJustin Hibbits uint64_t r16; 356256a0eaSJustin Hibbits uint64_t r17; 366256a0eaSJustin Hibbits uint64_t r18; 376256a0eaSJustin Hibbits uint64_t r19; 386256a0eaSJustin Hibbits uint64_t r20; 396256a0eaSJustin Hibbits uint64_t r21; 406256a0eaSJustin Hibbits uint64_t r22; 416256a0eaSJustin Hibbits uint64_t r23; 426256a0eaSJustin Hibbits uint64_t r24; 436256a0eaSJustin Hibbits uint64_t r25; 446256a0eaSJustin Hibbits uint64_t r26; 456256a0eaSJustin Hibbits uint64_t r27; 466256a0eaSJustin Hibbits uint64_t r28; 476256a0eaSJustin Hibbits uint64_t r29; 486256a0eaSJustin Hibbits uint64_t r30; 496256a0eaSJustin Hibbits uint64_t r31; 506256a0eaSJustin Hibbits uint64_t lr; 516256a0eaSJustin Hibbits uint64_t cr; 526256a0eaSJustin Hibbits uint64_t xer; 536256a0eaSJustin Hibbits uint64_t ctr; 546256a0eaSJustin Hibbits uint64_t pc; 556256a0eaSJustin Hibbits } GPR64; 566256a0eaSJustin Hibbits 57b9c1b51eSKate Stone typedef struct _GPR32 { 586256a0eaSJustin Hibbits uint32_t r0; 596256a0eaSJustin Hibbits uint32_t r1; 606256a0eaSJustin Hibbits uint32_t r2; 616256a0eaSJustin Hibbits uint32_t r3; 626256a0eaSJustin Hibbits uint32_t r4; 636256a0eaSJustin Hibbits uint32_t r5; 646256a0eaSJustin Hibbits uint32_t r6; 656256a0eaSJustin Hibbits uint32_t r7; 666256a0eaSJustin Hibbits uint32_t r8; 676256a0eaSJustin Hibbits uint32_t r9; 686256a0eaSJustin Hibbits uint32_t r10; 696256a0eaSJustin Hibbits uint32_t r11; 706256a0eaSJustin Hibbits uint32_t r12; 716256a0eaSJustin Hibbits uint32_t r13; 726256a0eaSJustin Hibbits uint32_t r14; 736256a0eaSJustin Hibbits uint32_t r15; 746256a0eaSJustin Hibbits uint32_t r16; 756256a0eaSJustin Hibbits uint32_t r17; 766256a0eaSJustin Hibbits uint32_t r18; 776256a0eaSJustin Hibbits uint32_t r19; 786256a0eaSJustin Hibbits uint32_t r20; 796256a0eaSJustin Hibbits uint32_t r21; 806256a0eaSJustin Hibbits uint32_t r22; 816256a0eaSJustin Hibbits uint32_t r23; 826256a0eaSJustin Hibbits uint32_t r24; 836256a0eaSJustin Hibbits uint32_t r25; 846256a0eaSJustin Hibbits uint32_t r26; 856256a0eaSJustin Hibbits uint32_t r27; 866256a0eaSJustin Hibbits uint32_t r28; 876256a0eaSJustin Hibbits uint32_t r29; 886256a0eaSJustin Hibbits uint32_t r30; 896256a0eaSJustin Hibbits uint32_t r31; 906256a0eaSJustin Hibbits uint32_t lr; 916256a0eaSJustin Hibbits uint32_t cr; 926256a0eaSJustin Hibbits uint32_t xer; 936256a0eaSJustin Hibbits uint32_t ctr; 946256a0eaSJustin Hibbits uint32_t pc; 956256a0eaSJustin Hibbits } GPR32; 966256a0eaSJustin Hibbits 97b9c1b51eSKate Stone typedef struct _FPR { 986256a0eaSJustin Hibbits uint64_t f0; 996256a0eaSJustin Hibbits uint64_t f1; 1006256a0eaSJustin Hibbits uint64_t f2; 1016256a0eaSJustin Hibbits uint64_t f3; 1026256a0eaSJustin Hibbits uint64_t f4; 1036256a0eaSJustin Hibbits uint64_t f5; 1046256a0eaSJustin Hibbits uint64_t f6; 1056256a0eaSJustin Hibbits uint64_t f7; 1066256a0eaSJustin Hibbits uint64_t f8; 1076256a0eaSJustin Hibbits uint64_t f9; 1086256a0eaSJustin Hibbits uint64_t f10; 1096256a0eaSJustin Hibbits uint64_t f11; 1106256a0eaSJustin Hibbits uint64_t f12; 1116256a0eaSJustin Hibbits uint64_t f13; 1126256a0eaSJustin Hibbits uint64_t f14; 1136256a0eaSJustin Hibbits uint64_t f15; 1146256a0eaSJustin Hibbits uint64_t f16; 1156256a0eaSJustin Hibbits uint64_t f17; 1166256a0eaSJustin Hibbits uint64_t f18; 1176256a0eaSJustin Hibbits uint64_t f19; 1186256a0eaSJustin Hibbits uint64_t f20; 1196256a0eaSJustin Hibbits uint64_t f21; 1206256a0eaSJustin Hibbits uint64_t f22; 1216256a0eaSJustin Hibbits uint64_t f23; 1226256a0eaSJustin Hibbits uint64_t f24; 1236256a0eaSJustin Hibbits uint64_t f25; 1246256a0eaSJustin Hibbits uint64_t f26; 1256256a0eaSJustin Hibbits uint64_t f27; 1266256a0eaSJustin Hibbits uint64_t f28; 1276256a0eaSJustin Hibbits uint64_t f29; 1286256a0eaSJustin Hibbits uint64_t f30; 1296256a0eaSJustin Hibbits uint64_t f31; 1306256a0eaSJustin Hibbits uint64_t fpscr; 1316256a0eaSJustin Hibbits } FPR; 1326256a0eaSJustin Hibbits 133b9c1b51eSKate Stone typedef struct _VMX { 134f9ec0d1eSJustin Hibbits uint32_t v0[4]; 135f9ec0d1eSJustin Hibbits uint32_t v1[4]; 136f9ec0d1eSJustin Hibbits uint32_t v2[4]; 137f9ec0d1eSJustin Hibbits uint32_t v3[4]; 138f9ec0d1eSJustin Hibbits uint32_t v4[4]; 139f9ec0d1eSJustin Hibbits uint32_t v5[4]; 140f9ec0d1eSJustin Hibbits uint32_t v6[4]; 141f9ec0d1eSJustin Hibbits uint32_t v7[4]; 142f9ec0d1eSJustin Hibbits uint32_t v8[4]; 143f9ec0d1eSJustin Hibbits uint32_t v9[4]; 144f9ec0d1eSJustin Hibbits uint32_t v10[4]; 145f9ec0d1eSJustin Hibbits uint32_t v11[4]; 146f9ec0d1eSJustin Hibbits uint32_t v12[4]; 147f9ec0d1eSJustin Hibbits uint32_t v13[4]; 148f9ec0d1eSJustin Hibbits uint32_t v14[4]; 149f9ec0d1eSJustin Hibbits uint32_t v15[4]; 150f9ec0d1eSJustin Hibbits uint32_t v16[4]; 151f9ec0d1eSJustin Hibbits uint32_t v17[4]; 152f9ec0d1eSJustin Hibbits uint32_t v18[4]; 153f9ec0d1eSJustin Hibbits uint32_t v19[4]; 154f9ec0d1eSJustin Hibbits uint32_t v20[4]; 155f9ec0d1eSJustin Hibbits uint32_t v21[4]; 156f9ec0d1eSJustin Hibbits uint32_t v22[4]; 157f9ec0d1eSJustin Hibbits uint32_t v23[4]; 158f9ec0d1eSJustin Hibbits uint32_t v24[4]; 159f9ec0d1eSJustin Hibbits uint32_t v25[4]; 160f9ec0d1eSJustin Hibbits uint32_t v26[4]; 161f9ec0d1eSJustin Hibbits uint32_t v27[4]; 162f9ec0d1eSJustin Hibbits uint32_t v28[4]; 163f9ec0d1eSJustin Hibbits uint32_t v29[4]; 164f9ec0d1eSJustin Hibbits uint32_t v30[4]; 165f9ec0d1eSJustin Hibbits uint32_t v31[4]; 166f9ec0d1eSJustin Hibbits uint32_t pad[2]; 167f9ec0d1eSJustin Hibbits uint32_t vrsave; 168f9ec0d1eSJustin Hibbits uint32_t vscr; 169f9ec0d1eSJustin Hibbits } VMX; 170f9ec0d1eSJustin Hibbits 171b9c1b51eSKate Stone // Include RegisterInfos_powerpc to declare our g_register_infos_powerpc 172b9c1b51eSKate Stone // structure. 1736256a0eaSJustin Hibbits #define DECLARE_REGISTER_INFOS_POWERPC_STRUCT 1746256a0eaSJustin Hibbits #include "RegisterInfos_powerpc.h" 1756256a0eaSJustin Hibbits #undef DECLARE_REGISTER_INFOS_POWERPC_STRUCT 1766256a0eaSJustin Hibbits RegisterContextFreeBSD_powerpc(const ArchSpec & target_arch)177b9c1b51eSKate StoneRegisterContextFreeBSD_powerpc::RegisterContextFreeBSD_powerpc( 178b9c1b51eSKate Stone const ArchSpec &target_arch) 179b9c1b51eSKate Stone : RegisterInfoInterface(target_arch) {} 1806256a0eaSJustin Hibbits 181*fd2433e1SJonas Devlieghere RegisterContextFreeBSD_powerpc::~RegisterContextFreeBSD_powerpc() = default; 1826256a0eaSJustin Hibbits GetGPRSize() const183b9c1b51eSKate Stonesize_t RegisterContextFreeBSD_powerpc::GetGPRSize() const { 18489e6f385SJustin Hibbits // This is an 'abstract' base, so no GPR struct. 18589e6f385SJustin Hibbits return 0; 1866256a0eaSJustin Hibbits } 1876256a0eaSJustin Hibbits GetRegisterInfo() const188b9c1b51eSKate Stoneconst RegisterInfo *RegisterContextFreeBSD_powerpc::GetRegisterInfo() const { 1896256a0eaSJustin Hibbits // assert (m_target_arch.GetCore() == ArchSpec::eCore_powerpc); 1906256a0eaSJustin Hibbits llvm_unreachable("Abstract class!"); 191248a1305SKonrad Kleine return nullptr; 1926256a0eaSJustin Hibbits } 1936256a0eaSJustin Hibbits GetRegisterCount() const194b9c1b51eSKate Stoneuint32_t RegisterContextFreeBSD_powerpc::GetRegisterCount() const { return 0; } 1956256a0eaSJustin Hibbits RegisterContextFreeBSD_powerpc32(const ArchSpec & target_arch)196b9c1b51eSKate StoneRegisterContextFreeBSD_powerpc32::RegisterContextFreeBSD_powerpc32( 197b9c1b51eSKate Stone const ArchSpec &target_arch) 198b9c1b51eSKate Stone : RegisterContextFreeBSD_powerpc(target_arch) {} 1996256a0eaSJustin Hibbits 200*fd2433e1SJonas Devlieghere RegisterContextFreeBSD_powerpc32::~RegisterContextFreeBSD_powerpc32() = default; 2016256a0eaSJustin Hibbits GetGPRSize() const202b9c1b51eSKate Stonesize_t RegisterContextFreeBSD_powerpc32::GetGPRSize() const { 2036256a0eaSJustin Hibbits return sizeof(GPR32); 2046256a0eaSJustin Hibbits } 2056256a0eaSJustin Hibbits GetRegisterInfo() const206b9c1b51eSKate Stoneconst RegisterInfo *RegisterContextFreeBSD_powerpc32::GetRegisterInfo() const { 2076256a0eaSJustin Hibbits // assert (m_target_arch.GetCore() == ArchSpec::eCore_powerpc); 2086256a0eaSJustin Hibbits return g_register_infos_powerpc32; 2096256a0eaSJustin Hibbits } 2106256a0eaSJustin Hibbits GetRegisterCount() const211b9c1b51eSKate Stoneuint32_t RegisterContextFreeBSD_powerpc32::GetRegisterCount() const { 212b9c1b51eSKate Stone return static_cast<uint32_t>(sizeof(g_register_infos_powerpc32) / 213b9c1b51eSKate Stone sizeof(g_register_infos_powerpc32[0])); 2146256a0eaSJustin Hibbits } 2156256a0eaSJustin Hibbits RegisterContextFreeBSD_powerpc64(const ArchSpec & target_arch)216b9c1b51eSKate StoneRegisterContextFreeBSD_powerpc64::RegisterContextFreeBSD_powerpc64( 217b9c1b51eSKate Stone const ArchSpec &target_arch) 218b9c1b51eSKate Stone : RegisterContextFreeBSD_powerpc(target_arch) {} 2196256a0eaSJustin Hibbits 220*fd2433e1SJonas Devlieghere RegisterContextFreeBSD_powerpc64::~RegisterContextFreeBSD_powerpc64() = default; 2216256a0eaSJustin Hibbits GetGPRSize() const222b9c1b51eSKate Stonesize_t RegisterContextFreeBSD_powerpc64::GetGPRSize() const { 2236256a0eaSJustin Hibbits return sizeof(GPR64); 2246256a0eaSJustin Hibbits } 2256256a0eaSJustin Hibbits GetRegisterInfo() const226b9c1b51eSKate Stoneconst RegisterInfo *RegisterContextFreeBSD_powerpc64::GetRegisterInfo() const { 2276256a0eaSJustin Hibbits // assert (m_target_arch.GetCore() == ArchSpec::eCore_powerpc); 22889e6f385SJustin Hibbits if (m_target_arch.GetMachine() == llvm::Triple::ppc) 22989e6f385SJustin Hibbits return g_register_infos_powerpc64_32; 2306256a0eaSJustin Hibbits return g_register_infos_powerpc64; 2316256a0eaSJustin Hibbits } 2326256a0eaSJustin Hibbits GetRegisterCount() const233b9c1b51eSKate Stoneuint32_t RegisterContextFreeBSD_powerpc64::GetRegisterCount() const { 234b9c1b51eSKate Stone return static_cast<uint32_t>(sizeof(g_register_infos_powerpc64) / 235b9c1b51eSKate Stone sizeof(g_register_infos_powerpc64[0])); 2366256a0eaSJustin Hibbits } 237