This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[rfc/rft] [2/5] Untangle register_addr: Linux targets


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]