1 //===-- RegisterInfos_ppc64le.h ---------------------------------*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 #ifdef DECLARE_REGISTER_INFOS_PPC64LE_STRUCT 11 12 // C Includes 13 #include <stddef.h> 14 15 // Computes the offset of the given GPR in the user data area. 16 #define GPR_OFFSET(regname) (offsetof(GPR, regname)) 17 #define GPR_SIZE(regname) (sizeof(((GPR *)NULL)->regname)) 18 19 #include "Utility/PPC64LE_DWARF_Registers.h" 20 #include "lldb-ppc64le-register-enums.h" 21 22 // Note that the size and offset will be updated by platform-specific classes. 23 #define DEFINE_GPR(reg, alt, lldb_kind) \ 24 { \ 25 #reg, alt, GPR_SIZE(reg), GPR_OFFSET(reg), lldb::eEncodingUint, \ 26 lldb::eFormatHex, \ 27 {ppc64le_dwarf::dwarf_##reg##_ppc64le,\ 28 ppc64le_dwarf::dwarf_##reg##_ppc64le,\ 29 lldb_kind, \ 30 LLDB_INVALID_REGNUM, \ 31 gpr_##reg##_ppc64le }, \ 32 NULL, NULL, NULL, 0 \ 33 } 34 35 // General purpose registers. 36 // EH_Frame, Generic, Process Plugin 37 #define POWERPC_REGS \ 38 DEFINE_GPR(r0, NULL, LLDB_INVALID_REGNUM) \ 39 , DEFINE_GPR(r1, "sp", LLDB_REGNUM_GENERIC_SP), \ 40 DEFINE_GPR(r2, NULL, LLDB_INVALID_REGNUM), \ 41 DEFINE_GPR(r3, "arg1", LLDB_REGNUM_GENERIC_ARG1), \ 42 DEFINE_GPR(r4, "arg2", LLDB_REGNUM_GENERIC_ARG2), \ 43 DEFINE_GPR(r5, "arg3", LLDB_REGNUM_GENERIC_ARG3), \ 44 DEFINE_GPR(r6, "arg4", LLDB_REGNUM_GENERIC_ARG4), \ 45 DEFINE_GPR(r7, "arg5", LLDB_REGNUM_GENERIC_ARG5), \ 46 DEFINE_GPR(r8, "arg6", LLDB_REGNUM_GENERIC_ARG6), \ 47 DEFINE_GPR(r9, "arg7", LLDB_REGNUM_GENERIC_ARG7), \ 48 DEFINE_GPR(r10, "arg8", LLDB_REGNUM_GENERIC_ARG8), \ 49 DEFINE_GPR(r11, NULL, LLDB_INVALID_REGNUM), \ 50 DEFINE_GPR(r12, NULL, LLDB_INVALID_REGNUM), \ 51 DEFINE_GPR(r13, NULL, LLDB_INVALID_REGNUM), \ 52 DEFINE_GPR(r14, NULL, LLDB_INVALID_REGNUM), \ 53 DEFINE_GPR(r15, NULL, LLDB_INVALID_REGNUM), \ 54 DEFINE_GPR(r16, NULL, LLDB_INVALID_REGNUM), \ 55 DEFINE_GPR(r17, NULL, LLDB_INVALID_REGNUM), \ 56 DEFINE_GPR(r18, NULL, LLDB_INVALID_REGNUM), \ 57 DEFINE_GPR(r19, NULL, LLDB_INVALID_REGNUM), \ 58 DEFINE_GPR(r20, NULL, LLDB_INVALID_REGNUM), \ 59 DEFINE_GPR(r21, NULL, LLDB_INVALID_REGNUM), \ 60 DEFINE_GPR(r22, NULL, LLDB_INVALID_REGNUM), \ 61 DEFINE_GPR(r23, NULL, LLDB_INVALID_REGNUM), \ 62 DEFINE_GPR(r24, NULL, LLDB_INVALID_REGNUM), \ 63 DEFINE_GPR(r25, NULL, LLDB_INVALID_REGNUM), \ 64 DEFINE_GPR(r26, NULL, LLDB_INVALID_REGNUM), \ 65 DEFINE_GPR(r27, NULL, LLDB_INVALID_REGNUM), \ 66 DEFINE_GPR(r28, NULL, LLDB_INVALID_REGNUM), \ 67 DEFINE_GPR(r29, NULL, LLDB_INVALID_REGNUM), \ 68 DEFINE_GPR(r30, NULL, LLDB_INVALID_REGNUM), \ 69 DEFINE_GPR(r31, NULL, LLDB_INVALID_REGNUM), \ 70 DEFINE_GPR(pc, "pc", LLDB_REGNUM_GENERIC_PC), \ 71 DEFINE_GPR(lr, "lr", LLDB_REGNUM_GENERIC_RA), \ 72 DEFINE_GPR(msr, "msr", LLDB_INVALID_REGNUM), \ 73 DEFINE_GPR(origr3, "orig_r3", LLDB_INVALID_REGNUM), \ 74 DEFINE_GPR(ctr, "ctr", LLDB_INVALID_REGNUM), \ 75 DEFINE_GPR(xer, "xer", LLDB_INVALID_REGNUM), \ 76 DEFINE_GPR(cr, "cr", LLDB_REGNUM_GENERIC_FLAGS), \ 77 DEFINE_GPR(softe, "softe", LLDB_INVALID_REGNUM), \ 78 DEFINE_GPR(trap, "trap", LLDB_INVALID_REGNUM), \ 79 /* */ 80 81 typedef struct _GPR { 82 uint64_t r0; 83 uint64_t r1; 84 uint64_t r2; 85 uint64_t r3; 86 uint64_t r4; 87 uint64_t r5; 88 uint64_t r6; 89 uint64_t r7; 90 uint64_t r8; 91 uint64_t r9; 92 uint64_t r10; 93 uint64_t r11; 94 uint64_t r12; 95 uint64_t r13; 96 uint64_t r14; 97 uint64_t r15; 98 uint64_t r16; 99 uint64_t r17; 100 uint64_t r18; 101 uint64_t r19; 102 uint64_t r20; 103 uint64_t r21; 104 uint64_t r22; 105 uint64_t r23; 106 uint64_t r24; 107 uint64_t r25; 108 uint64_t r26; 109 uint64_t r27; 110 uint64_t r28; 111 uint64_t r29; 112 uint64_t r30; 113 uint64_t r31; 114 uint64_t pc; 115 uint64_t msr; 116 uint64_t origr3; 117 uint64_t ctr; 118 uint64_t lr; 119 uint64_t xer; 120 uint64_t cr; 121 uint64_t softe; 122 uint64_t trap; 123 uint64_t pad[4]; 124 } GPR; 125 126 static lldb_private::RegisterInfo g_register_infos_ppc64le[] = { 127 POWERPC_REGS 128 }; 129 130 static_assert((sizeof(g_register_infos_ppc64le) / 131 sizeof(g_register_infos_ppc64le[0])) == 132 k_num_registers_ppc64le, 133 "g_register_infos_powerpc64 has wrong number of register infos"); 134 135 #undef DEFINE_GPR 136 137 #endif // DECLARE_REGISTER_INFOS_PPC64LE_STRUCT 138