diff options
author | Jim Kingdon <jkingdon@engr.sgi.com> | 1993-11-16 20:29:03 +0000 |
---|---|---|
committer | Jim Kingdon <jkingdon@engr.sgi.com> | 1993-11-16 20:29:03 +0000 |
commit | 6e03b2b87e83ccc6322a6dd2cc135023041de194 (patch) | |
tree | c90218d6154dfa2f4e4674e833b80ec616cd5bb5 /gdb/a68v-nat.c | |
parent | f0c84683873dbad8b3eb99367474c6c456590b47 (diff) | |
download | gdb-6e03b2b87e83ccc6322a6dd2cc135023041de194.zip gdb-6e03b2b87e83ccc6322a6dd2cc135023041de194.tar.gz gdb-6e03b2b87e83ccc6322a6dd2cc135023041de194.tar.bz2 |
* a68v-nat.c: Replace with new version from Troy Rollo. The
version I am replacing appears to be an old copy of sun3-nat.c.
* dstread.c (dst_symfile_read): Replace sort_all_symtab_syms call
with loop.
Diffstat (limited to 'gdb/a68v-nat.c')
-rw-r--r-- | gdb/a68v-nat.c | 176 |
1 files changed, 75 insertions, 101 deletions
diff --git a/gdb/a68v-nat.c b/gdb/a68v-nat.c index 1829812..31022ea 100644 --- a/gdb/a68v-nat.c +++ b/gdb/a68v-nat.c @@ -1,4 +1,4 @@ -/* Host-dependent code for Apollo-68ksfor GDB, the GNU debugger. +/* Host-dependent code for Apollo-68ks for GDB, the GNU debugger. Copyright 1986, 1987, 1989, 1991 Free Software Foundation, Inc. This file is part of GDB. @@ -19,42 +19,52 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "defs.h" #include "inferior.h" -#include "gdbcore.h" + +#ifndef _ISP__M68K +#define _ISP__M68K 1 +#endif + +#include <ptrace.h> extern int errno; -#if defined (GDB_TARGET_IS_SUN3) -/* All of this stuff is only relevant if both host and target are sun3. */ void -fetch_inferior_registers () +fetch_inferior_registers (ignored) + int ignored; { - struct regs inferior_registers; -#ifdef FP0_REGNUM - struct fp_status inferior_fp_registers; -#endif + struct ptrace_$data_regs_m68k inferior_registers; + struct ptrace_$floating_regs_m68k inferior_fp_registers; + struct ptrace_$control_regs_m68k inferior_control_registers; extern char registers[]; + ptrace_$init_control(&inferior_control_registers); + inferior_fp_registers.size = sizeof(inferior_fp_registers); + registers_fetched (); ptrace (PTRACE_GETREGS, inferior_pid, - (PTRACE_ARG3_TYPE) &inferior_registers, 0); -#ifdef FP0_REGNUM - ptrace (PTRACE_GETFPREGS, inferior_pid, - (PTRACE_ARG3_TYPE) &inferior_fp_registers, 0); -#endif - - memcpy (registers, &inferior_registers, 16 * 4); -#ifdef FP0_REGNUM - memcpy (®isters[REGISTER_BYTE (FP0_REGNUM)], &inferior_fp_registers, - sizeof inferior_fp_registers.fps_regs); -#endif - *(int *)®isters[REGISTER_BYTE (PS_REGNUM)] = inferior_registers.r_ps; - *(int *)®isters[REGISTER_BYTE (PC_REGNUM)] = inferior_registers.r_pc; -#ifdef FP0_REGNUM - memcpy (®isters[REGISTER_BYTE (FPC_REGNUM)], - &inferior_fp_registers.fps_control, - sizeof inferior_fp_registers - sizeof inferior_fp_registers.fps_regs); -#endif + (PTRACE_ARG3_TYPE) &inferior_registers, + ptrace_$data_set, + (PTRACE_ARG3_TYPE) &inferior_registers, + ptrace_$data_set); + + ptrace (PTRACE_GETREGS, inferior_pid, + (PTRACE_ARG3_TYPE) &inferior_fp_registers, + ptrace_$floating_set_m68k, + (PTRACE_ARG3_TYPE) &inferior_fp_registers, + ptrace_$floating_set_m68k); + + ptrace (PTRACE_GETREGS, inferior_pid, + (PTRACE_ARG3_TYPE) &inferior_control_registers, + ptrace_$control_set_m68k, + (PTRACE_ARG3_TYPE) &inferior_control_registers, + ptrace_$control_set_m68k); + + bcopy (&inferior_registers, registers, 16 * 4); + bcopy (&inferior_fp_registers, ®isters[REGISTER_BYTE (FP0_REGNUM)], + sizeof inferior_fp_registers.regs); + *(int *)®isters[REGISTER_BYTE (PS_REGNUM)] = inferior_control_registers.sr; + *(int *)®isters[REGISTER_BYTE (PC_REGNUM)] = inferior_control_registers.pc; } /* Store our register values back into the inferior. @@ -65,89 +75,54 @@ void store_inferior_registers (regno) int regno; { - struct regs inferior_registers; -#ifdef FP0_REGNUM - struct fp_status inferior_fp_registers; -#endif + struct ptrace_$data_regs_m68k inferior_registers; + struct ptrace_$floating_regs_m68k inferior_fp_registers; + struct ptrace_$control_regs_m68k inferior_control_registers; extern char registers[]; - memcpy (&inferior_registers, registers, 16 * 4); -#ifdef FP0_REGNUM - memcpy (&inferior_fp_registers, ®isters[REGISTER_BYTE (FP0_REGNUM)], - sizeof inferior_fp_registers.fps_regs); -#endif - inferior_registers.r_ps = *(int *)®isters[REGISTER_BYTE (PS_REGNUM)]; - inferior_registers.r_pc = *(int *)®isters[REGISTER_BYTE (PC_REGNUM)]; + ptrace_$init_control(&inferior_control_registers); + inferior_fp_registers.size = sizeof(inferior_fp_registers); -#ifdef FP0_REGNUM - memcpy (&inferior_fp_registers.fps_control, - ®isters[REGISTER_BYTE (FPC_REGNUM)], - sizeof inferior_fp_registers - sizeof inferior_fp_registers.fps_regs); -#endif + ptrace (PTRACE_GETREGS, inferior_pid, + (PTRACE_ARG3_TYPE) &inferior_fp_registers, + ptrace_$floating_set_m68k, + (PTRACE_ARG3_TYPE) &inferior_fp_registers, + ptrace_$floating_set_m68k); - ptrace (PTRACE_SETREGS, inferior_pid, - (PTRACE_ARG3_TYPE) &inferior_registers, 0); -#if FP0_REGNUM - ptrace (PTRACE_SETFPREGS, inferior_pid, - (PTRACE_ARG3_TYPE) &inferior_fp_registers, 0); -#endif -} + ptrace (PTRACE_GETREGS, inferior_pid, + (PTRACE_ARG3_TYPE) &inferior_control_registers, + ptrace_$control_set_m68k, + (PTRACE_ARG3_TYPE) &inferior_control_registers, + ptrace_$control_set_m68k); -/* Machine-dependent code for pulling registers out of a Sun-3 core file. */ + bcopy (registers, &inferior_registers, sizeof(inferior_registers)); -void -fetch_core_registers (core_reg_sect, core_reg_size, which) - char *core_reg_sect; - unsigned core_reg_size; - int which; -{ - extern char registers[]; - struct regs *regs = (struct regs *) core_reg_sect; - - if (which == 0) { - if (core_reg_size < sizeof (struct regs)) - error ("Can't find registers in core file"); - - memcpy (registers, (char *)regs, 16 * 4); - supply_register (PS_REGNUM, ®s->r_ps); - supply_register (PC_REGNUM, ®s->r_pc); - - } else if (which == 2) { - -#define fpustruct ((struct fpu *) core_reg_sect) - - if (core_reg_size >= sizeof (struct fpu)) - { -#ifdef FP0_REGNUM - memcpy (®isters[REGISTER_BYTE (FP0_REGNUM)], - fpustruct->f_fpstatus.fps_regs, - sizeof fpustruct->f_fpstatus.fps_regs); - memcpy (®isters[REGISTER_BYTE (FPC_REGNUM)], - &fpustruct->f_fpstatus.fps_control, - sizeof fpustruct->f_fpstatus - - sizeof fpustruct->f_fpstatus.fps_regs); -#endif - } - else - fprintf_unfiltered (gdb_stderr, "Couldn't read float regs from core file\n"); - } -} -#else /* Not sun3 target. */ -/* These functions shouldn't be called when we're cross-debugging. */ + bcopy (®isters[REGISTER_BYTE (FP0_REGNUM)], inferior_fp_registers.regs, + sizeof inferior_fp_registers.regs); -void -fetch_inferior_registers () -{ -} + inferior_control_registers.sr = *(int *)®isters[REGISTER_BYTE (PS_REGNUM)]; + inferior_control_registers.pc = *(int *)®isters[REGISTER_BYTE (PC_REGNUM)]; -/* ARGSUSED */ -void -store_inferior_registers (regno) - int regno; -{ + ptrace (PTRACE_SETREGS, inferior_pid, + (PTRACE_ARG3_TYPE) &inferior_registers, + ptrace_$data_set_m68k, + (PTRACE_ARG3_TYPE) &inferior_registers, + ptrace_$data_set_m68k); + + ptrace (PTRACE_SETREGS, inferior_pid, + (PTRACE_ARG3_TYPE) &inferior_fp_registers, + ptrace_$floating_set_m68k, + (PTRACE_ARG3_TYPE) &inferior_fp_registers, + ptrace_$floating_set_m68k); + + ptrace (PTRACE_SETREGS, inferior_pid, + (PTRACE_ARG3_TYPE) &inferior_control_registers, + ptrace_$control_set_m68k, + (PTRACE_ARG3_TYPE) &inferior_control_registers, + ptrace_$control_set_m68k); } -/* ARGSUSED */ +/* Apollos don't dump cores */ void fetch_core_registers (core_reg_sect, core_reg_size, which) char *core_reg_sect; @@ -155,4 +130,3 @@ fetch_core_registers (core_reg_sect, core_reg_size, which) int which; { } -#endif /* Not sun3 target. */ |