From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 8537 invoked by alias); 14 Apr 2007 21:09:50 -0000 Received: (qmail 8529 invoked by uid 22791); 14 Apr 2007 21:09:47 -0000 X-Spam-Check-By: sourceware.org Received: from mtagate8.de.ibm.com (HELO mtagate8.de.ibm.com) (195.212.29.157) by sourceware.org (qpsmtpd/0.31) with ESMTP; Sat, 14 Apr 2007 22:09:41 +0100 Received: from d12nrmr1607.megacenter.de.ibm.com (d12nrmr1607.megacenter.de.ibm.com [9.149.167.49]) by mtagate8.de.ibm.com (8.13.8/8.13.8) with ESMTP id l3EL9cs9062664 for ; Sat, 14 Apr 2007 21:09:38 GMT Received: from d12av02.megacenter.de.ibm.com (d12av02.megacenter.de.ibm.com [9.149.165.228]) by d12nrmr1607.megacenter.de.ibm.com (8.13.8/8.13.8/NCO v8.3) with ESMTP id l3EL9cIh3866740 for ; Sat, 14 Apr 2007 23:09:38 +0200 Received: from d12av02.megacenter.de.ibm.com (loopback [127.0.0.1]) by d12av02.megacenter.de.ibm.com (8.12.11.20060308/8.13.3) with ESMTP id l3EL9cnN007874 for ; Sat, 14 Apr 2007 23:09:38 +0200 Received: from tuxmaker.boeblingen.de.ibm.com (tuxmaker.boeblingen.de.ibm.com [9.152.85.9]) by d12av02.megacenter.de.ibm.com (8.12.11.20060308/8.12.11) with SMTP id l3EL9ckh007871 for ; Sat, 14 Apr 2007 23:09:38 +0200 Message-Id: <200704142109.l3EL9ckh007871@d12av02.megacenter.de.ibm.com> Received: by tuxmaker.boeblingen.de.ibm.com (sSMTP sendmail emulation); Sat, 14 Apr 2007 23:09:38 +0200 Subject: [rfc/rft] [2/5] Untangle register_addr: Linux targets To: gdb-patches@sourceware.org Date: Sat, 14 Apr 2007 21:10:00 -0000 From: "Ulrich Weigand" X-Mailer: ELM [version 2.5 PL2] 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: 2007-04/txt/msg00224.txt.bz2 Hello, the linux_target method supports to use either inf_ptrace_target or inf_ptrace_trad_target as underlying target; this is selected by the NM file defining the FETCH_INFERIOR_REGISTERS macro. For the traditional target, the global register_addr routine is used. Currently, there are two targets (alpha-linux and mips-linux) that use the inf_ptrace_trad_target method. This patch splits linux_target into two routines: - linux_target uses always inf_ptrace_target - linux_trad_target uses inf_ptrace_trad_target using a register_u_offset function that was passed as argument alpha-linux and mips-linux are switched to use the new linux_trad_target; using -for now- copies of the linux_register_u_offset function from linux-nat.c (referring to register_addr). Follow-on patches will then remove the use of the global register_addr on alpha and mips. All other Linux targets continue to work unchanged, except they no longer need to define FETCH_INFERIOR_REGISTERS. For all but i386, this means the platform-specific nm-linux.h is now obsolete. Tested on i368-linux and powerpc-linux, and by verifying that alpha-linux, mips-linux, arm-linux, ia64-linux, m32r-linux, m68k-linux, hppa-linux, s390-linux, sparc-linux, sparc64-linux native targets still build. Bye, Ulrich ChangeLog: * linux-nat.c (linux_register_u_offset): Remove. (linux_target_install_ops): New function. (linux_target): Use it. (linux_trad_target): New function. * linux-nat.h (linux_trad_target): Declare. * alpha-linux-nat.c: Include "gdbcore.h". (alpha_linux_register_u_offset): New function. (_initialize_alpha_linux_nat): Use linux_trad_target. * mips-linux-nat.c: Include "gdbcore.h". (mips_linux_register_u_offset): New function. (_initialize_mips_linux_nat): Use linux_trad_target. * config/arm/linux.mh (NAT_FILE): Set to config/nm-linux.h. * config/arm/nm-linux.h: Delete file. * config/i386/nm-linux64.h (FETCH_INFERIOR_REGISTERS): Remove. * config/i386/nm-linux.h (FETCH_INFERIOR_REGISTERS): Remove. * config/ia64/linux.mh (NAT_FILE): Set to config/nm-linux.h. * config/ia64/nm-linux.h: Delete file. * config/m32r/linux.mh (NAT_FILE): Set to config/nm-linux.h. * config/m32r/nm-linux.h: Delete file. * config/m68k/linux.mh (NAT_FILE): Set to config/nm-linux.h. * config/m68k/nm-linux.h: Delete file. * config/pa/linux.mh (NAT_FILE): Set to config/nm-linux.h. * config/pa/nm-linux.h: Delete file. * config/powerpc/linux.mh (NAT_FILE): Set to config/nm-linux.h. * config/powerpc/ppc64-linux.mh (NAT_FILE): Likewise. * config/powerpc/nm-linux.h: Delete file. * config/s390/s390.mh (NAT_FILE): Set to config/nm-linux.h. * config/s390/nm-linux.h: Delete file. * config/sparc/linux.mh (NAT_FILE): Set to config/nm-linux.h. * config/sparc/linux64.mh (NAT_FILE): Likewise. * config/sparc/nm-linux.h: Delete file. diff -urNp gdb-orig/gdb/alpha-linux-nat.c gdb-head/gdb/alpha-linux-nat.c --- gdb-orig/gdb/alpha-linux-nat.c 2007-04-13 19:13:18.983159000 +0200 +++ gdb-head/gdb/alpha-linux-nat.c 2007-04-13 20:40:30.188257296 +0200 @@ -21,11 +21,21 @@ #include "defs.h" #include "target.h" #include "linux-nat.h" +#include "gdbcore.h" + +static CORE_ADDR +alpha_linux_register_u_offset (int regno) +{ + /* FIXME drow/2005-09-04: The hardcoded use of register_addr should go + away. This requires disentangling the various definitions of it + (particularly alpha-nat.c's). */ + return register_addr (regno, 0); +} void _initialialize_alpha_linux_nat (void); void _initialize_alpha_linux_nat (void) { - linux_nat_add_target (linux_target ()); + linux_nat_add_target (linux_trad_target (alpha_linux_register_u_offset)); } diff -urNp gdb-orig/gdb/config/arm/linux.mh gdb-head/gdb/config/arm/linux.mh --- gdb-orig/gdb/config/arm/linux.mh 2007-04-13 19:13:18.988158000 +0200 +++ gdb-head/gdb/config/arm/linux.mh 2007-04-13 20:40:15.325252648 +0200 @@ -1,6 +1,6 @@ # Host: ARM based machine running GNU/Linux -NAT_FILE= nm-linux.h +NAT_FILE= config/nm-linux.h NATDEPFILES= inf-ptrace.o fork-child.o arm-linux-nat.o gcore.o \ proc-service.o linux-thread-db.o linux-nat.o linux-fork.o diff -urNp gdb-orig/gdb/config/arm/nm-linux.h gdb-head/gdb/config/arm/nm-linux.h --- gdb-orig/gdb/config/arm/nm-linux.h 2007-04-13 20:40:05.464153304 +0200 +++ gdb-head/gdb/config/arm/nm-linux.h 1970-01-01 01:00:00.000000000 +0100 @@ -1,29 +0,0 @@ -/* Definitions to make GDB run on an ARM based machine under GNU/Linux. - Copyright 1999, 2000, 2001, 2007 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 2 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, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ - -#ifndef NM_ARMLINUX_H -#define NM_ARMLINUX_H - -#include "config/nm-linux.h" - -/* Override copies of {fetch,store}_inferior_registers in infptrace.c. */ -#define FETCH_INFERIOR_REGISTERS - -#endif /* NM_ARMLINUX_H */ diff -urNp gdb-orig/gdb/config/i386/nm-linux64.h gdb-head/gdb/config/i386/nm-linux64.h --- gdb-orig/gdb/config/i386/nm-linux64.h 2007-04-13 19:13:18.995157000 +0200 +++ gdb-head/gdb/config/i386/nm-linux64.h 2007-04-13 20:40:15.351248696 +0200 @@ -50,9 +50,5 @@ extern void amd64_linux_dr_reset_addr (i extern unsigned long amd64_linux_dr_get_status (void); #define I386_DR_LOW_GET_STATUS() \ amd64_linux_dr_get_status () - - -/* Override copies of {fetch,store}_inferior_registers in `infptrace.c'. */ -#define FETCH_INFERIOR_REGISTERS #endif /* nm-linux64.h */ diff -urNp gdb-orig/gdb/config/i386/nm-linux.h gdb-head/gdb/config/i386/nm-linux.h --- gdb-orig/gdb/config/i386/nm-linux.h 2007-04-13 20:40:05.474286784 +0200 +++ gdb-head/gdb/config/i386/nm-linux.h 2007-04-13 20:40:15.356247936 +0200 @@ -48,9 +48,6 @@ extern unsigned long i386_linux_dr_get_s i386_linux_dr_get_status () -/* Override copies of {fetch,store}_inferior_registers in `infptrace.c'. */ -#define FETCH_INFERIOR_REGISTERS - #ifdef HAVE_PTRACE_GETFPXREGS /* Include register set support for the SSE registers. */ #define FILL_FPXREGSET diff -urNp gdb-orig/gdb/config/ia64/linux.mh gdb-head/gdb/config/ia64/linux.mh --- gdb-orig/gdb/config/ia64/linux.mh 2007-04-13 19:13:19.003156000 +0200 +++ gdb-head/gdb/config/ia64/linux.mh 2007-04-13 20:40:15.360247328 +0200 @@ -1,6 +1,6 @@ # Host: Intel IA-64 running GNU/Linux -NAT_FILE= nm-linux.h +NAT_FILE= config/nm-linux.h NATDEPFILES= inf-ptrace.o fork-child.o corelow.o gcore.o \ core-regset.o ia64-linux-nat.o \ proc-service.o linux-thread-db.o linux-nat.o linux-fork.o diff -urNp gdb-orig/gdb/config/ia64/nm-linux.h gdb-head/gdb/config/ia64/nm-linux.h --- gdb-orig/gdb/config/ia64/nm-linux.h 2007-04-13 19:13:19.006156000 +0200 +++ gdb-head/gdb/config/ia64/nm-linux.h 1970-01-01 01:00:00.000000000 +0100 @@ -1,29 +0,0 @@ -/* Native support for GNU/Linux, for GDB, the GNU debugger. - - Copyright 1999, 2000, 2001, 2004, 2005, 2007 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 2 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, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ - -#ifndef NM_LINUX_H -#define NM_LINUX_H - -#include "config/nm-linux.h" - -#define FETCH_INFERIOR_REGISTERS - -#endif /* #ifndef NM_LINUX_H */ diff -urNp gdb-orig/gdb/config/m32r/linux.mh gdb-head/gdb/config/m32r/linux.mh --- gdb-orig/gdb/config/m32r/linux.mh 2007-04-13 19:13:19.010155000 +0200 +++ gdb-head/gdb/config/m32r/linux.mh 2007-04-13 20:40:15.368246112 +0200 @@ -1,6 +1,6 @@ # Host: M32R based machine running GNU/Linux -NAT_FILE= nm-linux.h +NAT_FILE= config/nm-linux.h NATDEPFILES= inf-ptrace.o fork-child.o corelow.o \ m32r-linux-nat.o gcore.o proc-service.o linux-thread-db.o \ linux-nat.o linux-fork.o diff -urNp gdb-orig/gdb/config/m32r/nm-linux.h gdb-head/gdb/config/m32r/nm-linux.h --- gdb-orig/gdb/config/m32r/nm-linux.h 2007-04-13 19:13:19.013155000 +0200 +++ gdb-head/gdb/config/m32r/nm-linux.h 1970-01-01 01:00:00.000000000 +0100 @@ -1,29 +0,0 @@ -/* Definitions to make GDB run on an M32R based machine under GNU/Linux. - Copyright 2004, 2007 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 2 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, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ - -#ifndef NM_M32R_LINUX_H -#define NM_M32R_LINUX_H - -#include "config/nm-linux.h" - -/* Override copies of {fetch,store}_inferior_registers in infptrace.c. */ -#define FETCH_INFERIOR_REGISTERS - -#endif /* NM_M32R_LINUX_H */ diff -urNp gdb-orig/gdb/config/m68k/linux.mh gdb-head/gdb/config/m68k/linux.mh --- gdb-orig/gdb/config/m68k/linux.mh 2007-04-13 20:40:05.478286176 +0200 +++ gdb-head/gdb/config/m68k/linux.mh 2007-04-13 20:40:15.377244744 +0200 @@ -1,6 +1,6 @@ # Host: Motorola m68k running GNU/Linux. -NAT_FILE= nm-linux.h +NAT_FILE= config/nm-linux.h NATDEPFILES= inf-ptrace.o fork-child.o \ corelow.o m68klinux-nat.o gcore.o \ proc-service.o linux-thread-db.o linux-nat.o linux-fork.o diff -urNp gdb-orig/gdb/config/m68k/nm-linux.h gdb-head/gdb/config/m68k/nm-linux.h --- gdb-orig/gdb/config/m68k/nm-linux.h 2007-04-13 20:40:05.483285416 +0200 +++ gdb-head/gdb/config/m68k/nm-linux.h 1970-01-01 01:00:00.000000000 +0100 @@ -1,29 +0,0 @@ -/* Native support for linux, for GDB, the GNU debugger. - Copyright 1996, 1998, 2000, 2007 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 2 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, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ - -#ifndef NM_LINUX_H -#define NM_LINUX_H - -#include "config/nm-linux.h" - -/* Override copies of {fetch,store}_inferior_registers in `infptrace.c'. */ -#define FETCH_INFERIOR_REGISTERS - -#endif /* #ifndef NM_LINUX_H */ diff -urNp gdb-orig/gdb/config/pa/linux.mh gdb-head/gdb/config/pa/linux.mh --- gdb-orig/gdb/config/pa/linux.mh 2007-04-13 19:13:19.024153000 +0200 +++ gdb-head/gdb/config/pa/linux.mh 2007-04-13 20:40:15.385243528 +0200 @@ -1,6 +1,6 @@ # Host: Hewlett-Packard PA-RISC machine, running Linux XDEPFILES= -NAT_FILE= nm-linux.h +NAT_FILE= config/nm-linux.h NATDEPFILES= inf-ptrace.o fork-child.o corelow.o gcore.o \ hppa-linux-nat.o proc-service.o linux-thread-db.o linux-nat.o \ linux-fork.o diff -urNp gdb-orig/gdb/config/pa/nm-linux.h gdb-head/gdb/config/pa/nm-linux.h --- gdb-orig/gdb/config/pa/nm-linux.h 2007-04-13 20:40:05.496283440 +0200 +++ gdb-head/gdb/config/pa/nm-linux.h 1970-01-01 01:00:00.000000000 +0100 @@ -1,30 +0,0 @@ -/* Native support for GNU/Linux, for GDB, the GNU debugger. - Copyright (C) 2004, 2007 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 2 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, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ - -#ifndef PA_NM_LINUX_H -#define PA_NM_LINUX_H - -#include "config/nm-linux.h" - -/* Override copies of {fetch,store}_inferior_registers in `infptrace.c'. */ -#define FETCH_INFERIOR_REGISTERS - -#endif - diff -urNp gdb-orig/gdb/config/powerpc/linux.mh gdb-head/gdb/config/powerpc/linux.mh --- gdb-orig/gdb/config/powerpc/linux.mh 2007-04-13 19:13:19.031152000 +0200 +++ gdb-head/gdb/config/powerpc/linux.mh 2007-04-13 20:40:15.393242312 +0200 @@ -2,7 +2,7 @@ XM_CLIBS= -NAT_FILE= nm-linux.h +NAT_FILE= config/nm-linux.h NATDEPFILES= inf-ptrace.o fork-child.o \ ppc-linux-nat.o proc-service.o linux-thread-db.o \ gcore.o linux-nat.o linux-fork.o diff -urNp gdb-orig/gdb/config/powerpc/nm-linux.h gdb-head/gdb/config/powerpc/nm-linux.h --- gdb-orig/gdb/config/powerpc/nm-linux.h 2007-04-13 20:40:05.500282832 +0200 +++ gdb-head/gdb/config/powerpc/nm-linux.h 1970-01-01 01:00:00.000000000 +0100 @@ -1,28 +0,0 @@ -/* IBM PowerPC native-dependent macros for GDB, the GNU debugger. - Copyright 1995, 2000, 2007 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 2 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, write to the Free Software -Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ - -#ifndef NM_LINUX_H - -#include "config/nm-linux.h" - -#define NM_LINUX_H - -#define FETCH_INFERIOR_REGISTERS - -#endif /* #ifndef NM_LINUX_H */ diff -urNp gdb-orig/gdb/config/powerpc/ppc64-linux.mh gdb-head/gdb/config/powerpc/ppc64-linux.mh --- gdb-orig/gdb/config/powerpc/ppc64-linux.mh 2007-04-13 19:13:19.038284000 +0200 +++ gdb-head/gdb/config/powerpc/ppc64-linux.mh 2007-04-13 20:40:15.403240792 +0200 @@ -2,7 +2,7 @@ XM_CLIBS= -NAT_FILE= nm-linux.h +NAT_FILE= config/nm-linux.h NATDEPFILES= inf-ptrace.o fork-child.o \ ppc-linux-nat.o proc-service.o linux-thread-db.o \ gcore.o linux-nat.o linux-fork.o diff -urNp gdb-orig/gdb/config/s390/nm-linux.h gdb-head/gdb/config/s390/nm-linux.h --- gdb-orig/gdb/config/s390/nm-linux.h 2007-04-13 19:13:19.042283000 +0200 +++ gdb-head/gdb/config/s390/nm-linux.h 1970-01-01 01:00:00.000000000 +0100 @@ -1,36 +0,0 @@ -/* Native support for GNU/Linux on S390. - - Copyright 2001, 2002, 2003, 2007 Free Software Foundation, Inc. - - Ported by D.J. Barrow for IBM Deutschland Entwicklung GmbH, IBM - Corporation. derived from i390-nmlinux.h - - 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 2 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, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ - -#ifndef NM_LINUX_H -#define NM_LINUX_H - -#include "config/nm-linux.h" - - -/* ptrace access. */ - -#define FETCH_INFERIOR_REGISTERS - - -#endif /* nm_linux.h */ diff -urNp gdb-orig/gdb/config/s390/s390.mh gdb-head/gdb/config/s390/s390.mh --- gdb-orig/gdb/config/s390/s390.mh 2007-04-13 19:13:19.045283000 +0200 +++ gdb-head/gdb/config/s390/s390.mh 2007-04-13 20:40:15.413239272 +0200 @@ -1,5 +1,5 @@ # Host: S390, running Linux -NAT_FILE= nm-linux.h +NAT_FILE= config/nm-linux.h NATDEPFILES= inf-ptrace.o fork-child.o corelow.o s390-nat.o \ gcore.o linux-thread-db.o proc-service.o linux-nat.o linux-fork.o LOADLIBES = -ldl -rdynamic diff -urNp gdb-orig/gdb/config/sparc/linux64.mh gdb-head/gdb/config/sparc/linux64.mh --- gdb-orig/gdb/config/sparc/linux64.mh 2007-04-13 19:13:19.049282000 +0200 +++ gdb-head/gdb/config/sparc/linux64.mh 2007-04-13 20:40:15.417238664 +0200 @@ -1,5 +1,5 @@ # Host: GNU/Linux UltraSPARC -NAT_FILE= nm-linux.h +NAT_FILE= config/nm-linux.h NATDEPFILES= sparc-nat.o sparc64-nat.o sparc64-linux-nat.o \ corelow.o core-regset.o \ fork-child.o inf-ptrace.o \ diff -urNp gdb-orig/gdb/config/sparc/linux.mh gdb-head/gdb/config/sparc/linux.mh --- gdb-orig/gdb/config/sparc/linux.mh 2007-04-13 19:13:19.053282000 +0200 +++ gdb-head/gdb/config/sparc/linux.mh 2007-04-13 20:40:15.421238056 +0200 @@ -1,5 +1,5 @@ # Host: GNU/Linux SPARC -NAT_FILE= nm-linux.h +NAT_FILE= config/nm-linux.h NATDEPFILES= sparc-nat.o sparc-linux-nat.o \ corelow.o core-regset.o fork-child.o inf-ptrace.o \ proc-service.o linux-thread-db.o \ diff -urNp gdb-orig/gdb/config/sparc/nm-linux.h gdb-head/gdb/config/sparc/nm-linux.h --- gdb-orig/gdb/config/sparc/nm-linux.h 2007-04-13 19:13:19.056281000 +0200 +++ gdb-head/gdb/config/sparc/nm-linux.h 1970-01-01 01:00:00.000000000 +0100 @@ -1,31 +0,0 @@ -/* Native-dependent definitions for GNU/Linux SPARC. - - Copyright 1989, 1992, 1996, 1998, 1999, 2000, 2002, 2003, 2007 - 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 2 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, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ - -#ifndef NM_LINUX_H -#define NM_LINUX_H - -#include "config/nm-linux.h" - -/* Override copies of {fetch,store}_inferior_registers in `infptrace.c'. */ -#define FETCH_INFERIOR_REGISTERS - -#endif /* nm-linux.h */ diff -urNp gdb-orig/gdb/linux-nat.c gdb-head/gdb/linux-nat.c --- gdb-orig/gdb/linux-nat.c 2007-04-13 19:13:19.067279000 +0200 +++ gdb-head/gdb/linux-nat.c 2007-04-13 20:40:15.434236080 +0200 @@ -3164,35 +3164,12 @@ linux_xfer_partial (struct target_ops *o offset, len); } -#ifndef FETCH_INFERIOR_REGISTERS - -/* Return the address in the core dump or inferior of register - REGNO. */ - -static CORE_ADDR -linux_register_u_offset (int regno) -{ - /* FIXME drow/2005-09-04: The hardcoded use of register_addr should go - away. This requires disentangling the various definitions of it - (particularly alpha-nat.c's). */ - return register_addr (regno, 0); -} - -#endif - /* Create a prototype generic Linux target. The client can override it with local methods. */ -struct target_ops * -linux_target (void) +static void +linux_target_install_ops (struct target_ops *t) { - struct target_ops *t; - -#ifdef FETCH_INFERIOR_REGISTERS - t = inf_ptrace_target (); -#else - t = inf_ptrace_trad_target (linux_register_u_offset); -#endif t->to_insert_fork_catchpoint = child_insert_fork_catchpoint; t->to_insert_vfork_catchpoint = child_insert_vfork_catchpoint; t->to_insert_exec_catchpoint = child_insert_exec_catchpoint; @@ -3205,6 +3182,26 @@ linux_target (void) super_xfer_partial = t->to_xfer_partial; t->to_xfer_partial = linux_xfer_partial; +} + +struct target_ops * +linux_target (void) +{ + struct target_ops *t; + + t = inf_ptrace_target (); + linux_target_install_ops (t); + + return t; +} + +struct target_ops * +linux_trad_target (CORE_ADDR (*register_u_offset)(int)) +{ + struct target_ops *t; + + t = inf_ptrace_trad_target (register_u_offset); + linux_target_install_ops (t); return t; } diff -urNp gdb-orig/gdb/linux-nat.h gdb-head/gdb/linux-nat.h --- gdb-orig/gdb/linux-nat.h 2007-04-13 19:13:19.071279000 +0200 +++ gdb-head/gdb/linux-nat.h 2007-04-13 20:40:15.476229696 +0200 @@ -88,6 +88,11 @@ struct lwp_info *iterate_over_lwps (int override it with local methods. */ struct target_ops * linux_target (void); +/* Create a generic GNU/Linux target using traditional + ptrace register access. */ +struct target_ops * +linux_trad_target (CORE_ADDR (*register_u_offset)(int)); + /* Register the customized GNU/Linux target. This should be used instead of calling add_target directly. */ void linux_nat_add_target (struct target_ops *); diff -urNp gdb-orig/gdb/mips-linux-nat.c gdb-head/gdb/mips-linux-nat.c --- gdb-orig/gdb/mips-linux-nat.c 2007-04-13 19:13:19.076278000 +0200 +++ gdb-head/gdb/mips-linux-nat.c 2007-04-13 20:40:42.497248152 +0200 @@ -26,6 +26,7 @@ #include "target.h" #include "linux-nat.h" #include "mips-linux-tdep.h" +#include "gdbcore.h" #include "gdb_proc_service.h" @@ -246,12 +247,24 @@ mips64_linux_store_registers (int regnum super_store_registers (regnum); } +/* Return the address in the core dump or inferior of register + REGNO. */ + +static CORE_ADDR +mips_linux_register_u_offset (int regno) +{ + /* FIXME drow/2005-09-04: The hardcoded use of register_addr should go + away. This requires disentangling the various definitions of it + (particularly alpha-nat.c's). */ + return register_addr (regno, 0); +} + void _initialize_mips_linux_nat (void); void _initialize_mips_linux_nat (void) { - struct target_ops *t = linux_target (); + struct target_ops *t = linux_trad_target (mips_linux_register_u_offset); super_fetch_registers = t->to_fetch_registers; super_store_registers = t->to_store_registers; -- Dr. Ulrich Weigand GNU Toolchain for Linux on System z and Cell BE Ulrich.Weigand@de.ibm.com