From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 7437 invoked by alias); 19 Apr 2010 22:57:42 -0000 Received: (qmail 7424 invoked by uid 22791); 19 Apr 2010 22:57:41 -0000 X-SWARE-Spam-Status: No, hits=-1.8 required=5.0 tests=BAYES_00,MSGID_MULTIPLE_AT,TW_EG X-Spam-Check-By: sourceware.org Received: from mailhost.u-strasbg.fr (HELO mailhost.u-strasbg.fr) (130.79.200.151) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 19 Apr 2010 22:57:35 +0000 Received: from baal.u-strasbg.fr (baal.u-strasbg.fr [IPv6:2001:660:2402::41]) by mailhost.u-strasbg.fr (8.14.3/jtpda-5.5pre1) with ESMTP id o3JMvSc3038689 ; Tue, 20 Apr 2010 00:57:29 +0200 (CEST) (envelope-from pierre.muller@ics-cnrs.unistra.fr) Received: from mailserver.u-strasbg.fr (ms1.u-strasbg.fr [IPv6:2001:660:2402:d::10]) by baal.u-strasbg.fr (8.14.0/jtpda-5.5pre1) with ESMTP id o3JMvSgc030656 ; Tue, 20 Apr 2010 00:57:28 +0200 (CEST) (envelope-from pierre.muller@ics-cnrs.unistra.fr) Received: from d620muller (lec67-4-82-230-53-140.fbx.proxad.net [82.230.53.140]) (user=mullerp mech=LOGIN) by mailserver.u-strasbg.fr (8.14.3/jtpda-5.5pre1) with ESMTP id o3JMvRjH033977 (version=TLSv1/SSLv3 cipher=RC4-MD5 bits=128 verify=NO) ; Tue, 20 Apr 2010 00:57:28 +0200 (CEST) (envelope-from pierre.muller@ics-cnrs.unistra.fr) From: "Pierre Muller" To: Cc: "'Pedro Alves'" Subject: [RFA] [2/4] Mingw64 gdbserver support Date: Mon, 19 Apr 2010 22:57:00 -0000 Message-ID: <001201cae013$b858d3b0$290a7b10$@muller@ics-cnrs.unistra.fr> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2010-04/txt/msg00581.txt.bz2 This part is simplified as suggested by Pedro, no new files no file rename, all put into the old win32-i386-low.c file. We can still rename this later. Pierre Muller Pascal language support maintainer for GDB gdbserver ChangeLog entry: 2010-04-19 Pierre Muller * win32-i386-low.c: Add 64-bit support. (COMPILE_WIN64): New macro set if compilation target to debug Windows 64-bit executables. (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. Index: gdbserver/win32-i386-low.c =================================================================== RCS file: /cvs/src/src/gdb/gdbserver/win32-i386-low.c,v retrieving revision 1.18 diff -u -p -r1.18 win32-i386-low.c --- gdbserver/win32-i386-low.c 20 Jan 2010 22:55:38 -0000 1.18 +++ gdbserver/win32-i386-low.c 19 Apr 2010 22:35:38 -0000 @@ -19,13 +19,25 @@ #include "win32-low.h" #include "i386-low.h" +#ifdef __x86_64 +#define COMPILE_WIN64 +#ifndef CONTEXT_EXTENDED_REGISTERS +#define CONTEXT_EXTENDED_REGISTERS 0 +#endif +#endif + #define FCS_REGNUM 27 #define FOP_REGNUM 31 #define FLAG_TRACE_BIT 0x100 +#ifdef COMPILE_WIN64 +/* Defined in auto-generated file reg-i386.c. */ +void init_registers_amd64 (void); +#else /* Defined in auto-generated file reg-i386.c. */ void init_registers_i386 (void); +#endif static struct i386_debug_reg_state debug_reg_state; @@ -214,6 +226,8 @@ i386_single_step (win32_thread_info *th) th->context.EFlags |= FLAG_TRACE_BIT; } +#ifndef COMPILE_WIN64 + /* An array of offset mappings into a Win32 Context structure. This is a one-to-one mapping which is indexed by gdb's register numbers. It retrieves an offset into the context structure where @@ -269,6 +283,75 @@ static const int mappings[] = { }; #undef context_offset +#else /* COMPILE_WIN64 */ + +#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 /* COMPILE_WIN64 */ + /* Fetch register from gdbserver regcache data. */ static void i386_fetch_inferior_register (struct regcache *regcache, @@ -303,8 +386,18 @@ i386_store_inferior_register (struct reg static const unsigned char i386_win32_breakpoint = 0xcc; #define i386_win32_breakpoint_len 1 +static void +init_windows_x86 () +{ +#ifdef COMPILE_WIN64 + init_registers_amd64 (); +#else + init_registers_i386 (); +#endif +} + struct win32_target_ops the_low_target = { - init_registers_i386, + init_windows_x86, sizeof (mappings) / sizeof (mappings[0]), i386_initial_stuff, i386_get_thread_context,