* NEWS: Mention that the i[3456]-*mach3*, i[3456]-*-mach* and

i[3456]-*-osf1mk* configurations have been made obsolete.
* configure.host: Make i[3456]86-*-mach3*, i[3456]86-*mach* and
i[3456]86-*-osf1mk* hosts obsolete.
* confighure.tgt: Make i[3456]86-*-mach3*, i[3456]86-*-osf1mk*
targets obsolete.
* config/i386/i386mach.mh, config/i386/nm-i386mach.h,
config/i386/xm-i386mach.h, config/i386/i386m3.mh,
config/i386/i386m3.mt, config/i386/nm-m3.h,
config/i386/tm-i386m3.h, config/i386/xm-i386m3.h,
config/i386/i386mk.mh, config/i386/i386mk.mt,
config/i386/tm-i386mk.h, config/i386/xm-i386mk.h: Make files
obsolete.
* i386mach-nat.c, i386m3-nat.c: Make files obsolete.
* Makefile.in (ALLDEPFILES): Remove i386mach.c i386m3-nat.c
(i386mach-nat.o, i386m3-nat.o):Make targets obsolete.
This commit is contained in:
Mark Kettenis 2002-08-18 16:32:14 +00:00
parent 61d8d407cd
commit d8ee244c99
16 changed files with 877 additions and 855 deletions

View File

@ -1,3 +1,22 @@
2002-08-18 Mark Kettenis <kettenis@gnu.org>
* NEWS: Mention that the i[3456]-*mach3*, i[3456]-*-mach* and
i[3456]-*-osf1mk* configurations have been made obsolete.
* configure.host: Make i[3456]86-*-mach3*, i[3456]86-*mach* and
i[3456]86-*-osf1mk* hosts obsolete.
* confighure.tgt: Make i[3456]86-*-mach3*, i[3456]86-*-osf1mk*
targets obsolete.
* config/i386/i386mach.mh, config/i386/nm-i386mach.h,
config/i386/xm-i386mach.h, config/i386/i386m3.mh,
config/i386/i386m3.mt, config/i386/nm-m3.h,
config/i386/tm-i386m3.h, config/i386/xm-i386m3.h,
config/i386/i386mk.mh, config/i386/i386mk.mt,
config/i386/tm-i386mk.h, config/i386/xm-i386mk.h: Make files
obsolete.
* i386mach-nat.c, i386m3-nat.c: Make files obsolete.
* Makefile.in (ALLDEPFILES): Remove i386mach.c i386m3-nat.c
(i386mach-nat.o, i386m3-nat.o):Make targets obsolete.
2002-08-18 Andrew Cagney <ac131313@redhat.com>
* config/pa/tm-hppa.h (hppa_store_return_value): Declare.

View File

@ -61,6 +61,9 @@ IBM AIX PS/2 i[3456]86-*-aix
Fujitsu FR30 fr30-*-elf*
Motorola Delta 88000 running Sys V m88k-motorola-sysv or delta88
Argonaut Risc Chip (ARC) arc-*-*
i386 running Mach 3.0 i[3456]86-*-mach3*
i386 running Mach i[3456]86-*-mach*
i386 running OSF/1 i[3456]86-*osf1mk*
* OBSOLETE languages

View File

@ -1,6 +1,6 @@
# Host: Intel 386 running Mach3
NATDEPFILES= i386m3-nat.o m3-nat.o fork-child.o i387-tdep.o core-aout.o
NAT_CLIBS= -lmachid -lnetname -lmach
XM_FILE= xm-i386m3.h
NAT_FILE= nm-m3.h
# OBSOLETE # Host: Intel 386 running Mach3
# OBSOLETE
# OBSOLETE NATDEPFILES= i386m3-nat.o m3-nat.o fork-child.o i387-tdep.o core-aout.o
# OBSOLETE NAT_CLIBS= -lmachid -lnetname -lmach
# OBSOLETE XM_FILE= xm-i386m3.h
# OBSOLETE NAT_FILE= nm-m3.h

View File

@ -1,3 +1,3 @@
# Target: Intel 386 with a.out under Mach 3
TDEPFILES= i386-tdep.o
TM_FILE= tm-i386m3.h
# OBSOLETE # Target: Intel 386 with a.out under Mach 3
# OBSOLETE TDEPFILES= i386-tdep.o
# OBSOLETE TM_FILE= tm-i386m3.h

View File

@ -1,9 +1,9 @@
# Host: Intel 386 running Mach
# This is for mach2, maybe, or is obsolete (and seems to have only
# host and native, not target). Once we get the mach3 stuff working,
# I think it can go away.
XM_FILE= xm-i386mach.h
NAT_FILE= nm-i386mach.h
NATDEPFILES= infptrace.o inftarg.o fork-child.o i386mach-nat.o
# OBSOLETE # Host: Intel 386 running Mach
# OBSOLETE
# OBSOLETE # This is for mach2, maybe, or is obsolete (and seems to have only
# OBSOLETE # host and native, not target). Once we get the mach3 stuff working,
# OBSOLETE # I think it can go away.
# OBSOLETE
# OBSOLETE XM_FILE= xm-i386mach.h
# OBSOLETE NAT_FILE= nm-i386mach.h
# OBSOLETE NATDEPFILES= infptrace.o inftarg.o fork-child.o i386mach-nat.o

View File

@ -1,30 +1,30 @@
/* Native definitions for Mach on an Intel 386
Copyright 1986, 1987, 1989, 1991, 1992, 1996
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. */
#include "regcache.h"
/* Do implement the attach and detach commands. */
/* #define ATTACH_DETACH 1 */
/* Override copies of {fetch,store}_inferior_registers in infptrace.c. */
#define FETCH_INFERIOR_REGISTERS
#define CHILD_PREPARE_TO_STORE() read_register_bytes (0, NULL, REGISTER_BYTES)
// OBSOLETE /* Native definitions for Mach on an Intel 386
// OBSOLETE Copyright 1986, 1987, 1989, 1991, 1992, 1996
// OBSOLETE Free Software Foundation, Inc.
// OBSOLETE
// OBSOLETE This file is part of GDB.
// OBSOLETE
// OBSOLETE This program is free software; you can redistribute it and/or modify
// OBSOLETE it under the terms of the GNU General Public License as published by
// OBSOLETE the Free Software Foundation; either version 2 of the License, or
// OBSOLETE (at your option) any later version.
// OBSOLETE
// OBSOLETE This program is distributed in the hope that it will be useful,
// OBSOLETE but WITHOUT ANY WARRANTY; without even the implied warranty of
// OBSOLETE MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// OBSOLETE GNU General Public License for more details.
// OBSOLETE
// OBSOLETE You should have received a copy of the GNU General Public License
// OBSOLETE along with this program; if not, write to the Free Software
// OBSOLETE Foundation, Inc., 59 Temple Place - Suite 330,
// OBSOLETE Boston, MA 02111-1307, USA. */
// OBSOLETE
// OBSOLETE #include "regcache.h"
// OBSOLETE
// OBSOLETE /* Do implement the attach and detach commands. */
// OBSOLETE /* #define ATTACH_DETACH 1 */
// OBSOLETE
// OBSOLETE /* Override copies of {fetch,store}_inferior_registers in infptrace.c. */
// OBSOLETE #define FETCH_INFERIOR_REGISTERS
// OBSOLETE
// OBSOLETE #define CHILD_PREPARE_TO_STORE() read_register_bytes (0, NULL, REGISTER_BYTES)

View File

@ -1,23 +1,23 @@
/* Native-dependent definitions for Intel 386 running Mach 3.
Copyright 1994 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. */
/* Include the generic Mach 3 definitions. */
#include "config/nm-m3.h"
// OBSOLETE /* Native-dependent definitions for Intel 386 running Mach 3.
// OBSOLETE Copyright 1994 Free Software Foundation, Inc.
// OBSOLETE
// OBSOLETE This file is part of GDB.
// OBSOLETE
// OBSOLETE This program is free software; you can redistribute it and/or modify
// OBSOLETE it under the terms of the GNU General Public License as published by
// OBSOLETE the Free Software Foundation; either version 2 of the License, or
// OBSOLETE (at your option) any later version.
// OBSOLETE
// OBSOLETE This program is distributed in the hope that it will be useful,
// OBSOLETE but WITHOUT ANY WARRANTY; without even the implied warranty of
// OBSOLETE MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// OBSOLETE GNU General Public License for more details.
// OBSOLETE
// OBSOLETE You should have received a copy of the GNU General Public License
// OBSOLETE along with this program; if not, write to the Free Software
// OBSOLETE Foundation, Inc., 59 Temple Place - Suite 330,
// OBSOLETE Boston, MA 02111-1307, USA. */
// OBSOLETE
// OBSOLETE /* Include the generic Mach 3 definitions. */
// OBSOLETE
// OBSOLETE #include "config/nm-m3.h"

View File

