Capturing guest/host context and showing registers in debugger.
This commit is contained in:
@@ -11,6 +11,7 @@
|
||||
#define XENIA_CPU_FRONTEND_PPC_CONTEXT_H_
|
||||
|
||||
#include <cstdint>
|
||||
#include <string>
|
||||
|
||||
#include "xenia/base/vec128.h"
|
||||
|
||||
@@ -40,6 +41,209 @@ namespace frontend {
|
||||
// 100: invalid
|
||||
// 128-256: VR
|
||||
|
||||
enum class PPCRegister {
|
||||
kR0 = 0,
|
||||
kR1,
|
||||
kR2,
|
||||
kR3,
|
||||
kR4,
|
||||
kR5,
|
||||
kR6,
|
||||
kR7,
|
||||
kR8,
|
||||
kR9,
|
||||
kR10,
|
||||
kR11,
|
||||
kR12,
|
||||
kR13,
|
||||
kR14,
|
||||
kR15,
|
||||
kR16,
|
||||
kR17,
|
||||
kR18,
|
||||
kR19,
|
||||
kR20,
|
||||
kR21,
|
||||
kR22,
|
||||
kR23,
|
||||
kR24,
|
||||
kR25,
|
||||
kR26,
|
||||
kR27,
|
||||
kR28,
|
||||
kR29,
|
||||
kR30,
|
||||
kR31,
|
||||
kFR0 = 32,
|
||||
kFR1,
|
||||
kFR2,
|
||||
kFR3,
|
||||
kFR4,
|
||||
kFR5,
|
||||
kFR6,
|
||||
kFR7,
|
||||
kFR8,
|
||||
kFR9,
|
||||
kFR10,
|
||||
kFR11,
|
||||
kFR12,
|
||||
kFR13,
|
||||
kFR14,
|
||||
kFR15,
|
||||
kFR16,
|
||||
kFR17,
|
||||
kFR18,
|
||||
kFR19,
|
||||
kFR20,
|
||||
kFR21,
|
||||
kFR22,
|
||||
kFR23,
|
||||
kFR24,
|
||||
kFR25,
|
||||
kFR26,
|
||||
kFR27,
|
||||
kFR28,
|
||||
kFR29,
|
||||
kFR30,
|
||||
kFR31,
|
||||
kVR0 = 64,
|
||||
kVR1,
|
||||
kVR2,
|
||||
kVR3,
|
||||
kVR4,
|
||||
kVR5,
|
||||
kVR6,
|
||||
kVR7,
|
||||
kVR8,
|
||||
kVR9,
|
||||
kVR10,
|
||||
kVR11,
|
||||
kVR12,
|
||||
kVR13,
|
||||
kVR14,
|
||||
kVR15,
|
||||
kVR16,
|
||||
kVR17,
|
||||
kVR18,
|
||||
kVR19,
|
||||
kVR20,
|
||||
kVR21,
|
||||
kVR22,
|
||||
kVR23,
|
||||
kVR24,
|
||||
kVR25,
|
||||
kVR26,
|
||||
kVR27,
|
||||
kVR28,
|
||||
kVR29,
|
||||
kVR30,
|
||||
kVR31,
|
||||
kVR32,
|
||||
kVR33,
|
||||
kVR34,
|
||||
kVR35,
|
||||
kVR36,
|
||||
kVR37,
|
||||
kVR38,
|
||||
kVR39,
|
||||
kVR40,
|
||||
kVR41,
|
||||
kVR42,
|
||||
kVR43,
|
||||
kVR44,
|
||||
kVR45,
|
||||
kVR46,
|
||||
kVR47,
|
||||
kVR48,
|
||||
kVR49,
|
||||
kVR50,
|
||||
kVR51,
|
||||
kVR52,
|
||||
kVR53,
|
||||
kVR54,
|
||||
kVR55,
|
||||
kVR56,
|
||||
kVR57,
|
||||
kVR58,
|
||||
kVR59,
|
||||
kVR60,
|
||||
kVR61,
|
||||
kVR62,
|
||||
kVR63,
|
||||
kVR64,
|
||||
kVR65,
|
||||
kVR66,
|
||||
kVR67,
|
||||
kVR68,
|
||||
kVR69,
|
||||
kVR70,
|
||||
kVR71,
|
||||
kVR72,
|
||||
kVR73,
|
||||
kVR74,
|
||||
kVR75,
|
||||
kVR76,
|
||||
kVR77,
|
||||
kVR78,
|
||||
kVR79,
|
||||
kVR80,
|
||||
kVR81,
|
||||
kVR82,
|
||||
kVR83,
|
||||
kVR84,
|
||||
kVR85,
|
||||
kVR86,
|
||||
kVR87,
|
||||
kVR88,
|
||||
kVR89,
|
||||
kVR90,
|
||||
kVR91,
|
||||
kVR92,
|
||||
kVR93,
|
||||
kVR94,
|
||||
kVR95,
|
||||
kVR96,
|
||||
kVR97,
|
||||
kVR98,
|
||||
kVR99,
|
||||
kVR100,
|
||||
kVR101,
|
||||
kVR102,
|
||||
kVR103,
|
||||
kVR104,
|
||||
kVR105,
|
||||
kVR106,
|
||||
kVR107,
|
||||
kVR108,
|
||||
kVR109,
|
||||
kVR110,
|
||||
kVR111,
|
||||
kVR112,
|
||||
kVR113,
|
||||
kVR114,
|
||||
kVR115,
|
||||
kVR116,
|
||||
kVR117,
|
||||
kVR118,
|
||||
kVR119,
|
||||
kVR120,
|
||||
kVR121,
|
||||
kVR122,
|
||||
kVR123,
|
||||
kVR124,
|
||||
kVR125,
|
||||
kVR126,
|
||||
kVR127,
|
||||
kVR128,
|
||||
|
||||
kLR,
|
||||
kCTR,
|
||||
kXER,
|
||||
kFPSCR,
|
||||
kVSCR,
|
||||
kCR,
|
||||
};
|
||||
|
||||
#pragma pack(push, 8)
|
||||
typedef struct alignas(64) PPCContext_s {
|
||||
// Must be stored at 0x0 for now.
|
||||
@@ -218,9 +422,13 @@ typedef struct alignas(64) PPCContext_s {
|
||||
// Keep the struct padded out to 64b total.
|
||||
uint8_t _padding[8];
|
||||
|
||||
static std::string GetRegisterName(PPCRegister reg);
|
||||
std::string GetStringFromValue(PPCRegister reg) const;
|
||||
void SetValueFromString(PPCRegister reg, std::string value);
|
||||
|
||||
void SetRegFromString(const char* name, const char* value);
|
||||
bool CompareRegWithString(const char* name, const char* value,
|
||||
char* out_value, size_t out_value_size);
|
||||
char* out_value, size_t out_value_size) const;
|
||||
} PPCContext;
|
||||
#pragma pack(pop)
|
||||
static_assert(sizeof(PPCContext) % 64 == 0, "64b padded");
|
||||
|
||||
Reference in New Issue
Block a user