1 //===-- RegisterContext_i386.h ------------------------------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 #ifndef liblldb_RegisterContext_i386_h_
11 #define liblldb_RegisterContext_i386_h_
15 // Other libraries and framework includes
17 #include "lldb/Core/Log.h"
18 #include "RegisterContextPOSIX.h"
20 class RegisterContext_i386 : public RegisterContextPOSIX
23 RegisterContext_i386(lldb_private::Thread &thread,
24 uint32_t concreate_frame_idx);
26 ~RegisterContext_i386();
32 InvalidateAllRegisters();
37 const lldb_private::RegisterInfo *
38 GetRegisterInfoAtIndex(size_t reg);
41 GetRegisterSetCount();
43 const lldb_private::RegisterSet *
44 GetRegisterSet(size_t set);
47 GetRegisterIndexFromOffset(unsigned offset);
50 GetRegisterName(unsigned reg);
53 ReadRegisterValue(uint32_t reg, lldb_private::Scalar &value);
56 ReadRegisterBytes(uint32_t reg, lldb_private::DataExtractor &data);
59 ReadRegister(const lldb_private::RegisterInfo *reg_info,
60 lldb_private::RegisterValue &value);
63 ReadAllRegisterValues(lldb::DataBufferSP &data_sp);
66 WriteRegisterValue(uint32_t reg, const lldb_private::Scalar &value);
69 WriteRegisterBytes(uint32_t reg, lldb_private::DataExtractor &data,
70 uint32_t data_offset = 0);
73 WriteRegister(const lldb_private::RegisterInfo *reg_info,
74 const lldb_private::RegisterValue &value);
77 WriteAllRegisterValues(const lldb::DataBufferSP &data_sp);
80 ConvertRegisterKindToRegisterNumber(uint32_t kind, uint32_t num);
83 HardwareSingleStep(bool enable);
86 UpdateAfterBreakpoint();
136 // A user area like this no longer exists on FreeBSD
137 // making this a Linux artifact. Nonetheless, it is safe
138 // leaving it here while the code is being cleaned up and generalized.
142 GPR regs; // General purpose registers.
143 int32_t fpvalid; // True if FPU is being used.
144 FPU i387; // FPU registers.
145 uint32_t tsize; // Text segment size.
146 uint32_t dsize; // Data segment size.
147 uint32_t ssize; // Stack segment size.
148 uint32_t start_code; // VM address of text.
149 uint32_t start_stack; // VM address of stack bottom (top in rsp).
150 int32_t signal; // Signal causing core dump.
151 int32_t reserved; // Unused.
152 uint32_t ar0; // Location of GPR's.
153 FPU* fpstate; // Location of FPR's.
154 uint32_t magic; // Identifier for core dumps.
155 char u_comm[32]; // Command causing core dump.
156 uint32_t u_debugreg[8]; // Debug registers (DR0 - DR7).
161 ProcessMonitor &GetMonitor();
163 void LogGPR(const char *title);
169 #endif // #ifndef liblldb_RegisterContext_i386_h_