@ -1,56 +1,56 @@
/* Macro definitions for i386, Mach 3.0
Copyright 1992, 1993, 1995, 1999 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. */
/* Include common definitions for Mach3 systems */
#include "config/nm-m3.h"
/* Define offsets to access CPROC stack when it does not have
* a kernel thread.
*/
#define MACHINE_CPROC_SP_OFFSET 20
#define MACHINE_CPROC_PC_OFFSET 16
#define MACHINE_CPROC_FP_OFFSET 12
/* Thread flavors used in re-setting the T bit.
* @@ this is also bad for cross debugging.
*/
#define TRACE_FLAVOR i386_THREAD_STATE
#define TRACE_FLAVOR_SIZE i386_THREAD_STATE_COUNT
#define TRACE_SET(x,state) \
((struct i386_thread_state *)state)->efl |= 0x100
#define TRACE_CLEAR(x,state) \
((((struct i386_thread_state *)state)->efl &= ~0x100), 1)
/* we can do it */
#define ATTACH_DETACH 1
/* Sigh. There should be a file for i386 but no sysv stuff in it */
#include "i386/tm-i386.h"
/* I want to test this float info code. See comment in tm-i386v.h */
#undef FLOAT_INFO
#define FLOAT_INFO { i386_mach3_float_info (); }
/* Address of end of stack space.
* for MACH, see <machine/vmparam.h>
* @@@ I don't know what is in the 5 ints...
*/
#undef STACK_END_ADDR
#define STACK_END_ADDR (0xc0000000-sizeof(int [5]))
// OBSOLETE /* Macro definitions for i386, Mach 3.0
// OBSOLETE Copyright 1992, 1993, 1995, 1999 Free Software Foundation, Inc.
// OBSOLETE
// OBSOLETE This file is part of GDB.
// OBSOLETE
// OBSOLETE This program is free software; you can redistribute it and/or modify
// OBSOLETE it under the terms of the GNU General Public License as published by
// OBSOLETE the Free Software Foundation; either version 2 of the License, or
// OBSOLETE (at your option) any later version.
// OBSOLETE
// OBSOLETE This program is distributed in the hope that it will be useful,
// OBSOLETE but WITHOUT ANY WARRANTY; without even the implied warranty of
// OBSOLETE MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// OBSOLETE GNU General Public License for more details.
// OBSOLETE
// OBSOLETE You should have received a copy of the GNU General Public License
// OBSOLETE along with this program; if not, write to the Free Software
// OBSOLETE Foundation, Inc., 59 Temple Place - Suite 330,
// OBSOLETE Boston, MA 02111-1307, USA. */
// OBSOLETE
// OBSOLETE /* Include common definitions for Mach3 systems */
// OBSOLETE #include "config/nm-m3.h"
// OBSOLETE
// OBSOLETE /* Define offsets to access CPROC stack when it does not have
// OBSOLETE * a kernel thread.
// OBSOLETE */
// OBSOLETE #define MACHINE_CPROC_SP_OFFSET 20
// OBSOLETE #define MACHINE_CPROC_PC_OFFSET 16
// OBSOLETE #define MACHINE_CPROC_FP_OFFSET 12
// OBSOLETE
// OBSOLETE /* Thread flavors used in re-setting the T bit.
// OBSOLETE * @@ this is also bad for cross debugging.
// OBSOLETE */
// OBSOLETE #define TRACE_FLAVOR i386_THREAD_STATE
// OBSOLETE #define TRACE_FLAVOR_SIZE i386_THREAD_STATE_COUNT
// OBSOLETE #define TRACE_SET(x,state) \
// OBSOLETE ((struct i386_thread_state *)state)->efl |= 0x100
// OBSOLETE #define TRACE_CLEAR(x,state) \
// OBSOLETE ((((struct i386_thread_state *)state)->efl &= ~0x100), 1)
// OBSOLETE
// OBSOLETE /* we can do it */
// OBSOLETE #define ATTACH_DETACH 1
// OBSOLETE
// OBSOLETE /* Sigh. There should be a file for i386 but no sysv stuff in it */
// OBSOLETE #include "i386/tm-i386.h"
// OBSOLETE
// OBSOLETE /* I want to test this float info code. See comment in tm-i386v.h */
// OBSOLETE #undef FLOAT_INFO
// OBSOLETE #define FLOAT_INFO { i386_mach3_float_info (); }
// OBSOLETE
// OBSOLETE /* Address of end of stack space.
// OBSOLETE * for MACH, see <machine/vmparam.h>
// OBSOLETE * @@@ I don't know what is in the 5 ints...
// OBSOLETE */
// OBSOLETE #undef STACK_END_ADDR
// OBSOLETE #define STACK_END_ADDR (0xc0000000-sizeof(int [5]))

View File

@ -1,38 +1,38 @@
/* Macro definitions for i386, Mach 3.0, OSF 1/MK
Copyright 1992, 1993, 2000 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. */
/* Until OSF switches to a newer Mach kernel that has
* a different get_emul_vector() interface.
*/
#define MK67 1
#include "i386/tm-i386m3.h"
/* FIMXE: kettenis/2000-03-26: On OSF 1, `long double' is equivalent
to `double'. However, I'm not sure what is the consequence of:
#define TARGET_LONG_DOUBLE_FORMAT TARGET_DOUBLE_FORMAT
#define TARGET_LONG_DOUBLE_BIT TARGET_DOUBLE_BIT
So I'll go with the current status quo instead. It looks like this
target won't compile anyway. Perhaps it should be obsoleted? */
#undef TARGET_LONG_DOUBLE_FORMAT
#undef TARGET_LONG_DOUBLE_BIT
// OBSOLETE /* Macro definitions for i386, Mach 3.0, OSF 1/MK
// OBSOLETE Copyright 1992, 1993, 2000 Free Software Foundation, Inc.
// OBSOLETE
// OBSOLETE This file is part of GDB.
// OBSOLETE
// OBSOLETE This program is free software; you can redistribute it and/or modify
// OBSOLETE it under the terms of the GNU General Public License as published by
// OBSOLETE the Free Software Foundation; either version 2 of the License, or
// OBSOLETE (at your option) any later version.
// OBSOLETE
// OBSOLETE This program is distributed in the hope that it will be useful,
// OBSOLETE but WITHOUT ANY WARRANTY; without even the implied warranty of
// OBSOLETE MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// OBSOLETE GNU General Public License for more details.
// OBSOLETE
// OBSOLETE You should have received a copy of the GNU General Public License
// OBSOLETE along with this program; if not, write to the Free Software
// OBSOLETE Foundation, Inc., 59 Temple Place - Suite 330,
// OBSOLETE Boston, MA 02111-1307, USA. */
// OBSOLETE
// OBSOLETE /* Until OSF switches to a newer Mach kernel that has
// OBSOLETE * a different get_emul_vector() interface.
// OBSOLETE */
// OBSOLETE #define MK67 1
// OBSOLETE
// OBSOLETE #include "i386/tm-i386m3.h"
// OBSOLETE
// OBSOLETE /* FIMXE: kettenis/2000-03-26: On OSF 1, `long double' is equivalent
// OBSOLETE to `double'. However, I'm not sure what is the consequence of:
// OBSOLETE
// OBSOLETE #define TARGET_LONG_DOUBLE_FORMAT TARGET_DOUBLE_FORMAT
// OBSOLETE #define TARGET_LONG_DOUBLE_BIT TARGET_DOUBLE_BIT
// OBSOLETE
// OBSOLETE So I'll go with the current status quo instead. It looks like this
// OBSOLETE target won't compile anyway. Perhaps it should be obsoleted? */
// OBSOLETE
// OBSOLETE #undef TARGET_LONG_DOUBLE_FORMAT
// OBSOLETE #undef TARGET_LONG_DOUBLE_BIT

View File

@ -1,33 +1,33 @@
/* Definitions to make GDB run on Mach 3 on an Intel 386
Copyright 1986, 1987, 1989, 1991, 1993, 1994, 1996
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. */
/* Do implement the attach and detach commands. */
#define ATTACH_DETACH 1
/* Not needeed */
#define KERNEL_U_ADDR 0
#ifndef EMULATOR_BASE
/* For EMULATOR_BASE and EMULATOR_END.
* OSF 1/MK has different values in some other place.
*/
#include <machine/vmparam.h>
#endif /* EMULATOR_BASE */
// OBSOLETE /* Definitions to make GDB run on Mach 3 on an Intel 386
// OBSOLETE Copyright 1986, 1987, 1989, 1991, 1993, 1994, 1996
// OBSOLETE Free Software Foundation, Inc.
// OBSOLETE
// OBSOLETE This file is part of GDB.
// OBSOLETE
// OBSOLETE This program is free software; you can redistribute it and/or modify
// OBSOLETE it under the terms of the GNU General Public License as published by
// OBSOLETE the Free Software Foundation; either version 2 of the License, or
// OBSOLETE (at your option) any later version.
// OBSOLETE
// OBSOLETE This program is distributed in the hope that it will be useful,
// OBSOLETE but WITHOUT ANY WARRANTY; without even the implied warranty of
// OBSOLETE MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// OBSOLETE GNU General Public License for more details.
// OBSOLETE
// OBSOLETE You should have received a copy of the GNU General Public License
// OBSOLETE along with this program; if not, write to the Free Software
// OBSOLETE Foundation, Inc., 59 Temple Place - Suite 330,
// OBSOLETE Boston, MA 02111-1307, USA. */
// OBSOLETE
// OBSOLETE /* Do implement the attach and detach commands. */
// OBSOLETE #define ATTACH_DETACH 1
// OBSOLETE
// OBSOLETE /* Not needeed */
// OBSOLETE #define KERNEL_U_ADDR 0
// OBSOLETE
// OBSOLETE #ifndef EMULATOR_BASE
// OBSOLETE /* For EMULATOR_BASE and EMULATOR_END.
// OBSOLETE * OSF 1/MK has different values in some other place.
// OBSOLETE */
// OBSOLETE #include <machine/vmparam.h>
// OBSOLETE #endif /* EMULATOR_BASE */

