brintos

brintos / llvm-project-archived public Read only

0
0
Text · 16.6 KiB · e15e1d5 Raw
330 lines · c
1//===-- RegisterInfos_ppc64.h -----------------------------------*- C++ -*-===//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#ifdef DECLARE_REGISTER_INFOS_PPC64_STRUCT10 11#include <cstddef>12 13// Computes the offset of the given GPR_PPC64 in the user data area.14#define GPR_PPC64_OFFSET(regname) (offsetof(GPR_PPC64, regname))15#define FPR_PPC64_OFFSET(regname) (offsetof(FPR_PPC64, regname)                \16                                   + sizeof(GPR_PPC64))17#define VMX_PPC64_OFFSET(regname) (offsetof(VMX_PPC64, regname)                \18                                   + sizeof(GPR_PPC64) + sizeof(FPR_PPC64))19#define GPR_PPC64_SIZE(regname) (sizeof(((GPR_PPC64 *)NULL)->regname))20 21#include "Utility/PPC64_DWARF_Registers.h"22#include "lldb-ppc64-register-enums.h"23 24// Note that the size and offset will be updated by platform-specific classes.25#define DEFINE_GPR_PPC64(reg, alt, lldb_kind)                                  \26  {                                                                            \27    #reg, alt, GPR_PPC64_SIZE(reg), GPR_PPC64_OFFSET(reg), lldb::eEncodingUint,\28                                         lldb::eFormatHex,                     \29                                         {ppc64_dwarf::dwarf_##reg##_ppc64,    \30                                          ppc64_dwarf::dwarf_##reg##_ppc64,    \31                                          lldb_kind,                           \32                                          LLDB_INVALID_REGNUM,                 \33                                          gpr_##reg##_ppc64 },                 \34                                          NULL, NULL, NULL,                    \35  }36#define DEFINE_FPR_PPC64(reg, alt, lldb_kind)                                  \37  {                                                                            \38#reg, alt, 8, FPR_PPC64_OFFSET(reg), lldb::eEncodingIEEE754,                   \39        lldb::eFormatFloat,                                                    \40        {ppc64_dwarf::dwarf_##reg##_ppc64,                                     \41         ppc64_dwarf::dwarf_##reg##_ppc64, lldb_kind, LLDB_INVALID_REGNUM,     \42         fpr_##reg##_ppc64 },                                                  \43         NULL, NULL, NULL,                                                     \44  }45#define DEFINE_VMX_PPC64(reg, lldb_kind)                                       \46  {                                                                            \47#reg, NULL, 16, VMX_PPC64_OFFSET(reg), lldb::eEncodingVector,                  \48        lldb::eFormatVectorOfUInt32,                                           \49        {ppc64_dwarf::dwarf_##reg##_ppc64,                                     \50         ppc64_dwarf::dwarf_##reg##_ppc64, lldb_kind, LLDB_INVALID_REGNUM,     \51         vmx_##reg##_ppc64 },                                                  \52         NULL, NULL, NULL,                                                     \53  }54 55// General purpose registers.56// EH_Frame, Generic, Process Plugin57#define PPC64_REGS                                                             \58  DEFINE_GPR_PPC64(r0, NULL, LLDB_INVALID_REGNUM)                              \59  , DEFINE_GPR_PPC64(r1, NULL, LLDB_REGNUM_GENERIC_SP),                        \60      DEFINE_GPR_PPC64(r2, NULL, LLDB_INVALID_REGNUM),                         \61      DEFINE_GPR_PPC64(r3, NULL, LLDB_REGNUM_GENERIC_ARG1),                    \62      DEFINE_GPR_PPC64(r4, NULL, LLDB_REGNUM_GENERIC_ARG2),                    \63      DEFINE_GPR_PPC64(r5, NULL, LLDB_REGNUM_GENERIC_ARG3),                    \64      DEFINE_GPR_PPC64(r6, NULL, LLDB_REGNUM_GENERIC_ARG4),                    \65      DEFINE_GPR_PPC64(r7, NULL, LLDB_REGNUM_GENERIC_ARG5),                    \66      DEFINE_GPR_PPC64(r8, NULL, LLDB_REGNUM_GENERIC_ARG6),                    \67      DEFINE_GPR_PPC64(r9, NULL, LLDB_REGNUM_GENERIC_ARG7),                    \68      DEFINE_GPR_PPC64(r10, NULL, LLDB_REGNUM_GENERIC_ARG8),                   \69      DEFINE_GPR_PPC64(r11, NULL, LLDB_INVALID_REGNUM),                        \70      DEFINE_GPR_PPC64(r12, NULL, LLDB_INVALID_REGNUM),                        \71      DEFINE_GPR_PPC64(r13, NULL, LLDB_INVALID_REGNUM),                        \72      DEFINE_GPR_PPC64(r14, NULL, LLDB_INVALID_REGNUM),                        \73      DEFINE_GPR_PPC64(r15, NULL, LLDB_INVALID_REGNUM),                        \74      DEFINE_GPR_PPC64(r16, NULL, LLDB_INVALID_REGNUM),                        \75      DEFINE_GPR_PPC64(r17, NULL, LLDB_INVALID_REGNUM),                        \76      DEFINE_GPR_PPC64(r18, NULL, LLDB_INVALID_REGNUM),                        \77      DEFINE_GPR_PPC64(r19, NULL, LLDB_INVALID_REGNUM),                        \78      DEFINE_GPR_PPC64(r20, NULL, LLDB_INVALID_REGNUM),                        \79      DEFINE_GPR_PPC64(r21, NULL, LLDB_INVALID_REGNUM),                        \80      DEFINE_GPR_PPC64(r22, NULL, LLDB_INVALID_REGNUM),                        \81      DEFINE_GPR_PPC64(r23, NULL, LLDB_INVALID_REGNUM),                        \82      DEFINE_GPR_PPC64(r24, NULL, LLDB_INVALID_REGNUM),                        \83      DEFINE_GPR_PPC64(r25, NULL, LLDB_INVALID_REGNUM),                        \84      DEFINE_GPR_PPC64(r26, NULL, LLDB_INVALID_REGNUM),                        \85      DEFINE_GPR_PPC64(r27, NULL, LLDB_INVALID_REGNUM),                        \86      DEFINE_GPR_PPC64(r28, NULL, LLDB_INVALID_REGNUM),                        \87      DEFINE_GPR_PPC64(r29, NULL, LLDB_INVALID_REGNUM),                        \88      DEFINE_GPR_PPC64(r30, NULL, LLDB_INVALID_REGNUM),                        \89      DEFINE_GPR_PPC64(r31, NULL, LLDB_INVALID_REGNUM),                        \90      DEFINE_GPR_PPC64(cr, NULL, LLDB_REGNUM_GENERIC_FLAGS),                   \91      DEFINE_GPR_PPC64(msr, NULL, LLDB_INVALID_REGNUM),                        \92      DEFINE_GPR_PPC64(xer, NULL, LLDB_INVALID_REGNUM),                        \93      DEFINE_GPR_PPC64(lr, NULL, LLDB_REGNUM_GENERIC_RA),                      \94      DEFINE_GPR_PPC64(ctr, NULL, LLDB_INVALID_REGNUM),                        \95      DEFINE_GPR_PPC64(pc, NULL, LLDB_REGNUM_GENERIC_PC),                      \96      DEFINE_FPR_PPC64(f0, NULL, LLDB_INVALID_REGNUM),                         \97      DEFINE_FPR_PPC64(f1, NULL, LLDB_INVALID_REGNUM),                         \98      DEFINE_FPR_PPC64(f2, NULL, LLDB_INVALID_REGNUM),                         \99      DEFINE_FPR_PPC64(f3, NULL, LLDB_INVALID_REGNUM),                         \100      DEFINE_FPR_PPC64(f4, NULL, LLDB_INVALID_REGNUM),                         \101      DEFINE_FPR_PPC64(f5, NULL, LLDB_INVALID_REGNUM),                         \102      DEFINE_FPR_PPC64(f6, NULL, LLDB_INVALID_REGNUM),                         \103      DEFINE_FPR_PPC64(f7, NULL, LLDB_INVALID_REGNUM),                         \104      DEFINE_FPR_PPC64(f8, NULL, LLDB_INVALID_REGNUM),                         \105      DEFINE_FPR_PPC64(f9, NULL, LLDB_INVALID_REGNUM),                         \106      DEFINE_FPR_PPC64(f10, NULL, LLDB_INVALID_REGNUM),                        \107      DEFINE_FPR_PPC64(f11, NULL, LLDB_INVALID_REGNUM),                        \108      DEFINE_FPR_PPC64(f12, NULL, LLDB_INVALID_REGNUM),                        \109      DEFINE_FPR_PPC64(f13, NULL, LLDB_INVALID_REGNUM),                        \110      DEFINE_FPR_PPC64(f14, NULL, LLDB_INVALID_REGNUM),                        \111      DEFINE_FPR_PPC64(f15, NULL, LLDB_INVALID_REGNUM),                        \112      DEFINE_FPR_PPC64(f16, NULL, LLDB_INVALID_REGNUM),                        \113      DEFINE_FPR_PPC64(f17, NULL, LLDB_INVALID_REGNUM),                        \114      DEFINE_FPR_PPC64(f18, NULL, LLDB_INVALID_REGNUM),                        \115      DEFINE_FPR_PPC64(f19, NULL, LLDB_INVALID_REGNUM),                        \116      DEFINE_FPR_PPC64(f20, NULL, LLDB_INVALID_REGNUM),                        \117      DEFINE_FPR_PPC64(f21, NULL, LLDB_INVALID_REGNUM),                        \118      DEFINE_FPR_PPC64(f22, NULL, LLDB_INVALID_REGNUM),                        \119      DEFINE_FPR_PPC64(f23, NULL, LLDB_INVALID_REGNUM),                        \120      DEFINE_FPR_PPC64(f24, NULL, LLDB_INVALID_REGNUM),                        \121      DEFINE_FPR_PPC64(f25, NULL, LLDB_INVALID_REGNUM),                        \122      DEFINE_FPR_PPC64(f26, NULL, LLDB_INVALID_REGNUM),                        \123      DEFINE_FPR_PPC64(f27, NULL, LLDB_INVALID_REGNUM),                        \124      DEFINE_FPR_PPC64(f28, NULL, LLDB_INVALID_REGNUM),                        \125      DEFINE_FPR_PPC64(f29, NULL, LLDB_INVALID_REGNUM),                        \126      DEFINE_FPR_PPC64(f30, NULL, LLDB_INVALID_REGNUM),                        \127      DEFINE_FPR_PPC64(f31, NULL, LLDB_INVALID_REGNUM),                        \128      {"fpscr",                                                                \129       NULL,                                                                   \130       8,                                                                      \131       FPR_PPC64_OFFSET(fpscr),                                                \132       lldb::eEncodingUint,                                                    \133       lldb::eFormatHex,                                                       \134       {ppc64_dwarf::dwarf_fpscr_ppc64,                                        \135        ppc64_dwarf::dwarf_fpscr_ppc64, LLDB_INVALID_REGNUM,                   \136        LLDB_INVALID_REGNUM, fpr_fpscr_ppc64},                                 \137       NULL,                                                                   \138       NULL,                                                                   \139       NULL,                                                                   \140       },                                                                      \141      DEFINE_VMX_PPC64(vr0, LLDB_INVALID_REGNUM),                              \142      DEFINE_VMX_PPC64(vr1, LLDB_INVALID_REGNUM),                              \143      DEFINE_VMX_PPC64(vr2, LLDB_INVALID_REGNUM),                              \144      DEFINE_VMX_PPC64(vr3, LLDB_INVALID_REGNUM),                              \145      DEFINE_VMX_PPC64(vr4, LLDB_INVALID_REGNUM),                              \146      DEFINE_VMX_PPC64(vr5, LLDB_INVALID_REGNUM),                              \147      DEFINE_VMX_PPC64(vr6, LLDB_INVALID_REGNUM),                              \148      DEFINE_VMX_PPC64(vr7, LLDB_INVALID_REGNUM),                              \149      DEFINE_VMX_PPC64(vr8, LLDB_INVALID_REGNUM),                              \150      DEFINE_VMX_PPC64(vr9, LLDB_INVALID_REGNUM),                              \151      DEFINE_VMX_PPC64(vr10, LLDB_INVALID_REGNUM),                             \152      DEFINE_VMX_PPC64(vr11, LLDB_INVALID_REGNUM),                             \153      DEFINE_VMX_PPC64(vr12, LLDB_INVALID_REGNUM),                             \154      DEFINE_VMX_PPC64(vr13, LLDB_INVALID_REGNUM),                             \155      DEFINE_VMX_PPC64(vr14, LLDB_INVALID_REGNUM),                             \156      DEFINE_VMX_PPC64(vr15, LLDB_INVALID_REGNUM),                             \157      DEFINE_VMX_PPC64(vr16, LLDB_INVALID_REGNUM),                             \158      DEFINE_VMX_PPC64(vr17, LLDB_INVALID_REGNUM),                             \159      DEFINE_VMX_PPC64(vr18, LLDB_INVALID_REGNUM),                             \160      DEFINE_VMX_PPC64(vr19, LLDB_INVALID_REGNUM),                             \161      DEFINE_VMX_PPC64(vr20, LLDB_INVALID_REGNUM),                             \162      DEFINE_VMX_PPC64(vr21, LLDB_INVALID_REGNUM),                             \163      DEFINE_VMX_PPC64(vr22, LLDB_INVALID_REGNUM),                             \164      DEFINE_VMX_PPC64(vr23, LLDB_INVALID_REGNUM),                             \165      DEFINE_VMX_PPC64(vr24, LLDB_INVALID_REGNUM),                             \166      DEFINE_VMX_PPC64(vr25, LLDB_INVALID_REGNUM),                             \167      DEFINE_VMX_PPC64(vr26, LLDB_INVALID_REGNUM),                             \168      DEFINE_VMX_PPC64(vr27, LLDB_INVALID_REGNUM),                             \169      DEFINE_VMX_PPC64(vr28, LLDB_INVALID_REGNUM),                             \170      DEFINE_VMX_PPC64(vr29, LLDB_INVALID_REGNUM),                             \171      DEFINE_VMX_PPC64(vr30, LLDB_INVALID_REGNUM),                             \172      DEFINE_VMX_PPC64(vr31, LLDB_INVALID_REGNUM),                             \173      {"vscr",                                                                 \174       NULL,                                                                   \175       4,                                                                      \176       VMX_PPC64_OFFSET(vscr),                                                 \177       lldb::eEncodingUint,                                                    \178       lldb::eFormatHex,                                                       \179       {ppc64_dwarf::dwarf_vscr_ppc64, ppc64_dwarf::dwarf_vscr_ppc64,          \180        LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, vmx_vscr_ppc64},             \181       NULL,                                                                   \182       NULL,                                                                   \183       NULL,                                                                   \184       },                                                                      \185      {"vrsave",                                                               \186       NULL,                                                                   \187       4,                                                                      \188       VMX_PPC64_OFFSET(vrsave),                                               \189       lldb::eEncodingUint,                                                    \190       lldb::eFormatHex,                                                       \191       {ppc64_dwarf::dwarf_vrsave_ppc64,                                       \192        ppc64_dwarf::dwarf_vrsave_ppc64, LLDB_INVALID_REGNUM,                  \193        LLDB_INVALID_REGNUM, vmx_vrsave_ppc64},                                \194       NULL,                                                                   \195       NULL,                                                                   \196       NULL,                                                                   \197       },  /* */198 199typedef struct _GPR_PPC64 {200  uint64_t r0;201  uint64_t r1;202  uint64_t r2;203  uint64_t r3;204  uint64_t r4;205  uint64_t r5;206  uint64_t r6;207  uint64_t r7;208  uint64_t r8;209  uint64_t r9;210  uint64_t r10;211  uint64_t r11;212  uint64_t r12;213  uint64_t r13;214  uint64_t r14;215  uint64_t r15;216  uint64_t r16;217  uint64_t r17;218  uint64_t r18;219  uint64_t r19;220  uint64_t r20;221  uint64_t r21;222  uint64_t r22;223  uint64_t r23;224  uint64_t r24;225  uint64_t r25;226  uint64_t r26;227  uint64_t r27;228  uint64_t r28;229  uint64_t r29;230  uint64_t r30;231  uint64_t r31;232  uint64_t cr;233  uint64_t msr;234  uint64_t xer;235  uint64_t lr;236  uint64_t ctr;237  uint64_t pc;238  uint64_t pad[3];239} GPR_PPC64;240 241typedef struct _FPR_PPC64 {242  uint64_t f0;243  uint64_t f1;244  uint64_t f2;245  uint64_t f3;246  uint64_t f4;247  uint64_t f5;248  uint64_t f6;249  uint64_t f7;250  uint64_t f8;251  uint64_t f9;252  uint64_t f10;253  uint64_t f11;254  uint64_t f12;255  uint64_t f13;256  uint64_t f14;257  uint64_t f15;258  uint64_t f16;259  uint64_t f17;260  uint64_t f18;261  uint64_t f19;262  uint64_t f20;263  uint64_t f21;264  uint64_t f22;265  uint64_t f23;266  uint64_t f24;267  uint64_t f25;268  uint64_t f26;269  uint64_t f27;270  uint64_t f28;271  uint64_t f29;272  uint64_t f30;273  uint64_t f31;274  uint64_t fpscr;275} FPR_PPC64;276 277typedef struct _VMX_PPC64 {278  uint32_t vr0[4];279  uint32_t vr1[4];280  uint32_t vr2[4];281  uint32_t vr3[4];282  uint32_t vr4[4];283  uint32_t vr5[4];284  uint32_t vr6[4];285  uint32_t vr7[4];286  uint32_t vr8[4];287  uint32_t vr9[4];288  uint32_t vr10[4];289  uint32_t vr11[4];290  uint32_t vr12[4];291  uint32_t vr13[4];292  uint32_t vr14[4];293  uint32_t vr15[4];294  uint32_t vr16[4];295  uint32_t vr17[4];296  uint32_t vr18[4];297  uint32_t vr19[4];298  uint32_t vr20[4];299  uint32_t vr21[4];300  uint32_t vr22[4];301  uint32_t vr23[4];302  uint32_t vr24[4];303  uint32_t vr25[4];304  uint32_t vr26[4];305  uint32_t vr27[4];306  uint32_t vr28[4];307  uint32_t vr29[4];308  uint32_t vr30[4];309  uint32_t vr31[4];310  uint32_t pad[2];311  uint32_t vscr[2];312  uint32_t vrsave;313} VMX_PPC64;314 315 316static lldb_private::RegisterInfo g_register_infos_ppc64[] = {317    PPC64_REGS318};319 320static_assert((sizeof(g_register_infos_ppc64) /321               sizeof(g_register_infos_ppc64[0])) ==322                  k_num_registers_ppc64,323              "g_register_infos_powerpc64 has wrong number of register infos");324 325#undef DEFINE_FPR_PPC64326#undef DEFINE_GPR_PPC64327#undef DEFINE_VMX_PPC64328 329#endif // DECLARE_REGISTER_INFOS_PPC64_STRUCT330