* win32-i386-low.c: Add 64-bit support.
(CONTEXT_EXTENDED_REGISTERS): Set macro to zero if not exisiting. (init_registers_amd64): Declare. (mappings): Add 64-bit version of array. (init_windows_x86): New function. (the_low_target): Change init_arch field to init_windows_x86.
This commit is contained in:
parent
e8f0053d6e
commit
54709339f5
|
@ -1,3 +1,12 @@
|
||||||
|
2010-04-19 Pierre Muller <muller@ics.u-strasbg.fr>
|
||||||
|
|
||||||
|
* win32-i386-low.c: Add 64-bit support.
|
||||||
|
(CONTEXT_EXTENDED_REGISTERS): Set macro to zero if not exisiting.
|
||||||
|
(init_registers_amd64): Declare.
|
||||||
|
(mappings): Add 64-bit version of array.
|
||||||
|
(init_windows_x86): New function.
|
||||||
|
(the_low_target): Change init_arch field to init_windows_x86.
|
||||||
|
|
||||||
2010-04-19 Pierre Muller <muller@ics.u-strasbg.fr>
|
2010-04-19 Pierre Muller <muller@ics.u-strasbg.fr>
|
||||||
|
|
||||||
* win32-low.c: Adapt to support also 64-bit architecture.
|
* win32-low.c: Adapt to support also 64-bit architecture.
|
||||||
|
|
|
@ -19,13 +19,22 @@
|
||||||
#include "win32-low.h"
|
#include "win32-low.h"
|
||||||
#include "i386-low.h"
|
#include "i386-low.h"
|
||||||
|
|
||||||
|
#ifndef CONTEXT_EXTENDED_REGISTERS
|
||||||
|
#define CONTEXT_EXTENDED_REGISTERS 0
|
||||||
|
#endif
|
||||||
|
|
||||||
#define FCS_REGNUM 27
|
#define FCS_REGNUM 27
|
||||||
#define FOP_REGNUM 31
|
#define FOP_REGNUM 31
|
||||||
|
|
||||||
#define FLAG_TRACE_BIT 0x100
|
#define FLAG_TRACE_BIT 0x100
|
||||||
|
|
||||||
|
#ifdef __x86_64
|
||||||
|
/* Defined in auto-generated file reg-i386.c. */
|
||||||
|
void init_registers_amd64 (void);
|
||||||
|
#else
|
||||||
/* Defined in auto-generated file reg-i386.c. */
|
/* Defined in auto-generated file reg-i386.c. */
|
||||||
void init_registers_i386 (void);
|
void init_registers_i386 (void);
|
||||||
|
#endif
|
||||||
|
|
||||||
static struct i386_debug_reg_state debug_reg_state;
|
static struct i386_debug_reg_state debug_reg_state;
|
||||||
|
|
||||||
|
@ -214,6 +223,8 @@ i386_single_step (win32_thread_info *th)
|
||||||
th->context.EFlags |= FLAG_TRACE_BIT;
|
th->context.EFlags |= FLAG_TRACE_BIT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef __x86_64
|
||||||
|
|
||||||
/* An array of offset mappings into a Win32 Context structure.
|
/* An array of offset mappings into a Win32 Context structure.
|
||||||
This is a one-to-one mapping which is indexed by gdb's register
|
This is a one-to-one mapping which is indexed by gdb's register
|
||||||
numbers. It retrieves an offset into the context structure where
|
numbers. It retrieves an offset into the context structure where
|
||||||
|
@ -269,6 +280,75 @@ static const int mappings[] = {
|
||||||
};
|
};
|
||||||
#undef context_offset
|
#undef context_offset
|
||||||
|
|
||||||
|
#else /* __x86_64 */
|
||||||
|
|
||||||
|
#define context_offset(x) (offsetof (CONTEXT, x))
|
||||||
|
static const int mappings[] =
|
||||||
|
{
|
||||||
|
context_offset (Rax),
|
||||||
|
context_offset (Rbx),
|
||||||
|
context_offset (Rcx),
|
||||||
|
context_offset (Rdx),
|
||||||
|
context_offset (Rsi),
|
||||||
|
context_offset (Rdi),
|
||||||
|
context_offset (Rbp),
|
||||||
|
context_offset (Rsp),
|
||||||
|
context_offset (R8),
|
||||||
|
context_offset (R9),
|
||||||
|
context_offset (R10),
|
||||||
|
context_offset (R11),
|
||||||
|
context_offset (R12),
|
||||||
|
context_offset (R13),
|
||||||
|
context_offset (R14),
|
||||||
|
context_offset (R15),
|
||||||
|
context_offset (Rip),
|
||||||
|
context_offset (EFlags),
|
||||||
|
context_offset (SegCs),
|
||||||
|
context_offset (SegSs),
|
||||||
|
context_offset (SegDs),
|
||||||
|
context_offset (SegEs),
|
||||||
|
context_offset (SegFs),
|
||||||
|
context_offset (SegGs),
|
||||||
|
context_offset (FloatSave.FloatRegisters[0]),
|
||||||
|
context_offset (FloatSave.FloatRegisters[1]),
|
||||||
|
context_offset (FloatSave.FloatRegisters[2]),
|
||||||
|
context_offset (FloatSave.FloatRegisters[3]),
|
||||||
|
context_offset (FloatSave.FloatRegisters[4]),
|
||||||
|
context_offset (FloatSave.FloatRegisters[5]),
|
||||||
|
context_offset (FloatSave.FloatRegisters[6]),
|
||||||
|
context_offset (FloatSave.FloatRegisters[7]),
|
||||||
|
context_offset (FloatSave.ControlWord),
|
||||||
|
context_offset (FloatSave.StatusWord),
|
||||||
|
context_offset (FloatSave.TagWord),
|
||||||
|
context_offset (FloatSave.ErrorSelector),
|
||||||
|
context_offset (FloatSave.ErrorOffset),
|
||||||
|
context_offset (FloatSave.DataSelector),
|
||||||
|
context_offset (FloatSave.DataOffset),
|
||||||
|
context_offset (FloatSave.ErrorSelector)
|
||||||
|
/* XMM0-7 */ ,
|
||||||
|
context_offset (Xmm0),
|
||||||
|
context_offset (Xmm1),
|
||||||
|
context_offset (Xmm2),
|
||||||
|
context_offset (Xmm3),
|
||||||
|
context_offset (Xmm4),
|
||||||
|
context_offset (Xmm5),
|
||||||
|
context_offset (Xmm6),
|
||||||
|
context_offset (Xmm7),
|
||||||
|
context_offset (Xmm8),
|
||||||
|
context_offset (Xmm9),
|
||||||
|
context_offset (Xmm10),
|
||||||
|
context_offset (Xmm11),
|
||||||
|
context_offset (Xmm12),
|
||||||
|
context_offset (Xmm13),
|
||||||
|
context_offset (Xmm14),
|
||||||
|
context_offset (Xmm15),
|
||||||
|
/* MXCSR */
|
||||||
|
context_offset (FloatSave.MxCsr)
|
||||||
|
};
|
||||||
|
#undef context_offset
|
||||||
|
|
||||||
|
#endif /* __x86_64 */
|
||||||
|
|
||||||
/* Fetch register from gdbserver regcache data. */
|
/* Fetch register from gdbserver regcache data. */
|
||||||
static void
|
static void
|
||||||
i386_fetch_inferior_register (struct regcache *regcache,
|
i386_fetch_inferior_register (struct regcache *regcache,
|
||||||
|
@ -303,8 +383,18 @@ i386_store_inferior_register (struct regcache *regcache,
|
||||||
static const unsigned char i386_win32_breakpoint = 0xcc;
|
static const unsigned char i386_win32_breakpoint = 0xcc;
|
||||||
#define i386_win32_breakpoint_len 1
|
#define i386_win32_breakpoint_len 1
|
||||||
|
|
||||||
|
static void
|
||||||
|
init_windows_x86 (void)
|
||||||
|
{
|
||||||
|
#ifdef __x86_64
|
||||||
|
init_registers_amd64 ();
|
||||||
|
#else
|
||||||
|
init_registers_i386 ();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
struct win32_target_ops the_low_target = {
|
struct win32_target_ops the_low_target = {
|
||||||
init_registers_i386,
|
init_windows_x86,
|
||||||
sizeof (mappings) / sizeof (mappings[0]),
|
sizeof (mappings) / sizeof (mappings[0]),
|
||||||
i386_initial_stuff,
|
i386_initial_stuff,
|
||||||
i386_get_thread_context,
|
i386_get_thread_context,
|
||||||
|
|
Loading…
Reference in New Issue