View File

@ -1,28 +1,28 @@
/* Definitions to make GDB run on Mach on an Intel 386
Copyright 1986, 1987, 1989, 1991, 1992, 1994, 1996, 2001
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. */
/* This is the amount to subtract from u.u_ar0
to get the offset in the core file of the register values. */
#define KERNEL_U_ADDR (0x80000000 - (UPAGES * NBPG))
/* <errno.h> only defines this if __STDC__!!! */
extern int errno;
// OBSOLETE /* Definitions to make GDB run on Mach on an Intel 386
// OBSOLETE Copyright 1986, 1987, 1989, 1991, 1992, 1994, 1996, 2001
// OBSOLETE Free Software Foundation, Inc.
// OBSOLETE
// OBSOLETE This file is part of GDB.
// OBSOLETE
// OBSOLETE This program is free software; you can redistribute it and/or modify
// OBSOLETE it under the terms of the GNU General Public License as published by
// OBSOLETE the Free Software Foundation; either version 2 of the License, or
// OBSOLETE (at your option) any later version.
// OBSOLETE
// OBSOLETE This program is distributed in the hope that it will be useful,
// OBSOLETE but WITHOUT ANY WARRANTY; without even the implied warranty of
// OBSOLETE MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// OBSOLETE GNU General Public License for more details.
// OBSOLETE
// OBSOLETE You should have received a copy of the GNU General Public License
// OBSOLETE along with this program; if not, write to the Free Software
// OBSOLETE Foundation, Inc., 59 Temple Place - Suite 330,
// OBSOLETE Boston, MA 02111-1307, USA. */
// OBSOLETE
// OBSOLETE /* This is the amount to subtract from u.u_ar0
// OBSOLETE to get the offset in the core file of the register values. */
// OBSOLETE
// OBSOLETE #define KERNEL_U_ADDR (0x80000000 - (UPAGES * NBPG))
// OBSOLETE
// OBSOLETE /* <errno.h> only defines this if __STDC__!!! */
// OBSOLETE extern int errno;

View File

@ -1,26 +1,26 @@
/* Definitions to make GDB run on Mach 3 OSF 1/MK on an Intel 386
Copyright 1992, 1993, 1998 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. */
#define HAVE_TERMIO 1
#define EMULATOR_BASE 0xa0000000
#define EMULATOR_END 0xa0040000
#include "i386/xm-i386m3.h"
// OBSOLETE /* Definitions to make GDB run on Mach 3 OSF 1/MK on an Intel 386
// OBSOLETE Copyright 1992, 1993, 1998 Free Software Foundation, Inc.
// OBSOLETE
// OBSOLETE This file is part of GDB.
// OBSOLETE
// OBSOLETE This program is free software; you can redistribute it and/or modify
// OBSOLETE it under the terms of the GNU General Public License as published by
// OBSOLETE the Free Software Foundation; either version 2 of the License, or
// OBSOLETE (at your option) any later version.
// OBSOLETE
// OBSOLETE This program is distributed in the hope that it will be useful,
// OBSOLETE but WITHOUT ANY WARRANTY; without even the implied warranty of
// OBSOLETE MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// OBSOLETE GNU General Public License for more details.
// OBSOLETE
// OBSOLETE You should have received a copy of the GNU General Public License
// OBSOLETE along with this program; if not, write to the Free Software
// OBSOLETE Foundation, Inc., 59 Temple Place - Suite 330,
// OBSOLETE Boston, MA 02111-1307, USA. */
// OBSOLETE
// OBSOLETE #define HAVE_TERMIO 1
// OBSOLETE
// OBSOLETE #define EMULATOR_BASE 0xa0000000
// OBSOLETE #define EMULATOR_END 0xa0040000
// OBSOLETE
// OBSOLETE #include "i386/xm-i386m3.h"

View File

@ -65,11 +65,11 @@ i[3456]86-*-go32*) gdb_host=go32 ;;
i[3456]86-*-msdosdjgpp*) gdb_host=go32 ;;
i[3456]86-*-linux*) gdb_host=linux ;;
i[3456]86-*-lynxos*) gdb_host=i386lynx ;;
i[3456]86-*-mach3*) gdb_host=i386m3 ;;
i[3456]86-*-mach*) gdb_host=i386mach ;;
# OBSOLETE i[3456]86-*-mach3*) gdb_host=i386m3 ;;
# OBSOLETE i[3456]86-*-mach*) gdb_host=i386mach ;;
i[3456]86-*-gnu*) gdb_host=i386gnu ;;
i[3456]86-*-openbsd*) gdb_host=obsd ;;
i[3456]86-*-osf1mk*) gdb_host=i386mk ;;
# OBSOLETE i[3456]86-*-osf1mk*) gdb_host=i386mk ;;
i[3456]86-*-sco3.2v5*) gdb_host=i386sco5 ;;
i[3456]86-*-sco3.2v4*) gdb_host=i386sco4 ;;
i[3456]86-*-sco*) gdb_host=i386sco ;;

View File

@ -111,11 +111,11 @@ i[3456]86-*-linux*) gdb_target=linux
build_gdbserver=yes
;;
i[3456]86-*-isc*) gdb_target=i386v ;;
i[3456]86-*-mach3*) gdb_target=i386m3 ;;
# OBSOLETE i[3456]86-*-mach3*) gdb_target=i386m3 ;;
i[3456]86-*-gnu*) gdb_target=i386gnu ;;
i[3456]86-*-netware*) gdb_target=i386nw
configdirs="${configdirs} nlm" ;;
i[3456]86-*-osf1mk*) gdb_target=i386mk ;;
# OBSOLETE i[3456]86-*-osf1mk*) gdb_target=i386mk ;;
i[3456]86-*-cygwin*) gdb_target=cygwin ;;
i[3456]86-*-vxworks*) gdb_target=vxworks ;;
i[3456]86-*-*) gdb_target=embed ;;

View File

