From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 31728 invoked by alias); 10 Jan 2009 07:32:37 -0000 Received: (qmail 31718 invoked by uid 22791); 10 Jan 2009 07:32:36 -0000 X-SWARE-Spam-Status: No, hits=-2.4 required=5.0 tests=AWL,BAYES_00 X-Spam-Check-By: sourceware.org Received: from rock.gnat.com (HELO rock.gnat.com) (205.232.38.15) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Sat, 10 Jan 2009 07:32:02 +0000 Received: from localhost (localhost.localdomain [127.0.0.1]) by filtered-rock.gnat.com (Postfix) with ESMTP id 6D9132A9657 for ; Sat, 10 Jan 2009 02:32:00 -0500 (EST) Received: from rock.gnat.com ([127.0.0.1]) by localhost (rock.gnat.com [127.0.0.1]) (amavisd-new, port 10024) with LMTP id bP8705qiT3uu for ; Sat, 10 Jan 2009 02:32:00 -0500 (EST) Received: from joel.gnat.com (localhost.localdomain [127.0.0.1]) by rock.gnat.com (Postfix) with ESMTP id 753B42A9638 for ; Sat, 10 Jan 2009 02:31:58 -0500 (EST) Received: by joel.gnat.com (Postfix, from userid 1000) id 62213E7ACD; Sat, 10 Jan 2009 11:31:51 +0400 (RET) Date: Sat, 10 Jan 2009 07:32:00 -0000 From: Joel Brobecker To: gdb-patches@sourceware.org Subject: [RFA/win32] move "mappings" array to a 32bit-specific nat file Message-ID: <20090110073151.GA29274@adacore.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="sdtB3X0nJg68CQEu" Content-Disposition: inline User-Agent: Mutt/1.4.2.2i 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: 2009-01/txt/msg00217.txt.bz2 --sdtB3X0nJg68CQEu Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-length: 734 Hello, This patch introduces a new file i386-windows-nat.c to hold the few parts of win32-nat that are actually dependent on the host CPU. So far, I only detected one item, which is the "mappings" array. 2009-01-10 Joel Brobecker * win32-nat.h: New file. * win32-nat.c (mappings): Initialize to NULL. (win32_set_context_register_offsets): New function. * i386-windows-nat.c: New file. (mappings): Moved here from win32-nat.c. (_initialize_i386_windows_nat): New function. * config/i386/mingw.mh (NATDEPFILES): Add i386-windows-nat.o. * config/i386/cygwin.mh (NATDEPFILES): Likewise. Tested on x86-windows. OK to apply? Thank you, -- Joel --sdtB3X0nJg68CQEu Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="mappings.diff" Content-length: 8076 diff --git a/gdb/config/i386/cygwin.mh b/gdb/config/i386/cygwin.mh index 36f6cc5..5d7f75f 100644 --- a/gdb/config/i386/cygwin.mh +++ b/gdb/config/i386/cygwin.mh @@ -1,4 +1,4 @@ MH_CFLAGS= -NATDEPFILES= i386-nat.o win32-nat.o +NATDEPFILES= i386-nat.o win32-nat.o i386-windows-nat.o NAT_FILE=nm-cygwin.h XM_CLIBS= diff --git a/gdb/config/i386/mingw.mh b/gdb/config/i386/mingw.mh index 36f6cc5..5d7f75f 100644 --- a/gdb/config/i386/mingw.mh +++ b/gdb/config/i386/mingw.mh @@ -1,4 +1,4 @@ MH_CFLAGS= -NATDEPFILES= i386-nat.o win32-nat.o +NATDEPFILES= i386-nat.o win32-nat.o i386-windows-nat.o NAT_FILE=nm-cygwin.h XM_CLIBS= diff --git a/gdb/i386-windows-nat.c b/gdb/i386-windows-nat.c new file mode 100644 index 0000000..a22d6e8 --- /dev/null +++ b/gdb/i386-windows-nat.c @@ -0,0 +1,76 @@ +/* Copyright (C) 2008, 2009 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "defs.h" +#include "win32-nat.h" + +#include + +#define context_offset(x) ((int)&(((CONTEXT *)NULL)->x)) +static const int mappings[] = +{ + context_offset (Eax), + context_offset (Ecx), + context_offset (Edx), + context_offset (Ebx), + context_offset (Esp), + context_offset (Ebp), + context_offset (Esi), + context_offset (Edi), + context_offset (Eip), + context_offset (EFlags), + context_offset (SegCs), + context_offset (SegSs), + context_offset (SegDs), + context_offset (SegEs), + context_offset (SegFs), + context_offset (SegGs), + context_offset (FloatSave.RegisterArea[0 * 10]), + context_offset (FloatSave.RegisterArea[1 * 10]), + context_offset (FloatSave.RegisterArea[2 * 10]), + context_offset (FloatSave.RegisterArea[3 * 10]), + context_offset (FloatSave.RegisterArea[4 * 10]), + context_offset (FloatSave.RegisterArea[5 * 10]), + context_offset (FloatSave.RegisterArea[6 * 10]), + context_offset (FloatSave.RegisterArea[7 * 10]), + 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 (ExtendedRegisters[10*16]), + context_offset (ExtendedRegisters[11*16]), + context_offset (ExtendedRegisters[12*16]), + context_offset (ExtendedRegisters[13*16]), + context_offset (ExtendedRegisters[14*16]), + context_offset (ExtendedRegisters[15*16]), + context_offset (ExtendedRegisters[16*16]), + context_offset (ExtendedRegisters[17*16]), + /* MXCSR */ + context_offset (ExtendedRegisters[24]) +}; +#undef context_offset + +void +_initialize_i386_windows_nat (void) +{ + win32_set_context_register_offsets (mappings); +} diff --git a/gdb/win32-nat.c b/gdb/win32-nat.c index 66ebdd6..286f1f9 100644 --- a/gdb/win32-nat.c +++ b/gdb/win32-nat.c @@ -61,6 +61,7 @@ #include "i387-tdep.h" #include "i386-cygwin-tdep.h" +#include "win32-nat.h" static struct target_ops win32_ops; @@ -161,11 +162,16 @@ static int debug_memory = 0; /* show target memory accesses */ static int debug_exceptions = 0; /* show target exceptions */ static int useshell = 0; /* use shell for subprocesses */ -/* This vector maps GDB's idea of a register's number into an address +/* This vector maps GDB's idea of a register's number into an offset in the win32 exception context vector. It also contains the bit mask needed to load the register in question. + The contents of this table can only be computed by the units + that provide CPU-specific support for Windows native debugging. + These units should set the table by calling + win32_set_context_register_offsets. + One day we could read a reg, we could inspect the context we already have loaded, if it doesn't have the bit set that we need, we read that set of registers in using GetThreadContext. If the @@ -174,55 +180,7 @@ static int useshell = 0; /* use shell for subprocesses */ the other regs of the group, and then we copy the info in and set out bit. */ -#define context_offset(x) ((int)&(((CONTEXT *)NULL)->x)) -static const int mappings[] = -{ - context_offset (Eax), - context_offset (Ecx), - context_offset (Edx), - context_offset (Ebx), - context_offset (Esp), - context_offset (Ebp), - context_offset (Esi), - context_offset (Edi), - context_offset (Eip), - context_offset (EFlags), - context_offset (SegCs), - context_offset (SegSs), - context_offset (SegDs), - context_offset (SegEs), - context_offset (SegFs), - context_offset (SegGs), - context_offset (FloatSave.RegisterArea[0 * 10]), - context_offset (FloatSave.RegisterArea[1 * 10]), - context_offset (FloatSave.RegisterArea[2 * 10]), - context_offset (FloatSave.RegisterArea[3 * 10]), - context_offset (FloatSave.RegisterArea[4 * 10]), - context_offset (FloatSave.RegisterArea[5 * 10]), - context_offset (FloatSave.RegisterArea[6 * 10]), - context_offset (FloatSave.RegisterArea[7 * 10]), - 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 (ExtendedRegisters[10*16]), - context_offset (ExtendedRegisters[11*16]), - context_offset (ExtendedRegisters[12*16]), - context_offset (ExtendedRegisters[13*16]), - context_offset (ExtendedRegisters[14*16]), - context_offset (ExtendedRegisters[15*16]), - context_offset (ExtendedRegisters[16*16]), - context_offset (ExtendedRegisters[17*16]), - /* MXCSR */ - context_offset (ExtendedRegisters[24]) -}; - -#undef context_offset +static const int *mappings; /* This vector maps the target's idea of an exception (extracted from the DEBUG_EVENT structure) to GDB's idea. */ @@ -244,6 +202,15 @@ static const struct xlate_exception {STATUS_FLOAT_DIVIDE_BY_ZERO, TARGET_SIGNAL_FPE}, {-1, -1}}; +/* Set the MAPPINGS static global to OFFSETS. + See the description of MAPPINGS for more details. */ + +void +win32_set_context_register_offsets (const int *offsets) +{ + mappings = offsets; +} + static void check (BOOL ok, const char *file, int line) { diff --git a/gdb/win32-nat.h b/gdb/win32-nat.h new file mode 100644 index 0000000..6b8287d --- /dev/null +++ b/gdb/win32-nat.h @@ -0,0 +1,24 @@ +/* Copyright 2008, 2009 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifndef WIN32_NAT_H +#define WIN32_NAT_H + +extern void win32_set_context_register_offsets (const int *offsets); + +#endif + --sdtB3X0nJg68CQEu--