RegisterContextLinux_i386.h [plain text]
#ifndef liblldb_RegisterContextLinux_i386_h_
#define liblldb_RegisterContextLinux_i386_h_
#include "RegisterContextLinux.h"
class RegisterContextLinux_i386 : public RegisterContextLinux
{
public:
RegisterContextLinux_i386(lldb_private::Thread &thread,
uint32_t concreate_frame_idx);
~RegisterContextLinux_i386();
void
Invalidate();
void
InvalidateAllRegisters();
size_t
GetRegisterCount();
const lldb_private::RegisterInfo *
GetRegisterInfoAtIndex(uint32_t reg);
size_t
GetRegisterSetCount();
const lldb_private::RegisterSet *
GetRegisterSet(uint32_t set);
#if 0
bool
ReadRegisterValue(uint32_t reg, lldb_private::Scalar &value);
bool
ReadRegisterBytes(uint32_t reg, lldb_private::DataExtractor &data);
#endif
virtual bool
ReadRegister(const lldb_private::RegisterInfo *reg_info,
lldb_private::RegisterValue &value);
bool
ReadAllRegisterValues(lldb::DataBufferSP &data_sp);
#if 0
bool
WriteRegisterValue(uint32_t reg, const lldb_private::Scalar &value);
bool
WriteRegisterBytes(uint32_t reg, lldb_private::DataExtractor &data,
uint32_t data_offset = 0);
#endif
virtual bool
WriteRegister(const lldb_private::RegisterInfo *reg_info,
const lldb_private::RegisterValue &value);
bool
WriteAllRegisterValues(const lldb::DataBufferSP &data_sp);
uint32_t
ConvertRegisterKindToRegisterNumber(uint32_t kind, uint32_t num);
bool
HardwareSingleStep(bool enable);
bool
UpdateAfterBreakpoint();
struct GPR
{
uint32_t ebx;
uint32_t ecx;
uint32_t edx;
uint32_t esi;
uint32_t edi;
uint32_t ebp;
uint32_t eax;
uint32_t ds;
uint32_t es;
uint32_t fs;
uint32_t gs;
uint32_t orig_ax;
uint32_t eip;
uint32_t cs;
uint32_t eflags;
uint32_t esp;
uint32_t ss;
};
struct MMSReg
{
uint8_t bytes[8];
};
struct XMMReg
{
uint8_t bytes[16];
};
struct FPU
{
uint16_t fcw;
uint16_t fsw;
uint16_t ftw;
uint16_t fop;
uint32_t ip;
uint32_t cs;
uint32_t foo;
uint32_t fos;
uint32_t mxcsr;
uint32_t reserved;
MMSReg stmm[8];
XMMReg xmm[8];
uint32_t pad[56];
};
struct UserArea
{
GPR regs; int32_t fpvalid; FPU i387; uint32_t tsize; uint32_t dsize; uint32_t ssize; uint32_t start_code; uint32_t start_stack; int32_t signal; int32_t reserved; uint32_t ar0; FPU* fpstate; uint32_t magic; char u_comm[32]; uint32_t u_debugreg[8]; };
private:
UserArea user;
ProcessMonitor &GetMonitor();
bool ReadGPR();
bool ReadFPR();
};
#endif // #ifndef liblldb_RegisterContextLinux_i386_h_