@ -1,426 +1,426 @@
/* Low level interface to I386 running mach 3.0.
Copyright 1992, 1993, 1994, 1996, 2000, 2001
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. */
#include "defs.h"
#include "inferior.h"
#include "floatformat.h"
#include "regcache.h"
#include <stdio.h>
#include <mach.h>
#include <mach/message.h>
#include <mach/exception.h>
#include <mach_error.h>
/* Hmmm... Should this not be here?
* Now for i386_float_info() target_has_execution
*/
#include <target.h>
/* This mess is duplicated in bfd/i386mach3.h
* This is an ugly way to hack around the incorrect
* definition of UPAGES in i386/machparam.h.
*
* The definition should specify the size reserved
* for "struct user" in core files in PAGES,
* but instead it gives it in 512-byte core-clicks
* for i386 and i860.
*/
#include <sys/param.h>
#if UPAGES == 16
#define UAREA_SIZE ctob(UPAGES)
#elif UPAGES == 2
#define UAREA_SIZE (NBPG*UPAGES)
#else
FIXME ! !UPAGES is neither 2 nor 16
#endif
/* @@@ Should move print_387_status() to i387-tdep.c */
extern void print_387_control_word (); /* i387-tdep.h */
extern void print_387_status_word ();
#define private static
/* Find offsets to thread states at compile time.
* If your compiler does not grok this, calculate offsets
* offsets yourself and use them (or get a compatible compiler :-)
*/
#define REG_OFFSET(reg) (int)(&((struct i386_thread_state *)0)->reg)
/* at reg_offset[i] is the offset to the i386_thread_state
* location where the gdb registers[i] is stored.
*/
static int reg_offset[] =
{
REG_OFFSET (eax), REG_OFFSET (ecx), REG_OFFSET (edx), REG_OFFSET (ebx),
REG_OFFSET (uesp), REG_OFFSET (ebp), REG_OFFSET (esi), REG_OFFSET (edi),
REG_OFFSET (eip), REG_OFFSET (efl), REG_OFFSET (cs), REG_OFFSET (ss),
REG_OFFSET (ds), REG_OFFSET (es), REG_OFFSET (fs), REG_OFFSET (gs)
};
#define REG_ADDRESS(state,regnum) ((char *)(state)+reg_offset[regnum])
/* Fetch COUNT contiguous registers from thread STATE starting from REGNUM
* Caller knows that the regs handled in one transaction are of same size.
*/
#define FETCH_REGS(state, regnum, count) \
memcpy (&registers[REGISTER_BYTE (regnum)], \
REG_ADDRESS (state, regnum), \
count*REGISTER_SIZE)
/* Store COUNT contiguous registers to thread STATE starting from REGNUM */
#define STORE_REGS(state, regnum, count) \
memcpy (REG_ADDRESS (state, regnum), \
&registers[REGISTER_BYTE (regnum)], \
count*REGISTER_SIZE)
/*
* Fetch inferiors registers for gdb.
* REGNO specifies which (as gdb views it) register, -1 for all.
*/
void
fetch_inferior_registers (int regno)
{
kern_return_t ret;
thread_state_data_t state;
unsigned int stateCnt = i386_THREAD_STATE_COUNT;
int index;
if (!MACH_PORT_VALID (current_thread))
error ("fetch inferior registers: Invalid thread");
if (must_suspend_thread)
setup_thread (current_thread, 1);
ret = thread_get_state (current_thread,
i386_THREAD_STATE,
state,
&stateCnt);
if (ret != KERN_SUCCESS)
warning ("fetch_inferior_registers: %s ",
mach_error_string (ret));
#if 0
/* It may be more effective to store validate all of them,
* since we fetched them all anyway
*/
else if (regno != -1)
supply_register (regno, (char *) state + reg_offset[regno]);
#endif
else
{
for (index = 0; index < NUM_REGS; index++)
supply_register (index, (char *) state + reg_offset[index]);
}
if (must_suspend_thread)
setup_thread (current_thread, 0);
}
/* Store our register values back into the inferior.
* If REGNO is -1, do this for all registers.
* Otherwise, REGNO specifies which register
*
* On mach3 all registers are always saved in one call.
*/
void
store_inferior_registers (int regno)
{
kern_return_t ret;
thread_state_data_t state;
unsigned int stateCnt = i386_THREAD_STATE_COUNT;
register int index;
if (!MACH_PORT_VALID (current_thread))
error ("store inferior registers: Invalid thread");
if (must_suspend_thread)
setup_thread (current_thread, 1);
/* Fetch the state of the current thread */
ret = thread_get_state (current_thread,
i386_THREAD_STATE,
state,
&stateCnt);
if (ret != KERN_SUCCESS)
{
warning ("store_inferior_registers (get): %s",
mach_error_string (ret));
if (must_suspend_thread)
setup_thread (current_thread, 0);
return;
}
/* move gdb's registers to thread's state
* Since we save all registers anyway, save the ones
* that gdb thinks are valid (e.g. ignore the regno
* parameter)
*/
#if 0
if (regno != -1)
STORE_REGS (state, regno, 1);
else
#endif
{
for (index = 0; index < NUM_REGS; index++)
STORE_REGS (state, index, 1);
}
/* Write gdb's current view of register to the thread
*/
ret = thread_set_state (current_thread,
i386_THREAD_STATE,
state,
i386_THREAD_STATE_COUNT);
if (ret != KERN_SUCCESS)
warning ("store_inferior_registers (set): %s",
mach_error_string (ret));
if (must_suspend_thread)
setup_thread (current_thread, 0);
}
/* Return the address in the core dump or inferior of register REGNO.
* BLOCKEND should be the address of the end of the UPAGES area read
* in memory, but it's not?
*
* Currently our UX server dumps the whole thread state to the
* core file. If your UX does something else, adapt the routine
* below to return the offset to the given register.
*
* Called by core-aout.c(fetch_core_registers)
*/
CORE_ADDR
register_addr (int regno, CORE_ADDR blockend)
{
CORE_ADDR addr;
if (regno < 0 || regno >= NUM_REGS)
error ("Invalid register number %d.", regno);
/* UAREA_SIZE == 8 kB in i386 */
addr = (unsigned int) REG_ADDRESS (UAREA_SIZE - sizeof (struct i386_thread_state), regno);
return addr;
}
/* jtv@hut.fi: I copied and modified this 387 code from
* gdb/i386-xdep.c. Modifications for Mach 3.0.
*
* i387 status dumper. See also i387-tdep.c
*/
struct env387
{
unsigned short control;
unsigned short r0;
unsigned short status;
unsigned short r1;
unsigned short tag;
unsigned short r2;
unsigned long eip;
unsigned short code_seg;
unsigned short opcode;
unsigned long operand;
unsigned short operand_seg;
unsigned short r3;
unsigned char regs[8][10];
};
/* This routine is machine independent?
* Should move it to i387-tdep.c but you need to export struct env387
*/
private
print_387_status (unsigned short status, struct env387 *ep)
{
int i;
int bothstatus;
int top;
int fpreg;
unsigned char *p;
bothstatus = ((status != 0) && (ep->status != 0));
if (status != 0)
{
if (bothstatus)
printf_unfiltered ("u: ");
print_387_status_word (status);
}
if (ep->status != 0)
{
if (bothstatus)
printf_unfiltered ("e: ");
print_387_status_word (ep->status);
}
print_387_control_word (ep->control);
printf_unfiltered ("last exception: ");
printf_unfiltered ("opcode %s; ", local_hex_string (ep->opcode));
printf_unfiltered ("pc %s:", local_hex_string (ep->code_seg));
printf_unfiltered ("%s; ", local_hex_string (ep->eip));
printf_unfiltered ("operand %s", local_hex_string (ep->operand_seg));
printf_unfiltered (":%s\n", local_hex_string (ep->operand));
top = (ep->status >> 11) & 7;
printf_unfiltered ("regno tag msb lsb value\n");
for (fpreg = 7; fpreg >= 0; fpreg--)
{
double val;
printf_unfiltered ("%s %d: ", fpreg == top ? "=>" : " ", fpreg);
switch ((ep->tag >> (fpreg * 2)) & 3)
{
case 0:
printf_unfiltered ("valid ");
break;
case 1:
printf_unfiltered ("zero ");
break;
case 2:
printf_unfiltered ("trap ");
break;
case 3:
printf_unfiltered ("empty ");
break;
}
for (i = 9; i >= 0; i--)
printf_unfiltered ("%02x", ep->regs[fpreg][i]);
floatformat_to_double (&floatformat_i387_ext, (char *) ep->regs[fpreg],
&val);
printf_unfiltered (" %g\n", val);
}
if (ep->r0)
printf_unfiltered ("warning: reserved0 is %s\n", local_hex_string (ep->r0));
if (ep->r1)
printf_unfiltered ("warning: reserved1 is %s\n", local_hex_string (ep->r1));
if (ep->r2)
printf_unfiltered ("warning: reserved2 is %s\n", local_hex_string (ep->r2));
if (ep->r3)
printf_unfiltered ("warning: reserved3 is %s\n", local_hex_string (ep->r3));
}
/*
* values that go into fp_kind (from <i386/fpreg.h>)
*/
#define FP_NO 0 /* no fp chip, no emulator (no fp support) */
#define FP_SW 1 /* no fp chip, using software emulator */
#define FP_HW 2 /* chip present bit */
#define FP_287 2 /* 80287 chip present */
#define FP_387 3 /* 80387 chip present */
typedef struct fpstate
{
#if 1
unsigned char state[FP_STATE_BYTES]; /* "hardware" state */
#else
struct env387 state; /* Actually this */
#endif
int status; /* Duplicate status */
}
*fpstate_t;
/* Mach 3 specific routines.
*/
private boolean_t
get_i387_state (struct fpstate *fstate)
{
kern_return_t ret;
thread_state_data_t state;
unsigned int fsCnt = i386_FLOAT_STATE_COUNT;
struct i386_float_state *fsp;
ret = thread_get_state (current_thread,
i386_FLOAT_STATE,
state,
&fsCnt);
if (ret != KERN_SUCCESS)
{
warning ("Can not get live floating point state: %s",
mach_error_string (ret));
return FALSE;
}
fsp = (struct i386_float_state *) state;
/* The 387 chip (also 486 counts) or a software emulator? */
if (!fsp->initialized || (fsp->fpkind != FP_387 && fsp->fpkind != FP_SW))
return FALSE;
/* Clear the target then copy thread's float state there.
Make a copy of the status word, for some reason?
*/
memset (fstate, 0, sizeof (struct fpstate));
fstate->status = fsp->exc_status;
memcpy (fstate->state, (char *) &fsp->hw_state, FP_STATE_BYTES);
return TRUE;
}
private boolean_t
get_i387_core_state (struct fpstate *fstate)
{
/* Not implemented yet. Core files do not contain float state. */
return FALSE;
}
/*
* This is called by "info float" command
*/
void
i386_mach3_float_info (void)
{
char buf[sizeof (struct fpstate) + 2 * sizeof (int)];
boolean_t valid = FALSE;
fpstate_t fps;
if (target_has_execution)
valid = get_i387_state (buf);
#if 0
else if (WE HAVE CORE FILE) /* @@@@ Core files not supported */
valid = get_i387_core_state (buf);
#endif
if (!valid)
{
warning ("no floating point status saved");
return;
}
fps = (fpstate_t) buf;
print_387_status (fps->status, (struct env387 *) fps->state);
}
// OBSOLETE /* Low level interface to I386 running mach 3.0.
// OBSOLETE Copyright 1992, 1993, 1994, 1996, 2000, 2001
// OBSOLETE Free Software Foundation, Inc.
// OBSOLETE
// OBSOLETE This file is part of GDB.
// OBSOLETE
// OBSOLETE This program is free software; you can redistribute it and/or modify
// OBSOLETE it under the terms of the GNU General Public License as published by
// OBSOLETE the Free Software Foundation; either version 2 of the License, or
// OBSOLETE (at your option) any later version.
// OBSOLETE
// OBSOLETE This program is distributed in the hope that it will be useful,
// OBSOLETE but WITHOUT ANY WARRANTY; without even the implied warranty of
// OBSOLETE MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// OBSOLETE GNU General Public License for more details.
// OBSOLETE
// OBSOLETE You should have received a copy of the GNU General Public License
// OBSOLETE along with this program; if not, write to the Free Software
// OBSOLETE Foundation, Inc., 59 Temple Place - Suite 330,
// OBSOLETE Boston, MA 02111-1307, USA. */
// OBSOLETE
// OBSOLETE #include "defs.h"
// OBSOLETE #include "inferior.h"
// OBSOLETE #include "floatformat.h"
// OBSOLETE #include "regcache.h"
// OBSOLETE
// OBSOLETE #include <stdio.h>
// OBSOLETE
// OBSOLETE #include <mach.h>
// OBSOLETE #include <mach/message.h>
// OBSOLETE #include <mach/exception.h>
// OBSOLETE #include <mach_error.h>
// OBSOLETE
// OBSOLETE /* Hmmm... Should this not be here?
// OBSOLETE * Now for i386_float_info() target_has_execution
// OBSOLETE */
// OBSOLETE #include <target.h>
// OBSOLETE
// OBSOLETE /* This mess is duplicated in bfd/i386mach3.h
// OBSOLETE
// OBSOLETE * This is an ugly way to hack around the incorrect
// OBSOLETE * definition of UPAGES in i386/machparam.h.
// OBSOLETE *
// OBSOLETE * The definition should specify the size reserved
// OBSOLETE * for "struct user" in core files in PAGES,
// OBSOLETE * but instead it gives it in 512-byte core-clicks
// OBSOLETE * for i386 and i860.
// OBSOLETE */
// OBSOLETE #include <sys/param.h>
// OBSOLETE #if UPAGES == 16
// OBSOLETE #define UAREA_SIZE ctob(UPAGES)
// OBSOLETE #elif UPAGES == 2
// OBSOLETE #define UAREA_SIZE (NBPG*UPAGES)
// OBSOLETE #else
// OBSOLETE FIXME ! !UPAGES is neither 2 nor 16
// OBSOLETE #endif
// OBSOLETE
// OBSOLETE /* @@@ Should move print_387_status() to i387-tdep.c */
// OBSOLETE extern void print_387_control_word (); /* i387-tdep.h */
// OBSOLETE extern void print_387_status_word ();
// OBSOLETE
// OBSOLETE #define private static
// OBSOLETE
// OBSOLETE
// OBSOLETE /* Find offsets to thread states at compile time.
// OBSOLETE * If your compiler does not grok this, calculate offsets
// OBSOLETE * offsets yourself and use them (or get a compatible compiler :-)
// OBSOLETE */
// OBSOLETE
// OBSOLETE #define REG_OFFSET(reg) (int)(&((struct i386_thread_state *)0)->reg)
// OBSOLETE
// OBSOLETE /* at reg_offset[i] is the offset to the i386_thread_state
// OBSOLETE * location where the gdb registers[i] is stored.
// OBSOLETE */
// OBSOLETE
// OBSOLETE static int reg_offset[] =
// OBSOLETE {
// OBSOLETE REG_OFFSET (eax), REG_OFFSET (ecx), REG_OFFSET (edx), REG_OFFSET (ebx),
// OBSOLETE REG_OFFSET (uesp), REG_OFFSET (ebp), REG_OFFSET (esi), REG_OFFSET (edi),
// OBSOLETE REG_OFFSET (eip), REG_OFFSET (efl), REG_OFFSET (cs), REG_OFFSET (ss),
// OBSOLETE REG_OFFSET (ds), REG_OFFSET (es), REG_OFFSET (fs), REG_OFFSET (gs)
// OBSOLETE };
// OBSOLETE
// OBSOLETE #define REG_ADDRESS(state,regnum) ((char *)(state)+reg_offset[regnum])
// OBSOLETE
// OBSOLETE /* Fetch COUNT contiguous registers from thread STATE starting from REGNUM
// OBSOLETE * Caller knows that the regs handled in one transaction are of same size.
// OBSOLETE */
// OBSOLETE #define FETCH_REGS(state, regnum, count) \
// OBSOLETE memcpy (&registers[REGISTER_BYTE (regnum)], \
// OBSOLETE REG_ADDRESS (state, regnum), \
// OBSOLETE count*REGISTER_SIZE)
// OBSOLETE
// OBSOLETE /* Store COUNT contiguous registers to thread STATE starting from REGNUM */
// OBSOLETE #define STORE_REGS(state, regnum, count) \
// OBSOLETE memcpy (REG_ADDRESS (state, regnum), \
// OBSOLETE &registers[REGISTER_BYTE (regnum)], \
// OBSOLETE count*REGISTER_SIZE)
// OBSOLETE
// OBSOLETE /*
// OBSOLETE * Fetch inferiors registers for gdb.
// OBSOLETE * REGNO specifies which (as gdb views it) register, -1 for all.
// OBSOLETE */
// OBSOLETE
// OBSOLETE void
// OBSOLETE fetch_inferior_registers (int regno)
// OBSOLETE {
// OBSOLETE kern_return_t ret;
// OBSOLETE thread_state_data_t state;
// OBSOLETE unsigned int stateCnt = i386_THREAD_STATE_COUNT;
// OBSOLETE int index;
// OBSOLETE
// OBSOLETE if (!MACH_PORT_VALID (current_thread))
// OBSOLETE error ("fetch inferior registers: Invalid thread");
// OBSOLETE
// OBSOLETE if (must_suspend_thread)
// OBSOLETE setup_thread (current_thread, 1);
// OBSOLETE
// OBSOLETE ret = thread_get_state (current_thread,
// OBSOLETE i386_THREAD_STATE,
// OBSOLETE state,
// OBSOLETE &stateCnt);
// OBSOLETE
// OBSOLETE if (ret != KERN_SUCCESS)
// OBSOLETE warning ("fetch_inferior_registers: %s ",
// OBSOLETE mach_error_string (ret));
// OBSOLETE #if 0
// OBSOLETE /* It may be more effective to store validate all of them,
// OBSOLETE * since we fetched them all anyway
// OBSOLETE */
// OBSOLETE else if (regno != -1)
// OBSOLETE supply_register (regno, (char *) state + reg_offset[regno]);
// OBSOLETE #endif
// OBSOLETE else
// OBSOLETE {
// OBSOLETE for (index = 0; index < NUM_REGS; index++)
// OBSOLETE supply_register (index, (char *) state + reg_offset[index]);
// OBSOLETE }
// OBSOLETE
// OBSOLETE if (must_suspend_thread)
// OBSOLETE setup_thread (current_thread, 0);
// OBSOLETE }
// OBSOLETE
// OBSOLETE /* Store our register values back into the inferior.
// OBSOLETE * If REGNO is -1, do this for all registers.
// OBSOLETE * Otherwise, REGNO specifies which register
// OBSOLETE *
// OBSOLETE * On mach3 all registers are always saved in one call.
// OBSOLETE */
// OBSOLETE void
// OBSOLETE store_inferior_registers (int regno)
// OBSOLETE {
// OBSOLETE kern_return_t ret;
// OBSOLETE thread_state_data_t state;
// OBSOLETE unsigned int stateCnt = i386_THREAD_STATE_COUNT;
// OBSOLETE register int index;
// OBSOLETE
// OBSOLETE if (!MACH_PORT_VALID (current_thread))
// OBSOLETE error ("store inferior registers: Invalid thread");
// OBSOLETE
// OBSOLETE if (must_suspend_thread)
// OBSOLETE setup_thread (current_thread, 1);
// OBSOLETE
// OBSOLETE /* Fetch the state of the current thread */
// OBSOLETE ret = thread_get_state (current_thread,
// OBSOLETE i386_THREAD_STATE,
// OBSOLETE state,
// OBSOLETE &stateCnt);
// OBSOLETE
// OBSOLETE if (ret != KERN_SUCCESS)
// OBSOLETE {
// OBSOLETE warning ("store_inferior_registers (get): %s",
// OBSOLETE mach_error_string (ret));
// OBSOLETE if (must_suspend_thread)
// OBSOLETE setup_thread (current_thread, 0);
// OBSOLETE return;
// OBSOLETE }
// OBSOLETE
// OBSOLETE /* move gdb's registers to thread's state
// OBSOLETE
// OBSOLETE * Since we save all registers anyway, save the ones
// OBSOLETE * that gdb thinks are valid (e.g. ignore the regno
// OBSOLETE * parameter)
// OBSOLETE */
// OBSOLETE #if 0
// OBSOLETE if (regno != -1)
// OBSOLETE STORE_REGS (state, regno, 1);
// OBSOLETE else
// OBSOLETE #endif
// OBSOLETE {
// OBSOLETE for (index = 0; index < NUM_REGS; index++)
// OBSOLETE STORE_REGS (state, index, 1);
// OBSOLETE }
// OBSOLETE
// OBSOLETE /* Write gdb's current view of register to the thread
// OBSOLETE */
// OBSOLETE ret = thread_set_state (current_thread,
// OBSOLETE i386_THREAD_STATE,
// OBSOLETE state,
// OBSOLETE i386_THREAD_STATE_COUNT);
// OBSOLETE
// OBSOLETE if (ret != KERN_SUCCESS)
// OBSOLETE warning ("store_inferior_registers (set): %s",
// OBSOLETE mach_error_string (ret));
// OBSOLETE
// OBSOLETE if (must_suspend_thread)
// OBSOLETE setup_thread (current_thread, 0);
// OBSOLETE }
// OBSOLETE
// OBSOLETE
// OBSOLETE
// OBSOLETE /* Return the address in the core dump or inferior of register REGNO.
// OBSOLETE * BLOCKEND should be the address of the end of the UPAGES area read
// OBSOLETE * in memory, but it's not?
// OBSOLETE *
// OBSOLETE * Currently our UX server dumps the whole thread state to the
// OBSOLETE * core file. If your UX does something else, adapt the routine
// OBSOLETE * below to return the offset to the given register.
// OBSOLETE *
// OBSOLETE * Called by core-aout.c(fetch_core_registers)
// OBSOLETE */
// OBSOLETE
// OBSOLETE CORE_ADDR
// OBSOLETE register_addr (int regno, CORE_ADDR blockend)
// OBSOLETE {
// OBSOLETE CORE_ADDR addr;
// OBSOLETE
// OBSOLETE if (regno < 0 || regno >= NUM_REGS)
// OBSOLETE error ("Invalid register number %d.", regno);
// OBSOLETE
// OBSOLETE /* UAREA_SIZE == 8 kB in i386 */
// OBSOLETE addr = (unsigned int) REG_ADDRESS (UAREA_SIZE - sizeof (struct i386_thread_state), regno);
// OBSOLETE
// OBSOLETE return addr;
// OBSOLETE }
// OBSOLETE
// OBSOLETE /* jtv@hut.fi: I copied and modified this 387 code from
// OBSOLETE * gdb/i386-xdep.c. Modifications for Mach 3.0.
// OBSOLETE *
// OBSOLETE * i387 status dumper. See also i387-tdep.c
// OBSOLETE */
// OBSOLETE struct env387
// OBSOLETE {
// OBSOLETE unsigned short control;
// OBSOLETE unsigned short r0;
// OBSOLETE unsigned short status;
// OBSOLETE unsigned short r1;
// OBSOLETE unsigned short tag;
// OBSOLETE unsigned short r2;
// OBSOLETE unsigned long eip;
// OBSOLETE unsigned short code_seg;
// OBSOLETE unsigned short opcode;
// OBSOLETE unsigned long operand;
// OBSOLETE unsigned short operand_seg;
// OBSOLETE unsigned short r3;
// OBSOLETE unsigned char regs[8][10];
// OBSOLETE };
// OBSOLETE /* This routine is machine independent?
// OBSOLETE * Should move it to i387-tdep.c but you need to export struct env387
// OBSOLETE */
// OBSOLETE private
// OBSOLETE print_387_status (unsigned short status, struct env387 *ep)
// OBSOLETE {
// OBSOLETE int i;
// OBSOLETE int bothstatus;
// OBSOLETE int top;
// OBSOLETE int fpreg;
// OBSOLETE unsigned char *p;
// OBSOLETE
// OBSOLETE bothstatus = ((status != 0) && (ep->status != 0));
// OBSOLETE if (status != 0)
// OBSOLETE {
// OBSOLETE if (bothstatus)
// OBSOLETE printf_unfiltered ("u: ");
// OBSOLETE print_387_status_word (status);
// OBSOLETE }
// OBSOLETE
// OBSOLETE if (ep->status != 0)
// OBSOLETE {
// OBSOLETE if (bothstatus)
// OBSOLETE printf_unfiltered ("e: ");
// OBSOLETE print_387_status_word (ep->status);
// OBSOLETE }
// OBSOLETE
// OBSOLETE print_387_control_word (ep->control);
// OBSOLETE printf_unfiltered ("last exception: ");
// OBSOLETE printf_unfiltered ("opcode %s; ", local_hex_string (ep->opcode));
// OBSOLETE printf_unfiltered ("pc %s:", local_hex_string (ep->code_seg));
// OBSOLETE printf_unfiltered ("%s; ", local_hex_string (ep->eip));
// OBSOLETE printf_unfiltered ("operand %s", local_hex_string (ep->operand_seg));
// OBSOLETE printf_unfiltered (":%s\n", local_hex_string (ep->operand));
// OBSOLETE
// OBSOLETE top = (ep->status >> 11) & 7;
// OBSOLETE
// OBSOLETE printf_unfiltered ("regno tag msb lsb value\n");
// OBSOLETE for (fpreg = 7; fpreg >= 0; fpreg--)
// OBSOLETE {
// OBSOLETE double val;
// OBSOLETE
// OBSOLETE printf_unfiltered ("%s %d: ", fpreg == top ? "=>" : " ", fpreg);
// OBSOLETE
// OBSOLETE switch ((ep->tag >> (fpreg * 2)) & 3)
// OBSOLETE {
// OBSOLETE case 0:
// OBSOLETE printf_unfiltered ("valid ");
// OBSOLETE break;
// OBSOLETE case 1:
// OBSOLETE printf_unfiltered ("zero ");
// OBSOLETE break;
// OBSOLETE case 2:
// OBSOLETE printf_unfiltered ("trap ");
// OBSOLETE break;
// OBSOLETE case 3:
// OBSOLETE printf_unfiltered ("empty ");
// OBSOLETE break;
// OBSOLETE }
// OBSOLETE for (i = 9; i >= 0; i--)
// OBSOLETE printf_unfiltered ("%02x", ep->regs[fpreg][i]);
// OBSOLETE
// OBSOLETE floatformat_to_double (&floatformat_i387_ext, (char *) ep->regs[fpreg],
// OBSOLETE &val);
// OBSOLETE printf_unfiltered (" %g\n", val);
// OBSOLETE }
// OBSOLETE if (ep->r0)
// OBSOLETE printf_unfiltered ("warning: reserved0 is %s\n", local_hex_string (ep->r0));
// OBSOLETE if (ep->r1)
// OBSOLETE printf_unfiltered ("warning: reserved1 is %s\n", local_hex_string (ep->r1));
// OBSOLETE if (ep->r2)
// OBSOLETE printf_unfiltered ("warning: reserved2 is %s\n", local_hex_string (ep->r2));
// OBSOLETE if (ep->r3)
// OBSOLETE printf_unfiltered ("warning: reserved3 is %s\n", local_hex_string (ep->r3));
// OBSOLETE }
// OBSOLETE
// OBSOLETE /*
// OBSOLETE * values that go into fp_kind (from <i386/fpreg.h>)
// OBSOLETE */
// OBSOLETE #define FP_NO 0 /* no fp chip, no emulator (no fp support) */
// OBSOLETE #define FP_SW 1 /* no fp chip, using software emulator */
// OBSOLETE #define FP_HW 2 /* chip present bit */
// OBSOLETE #define FP_287 2 /* 80287 chip present */
// OBSOLETE #define FP_387 3 /* 80387 chip present */
// OBSOLETE
// OBSOLETE typedef struct fpstate
// OBSOLETE {
// OBSOLETE #if 1
// OBSOLETE unsigned char state[FP_STATE_BYTES]; /* "hardware" state */
// OBSOLETE #else
// OBSOLETE struct env387 state; /* Actually this */
// OBSOLETE #endif
// OBSOLETE int status; /* Duplicate status */
// OBSOLETE }
// OBSOLETE *fpstate_t;
// OBSOLETE
// OBSOLETE /* Mach 3 specific routines.
// OBSOLETE */
// OBSOLETE private boolean_t
// OBSOLETE get_i387_state (struct fpstate *fstate)
// OBSOLETE {
// OBSOLETE kern_return_t ret;
// OBSOLETE thread_state_data_t state;
// OBSOLETE unsigned int fsCnt = i386_FLOAT_STATE_COUNT;
// OBSOLETE struct i386_float_state *fsp;
// OBSOLETE
// OBSOLETE ret = thread_get_state (current_thread,
// OBSOLETE i386_FLOAT_STATE,
// OBSOLETE state,
// OBSOLETE &fsCnt);
// OBSOLETE
// OBSOLETE if (ret != KERN_SUCCESS)
// OBSOLETE {
// OBSOLETE warning ("Can not get live floating point state: %s",
// OBSOLETE mach_error_string (ret));
// OBSOLETE return FALSE;
// OBSOLETE }
// OBSOLETE
// OBSOLETE fsp = (struct i386_float_state *) state;
// OBSOLETE /* The 387 chip (also 486 counts) or a software emulator? */
// OBSOLETE if (!fsp->initialized || (fsp->fpkind != FP_387 && fsp->fpkind != FP_SW))
// OBSOLETE return FALSE;
// OBSOLETE
// OBSOLETE /* Clear the target then copy thread's float state there.
// OBSOLETE Make a copy of the status word, for some reason?
// OBSOLETE */
// OBSOLETE memset (fstate, 0, sizeof (struct fpstate));
// OBSOLETE
// OBSOLETE fstate->status = fsp->exc_status;
// OBSOLETE
// OBSOLETE memcpy (fstate->state, (char *) &fsp->hw_state, FP_STATE_BYTES);
// OBSOLETE
// OBSOLETE return TRUE;
// OBSOLETE }
// OBSOLETE
// OBSOLETE private boolean_t
// OBSOLETE get_i387_core_state (struct fpstate *fstate)
// OBSOLETE {
// OBSOLETE /* Not implemented yet. Core files do not contain float state. */
// OBSOLETE return FALSE;
// OBSOLETE }
// OBSOLETE
// OBSOLETE /*
// OBSOLETE * This is called by "info float" command
// OBSOLETE */
// OBSOLETE void
// OBSOLETE i386_mach3_float_info (void)
// OBSOLETE {
// OBSOLETE char buf[sizeof (struct fpstate) + 2 * sizeof (int)];
// OBSOLETE boolean_t valid = FALSE;
// OBSOLETE fpstate_t fps;
// OBSOLETE
// OBSOLETE if (target_has_execution)
// OBSOLETE valid = get_i387_state (buf);
// OBSOLETE #if 0
// OBSOLETE else if (WE HAVE CORE FILE) /* @@@@ Core files not supported */
// OBSOLETE valid = get_i387_core_state (buf);
// OBSOLETE #endif
// OBSOLETE
// OBSOLETE if (!valid)
// OBSOLETE {
// OBSOLETE warning ("no floating point status saved");
// OBSOLETE return;
// OBSOLETE }
// OBSOLETE
// OBSOLETE fps = (fpstate_t) buf;
// OBSOLETE
// OBSOLETE print_387_status (fps->status, (struct env387 *) fps->state);
// OBSOLETE }

View File

@ -1,172 +1,172 @@
/* Native dependent code for Mach 386's for GDB, the GNU debugger.
Copyright 1986, 1987, 1989, 1991, 1992, 1993, 1995, 1996, 1999, 2000,
2001 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. */
#include "defs.h"
#include "frame.h"
#include "inferior.h"
#include "gdbcore.h"
#include "regcache.h"
#include <sys/param.h>
#include <sys/dir.h>
#include <sys/user.h>
#include <signal.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <sys/ptrace.h>
#include <machine/reg.h>
#include <sys/file.h>
#include "gdb_stat.h"
#include <sys/core.h>
static void fetch_core_registers (char *, unsigned, int, CORE_ADDR);
void
fetch_inferior_registers (int regno)
{
struct regs inferior_registers;
struct fp_state inferior_fp_registers;
registers_fetched ();
ptrace (PTRACE_GETREGS, PIDGET (inferior_ptid),
(PTRACE_ARG3_TYPE) & inferior_registers);
ptrace (PTRACE_GETFPREGS, PIDGET (inferior_ptid),
(PTRACE_ARG3_TYPE) & inferior_fp_registers);
memcpy (registers, &inferior_registers, sizeof inferior_registers);
memcpy (&registers[REGISTER_BYTE (FP0_REGNUM)],
inferior_fp_registers.f_st,
sizeof inferior_fp_registers.f_st);
memcpy (&registers[REGISTER_BYTE (FPC_REGNUM)],
&inferior_fp_registers.f_ctrl,
sizeof inferior_fp_registers - sizeof inferior_fp_registers.f_st);
}
/* Store our register values back into the inferior.
If REGNO is -1, do this for all registers.
Otherwise, REGNO specifies which register (so we can save time). */
void
store_inferior_registers (int regno)
{
struct regs inferior_registers;
struct fp_state inferior_fp_registers;
memcpy (&inferior_registers, registers, 20 * 4);
memcpy (inferior_fp_registers.f_st, &registers[REGISTER_BYTE (FP0_REGNUM)],
sizeof inferior_fp_registers.f_st);
memcpy (&inferior_fp_registers.f_ctrl,
&registers[REGISTER_BYTE (FPC_REGNUM)],
sizeof inferior_fp_registers - sizeof inferior_fp_registers.f_st);
#ifdef PTRACE_FP_BUG
if (regno == FP_REGNUM || regno == -1)
/* Storing the frame pointer requires a gross hack, in which an
instruction that moves eax into ebp gets single-stepped. */
{
int stack = inferior_registers.r_reg[SP_REGNUM];
int stuff = ptrace (PTRACE_PEEKDATA, PIDGET (inferior_ptid),
(PTRACE_ARG3_TYPE) stack);
int reg = inferior_registers.r_reg[EAX];
inferior_registers.r_reg[EAX] =
inferior_registers.r_reg[FP_REGNUM];
ptrace (PTRACE_SETREGS, PIDGET (inferior_ptid),
(PTRACE_ARG3_TYPE) & inferior_registers);
ptrace (PTRACE_POKEDATA, PIDGET (inferior_ptid),
(PTRACE_ARG3_TYPE) stack, 0xc589);
ptrace (PTRACE_SINGLESTEP, PIDGET (inferior_ptid),
(PTRACE_ARG3_TYPE) stack, 0);
wait (0);
ptrace (PTRACE_POKEDATA, PIDGET (inferior_ptid),
(PTRACE_ARG3_TYPE) stack, stuff);
inferior_registers.r_reg[EAX] = reg;
}
#endif
ptrace (PTRACE_SETREGS, PIDGET (inferior_ptid),
(PTRACE_ARG3_TYPE) & inferior_registers);
ptrace (PTRACE_SETFPREGS, PIDGET (inferior_ptid),
(PTRACE_ARG3_TYPE) & inferior_fp_registers);
}
/* Provide registers to GDB from a core file.
CORE_REG_SECT points to an array of bytes, which were obtained from
a core file which BFD thinks might contain register contents.
CORE_REG_SIZE is its size.
WHICH says which register set corelow suspects this is:
0 --- the general-purpose register set
2 --- the floating-point register set
REG_ADDR isn't used. */
static void
fetch_core_registers (char *core_reg_sect, unsigned core_reg_size,
int which, CORE_ADDR reg_addr)
{
int val;
switch (which)
{
case 0:
case 1:
memcpy (registers, core_reg_sect, core_reg_size);
break;
case 2:
memcpy (&registers[REGISTER_BYTE (FP0_REGNUM)],
core_reg_sect,
core_reg_size); /* FIXME, probably bogus */
#ifdef FPC_REGNUM
memcpy (&registers[REGISTER_BYTE (FPC_REGNUM)],
&corestr.c_fpu.f_fpstatus.f_ctrl,
sizeof corestr.c_fpu.f_fpstatus -
sizeof corestr.c_fpu.f_fpstatus.f_st);
#endif
break;
}
}
/* Register that we are able to handle i386mach core file formats.
FIXME: is this really bfd_target_unknown_flavour? */
static struct core_fns i386mach_core_fns =
{
bfd_target_unknown_flavour, /* core_flavour */
default_check_format, /* check_format */
default_core_sniffer, /* core_sniffer */
fetch_core_registers, /* core_read_registers */
NULL /* next */
};
void
_initialize_core_i386mach (void)
{
add_core_fns (&i386mach_core_fns);
}
// OBSOLETE /* Native dependent code for Mach 386's for GDB, the GNU debugger.
// OBSOLETE Copyright 1986, 1987, 1989, 1991, 1992, 1993, 1995, 1996, 1999, 2000,
// OBSOLETE 2001 Free Software Foundation, Inc.
// OBSOLETE
// OBSOLETE This file is part of GDB.
// OBSOLETE
// OBSOLETE This program is free software; you can redistribute it and/or modify
// OBSOLETE it under the terms of the GNU General Public License as published by
// OBSOLETE the Free Software Foundation; either version 2 of the License, or
// OBSOLETE (at your option) any later version.
// OBSOLETE
// OBSOLETE This program is distributed in the hope that it will be useful,
// OBSOLETE but WITHOUT ANY WARRANTY; without even the implied warranty of
// OBSOLETE MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// OBSOLETE GNU General Public License for more details.
// OBSOLETE
// OBSOLETE You should have received a copy of the GNU General Public License
// OBSOLETE along with this program; if not, write to the Free Software
// OBSOLETE Foundation, Inc., 59 Temple Place - Suite 330,
// OBSOLETE Boston, MA 02111-1307, USA. */
// OBSOLETE
// OBSOLETE #include "defs.h"
// OBSOLETE #include "frame.h"
// OBSOLETE #include "inferior.h"
// OBSOLETE #include "gdbcore.h"
// OBSOLETE #include "regcache.h"
// OBSOLETE
// OBSOLETE #include <sys/param.h>
// OBSOLETE #include <sys/dir.h>
// OBSOLETE #include <sys/user.h>
// OBSOLETE #include <signal.h>
// OBSOLETE #include <sys/ioctl.h>
// OBSOLETE #include <fcntl.h>
// OBSOLETE
// OBSOLETE #include <sys/ptrace.h>
// OBSOLETE #include <machine/reg.h>
// OBSOLETE
// OBSOLETE #include <sys/file.h>
// OBSOLETE #include "gdb_stat.h"
// OBSOLETE #include <sys/core.h>
// OBSOLETE
// OBSOLETE static void fetch_core_registers (char *, unsigned, int, CORE_ADDR);
// OBSOLETE
// OBSOLETE void
// OBSOLETE fetch_inferior_registers (int regno)
// OBSOLETE {
// OBSOLETE struct regs inferior_registers;
// OBSOLETE struct fp_state inferior_fp_registers;
// OBSOLETE
// OBSOLETE registers_fetched ();
// OBSOLETE
// OBSOLETE ptrace (PTRACE_GETREGS, PIDGET (inferior_ptid),
// OBSOLETE (PTRACE_ARG3_TYPE) & inferior_registers);
// OBSOLETE ptrace (PTRACE_GETFPREGS, PIDGET (inferior_ptid),
// OBSOLETE (PTRACE_ARG3_TYPE) & inferior_fp_registers);
// OBSOLETE
// OBSOLETE memcpy (registers, &inferior_registers, sizeof inferior_registers);
// OBSOLETE
// OBSOLETE memcpy (&registers[REGISTER_BYTE (FP0_REGNUM)],
// OBSOLETE inferior_fp_registers.f_st,
// OBSOLETE sizeof inferior_fp_registers.f_st);
// OBSOLETE memcpy (&registers[REGISTER_BYTE (FPC_REGNUM)],
// OBSOLETE &inferior_fp_registers.f_ctrl,
// OBSOLETE sizeof inferior_fp_registers - sizeof inferior_fp_registers.f_st);
// OBSOLETE }
// OBSOLETE
// OBSOLETE /* Store our register values back into the inferior.
// OBSOLETE If REGNO is -1, do this for all registers.
// OBSOLETE Otherwise, REGNO specifies which register (so we can save time). */
// OBSOLETE
// OBSOLETE void
// OBSOLETE store_inferior_registers (int regno)
// OBSOLETE {
// OBSOLETE struct regs inferior_registers;
// OBSOLETE struct fp_state inferior_fp_registers;
// OBSOLETE
// OBSOLETE memcpy (&inferior_registers, registers, 20 * 4);
// OBSOLETE
// OBSOLETE memcpy (inferior_fp_registers.f_st, &registers[REGISTER_BYTE (FP0_REGNUM)],
// OBSOLETE sizeof inferior_fp_registers.f_st);
// OBSOLETE memcpy (&inferior_fp_registers.f_ctrl,
// OBSOLETE &registers[REGISTER_BYTE (FPC_REGNUM)],
// OBSOLETE sizeof inferior_fp_registers - sizeof inferior_fp_registers.f_st);
// OBSOLETE
// OBSOLETE #ifdef PTRACE_FP_BUG
// OBSOLETE if (regno == FP_REGNUM || regno == -1)
// OBSOLETE /* Storing the frame pointer requires a gross hack, in which an
// OBSOLETE instruction that moves eax into ebp gets single-stepped. */
// OBSOLETE {
// OBSOLETE int stack = inferior_registers.r_reg[SP_REGNUM];
// OBSOLETE int stuff = ptrace (PTRACE_PEEKDATA, PIDGET (inferior_ptid),
// OBSOLETE (PTRACE_ARG3_TYPE) stack);
// OBSOLETE int reg = inferior_registers.r_reg[EAX];
// OBSOLETE inferior_registers.r_reg[EAX] =
// OBSOLETE inferior_registers.r_reg[FP_REGNUM];
// OBSOLETE ptrace (PTRACE_SETREGS, PIDGET (inferior_ptid),
// OBSOLETE (PTRACE_ARG3_TYPE) & inferior_registers);
// OBSOLETE ptrace (PTRACE_POKEDATA, PIDGET (inferior_ptid),
// OBSOLETE (PTRACE_ARG3_TYPE) stack, 0xc589);
// OBSOLETE ptrace (PTRACE_SINGLESTEP, PIDGET (inferior_ptid),
// OBSOLETE (PTRACE_ARG3_TYPE) stack, 0);
// OBSOLETE wait (0);
// OBSOLETE ptrace (PTRACE_POKEDATA, PIDGET (inferior_ptid),
// OBSOLETE (PTRACE_ARG3_TYPE) stack, stuff);
// OBSOLETE inferior_registers.r_reg[EAX] = reg;
// OBSOLETE }
// OBSOLETE #endif
// OBSOLETE ptrace (PTRACE_SETREGS, PIDGET (inferior_ptid),
// OBSOLETE (PTRACE_ARG3_TYPE) & inferior_registers);
// OBSOLETE ptrace (PTRACE_SETFPREGS, PIDGET (inferior_ptid),
// OBSOLETE (PTRACE_ARG3_TYPE) & inferior_fp_registers);
// OBSOLETE }
// OBSOLETE
// OBSOLETE
// OBSOLETE
// OBSOLETE /* Provide registers to GDB from a core file.
// OBSOLETE
// OBSOLETE CORE_REG_SECT points to an array of bytes, which were obtained from
// OBSOLETE a core file which BFD thinks might contain register contents.
// OBSOLETE CORE_REG_SIZE is its size.
// OBSOLETE
// OBSOLETE WHICH says which register set corelow suspects this is:
// OBSOLETE 0 --- the general-purpose register set
// OBSOLETE 2 --- the floating-point register set
// OBSOLETE
// OBSOLETE REG_ADDR isn't used. */
// OBSOLETE
// OBSOLETE static void
// OBSOLETE fetch_core_registers (char *core_reg_sect, unsigned core_reg_size,
// OBSOLETE int which, CORE_ADDR reg_addr)
// OBSOLETE {
// OBSOLETE int val;
// OBSOLETE
// OBSOLETE switch (which)
// OBSOLETE {
// OBSOLETE case 0:
// OBSOLETE case 1:
// OBSOLETE memcpy (registers, core_reg_sect, core_reg_size);
// OBSOLETE break;
// OBSOLETE
// OBSOLETE case 2:
// OBSOLETE memcpy (&registers[REGISTER_BYTE (FP0_REGNUM)],
// OBSOLETE core_reg_sect,
// OBSOLETE core_reg_size); /* FIXME, probably bogus */
// OBSOLETE #ifdef FPC_REGNUM
// OBSOLETE memcpy (&registers[REGISTER_BYTE (FPC_REGNUM)],
// OBSOLETE &corestr.c_fpu.f_fpstatus.f_ctrl,
// OBSOLETE sizeof corestr.c_fpu.f_fpstatus -
// OBSOLETE sizeof corestr.c_fpu.f_fpstatus.f_st);
// OBSOLETE #endif
// OBSOLETE break;
// OBSOLETE }
// OBSOLETE }
// OBSOLETE
// OBSOLETE
// OBSOLETE /* Register that we are able to handle i386mach core file formats.
// OBSOLETE FIXME: is this really bfd_target_unknown_flavour? */
// OBSOLETE
// OBSOLETE static struct core_fns i386mach_core_fns =
// OBSOLETE {
// OBSOLETE bfd_target_unknown_flavour, /* core_flavour */
// OBSOLETE default_check_format, /* check_format */
// OBSOLETE default_core_sniffer, /* core_sniffer */
// OBSOLETE fetch_core_registers, /* core_read_registers */
// OBSOLETE NULL /* next */
// OBSOLETE };
// OBSOLETE
// OBSOLETE void
// OBSOLETE _initialize_core_i386mach (void)
// OBSOLETE {
// OBSOLETE add_core_fns (&i386mach_core_fns);
// OBSOLETE }