From: Jim Kingdon Date: Fri, 27 Aug 1993 17:34:30 +0000 (+0000) Subject: * gdbserver/low-sun3.c: New file. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=5b3c73e6a13c541dc557afe12d188afc7c37519c;p=binutils-gdb.git * gdbserver/low-sun3.c: New file. * gdbserver/Makefile.in, config/m68k/sun3.mh: Change accordingly. --- diff --git a/gdb/gdbserver/.Sanitize b/gdb/gdbserver/.Sanitize index db910a5f389..21b2f62537c 100644 --- a/gdb/gdbserver/.Sanitize +++ b/gdb/gdbserver/.Sanitize @@ -28,6 +28,7 @@ README configure.in low-lynx.c low-sparc.c +low-sun3.c remote-utils.c server.c server.h diff --git a/gdb/gdbserver/Makefile.in b/gdb/gdbserver/Makefile.in index 9cd7990af3f..90db83ffc91 100644 --- a/gdb/gdbserver/Makefile.in +++ b/gdb/gdbserver/Makefile.in @@ -144,8 +144,8 @@ LINTFLAGS= -I${BFD_DIR} # All source files that go into linking GDB remote server. -SFILES = $(srcdir)/utils.c $(srcdir)/low-lynx.c $(srcdir)/low-sparc.c \ - $(srcdir)/server.c $(srcdir)/remote-utils.c +SFILES = $(srcdir)/low-lynx.c $(srcdir)/low-sparc.c $(srcdir)/low-sun3.c \ + $(srcdir)/utils.c $(srcdir)/server.c $(srcdir)/remote-utils.c DEPFILES = $(GDBSERVER_DEPFILES) @@ -279,6 +279,7 @@ server.o : ${srcdir}/server.c ${srcdir}/server.h remote-utils.o : ${srcdir}/remote-utils.c ${srcdir}/server.h low-lynx.o : ${srcdir}/low-lynx.c ${srcdir}/server.h low-sparc.o : $(srcdir)/low-sparc.c $(srcdir)/server.h +low-sun3.o : $(srcdir)/low-sun3.c $(srcdir)/server.h utils.o : ${srcdir}/utils.c ${srcdir}/server.h # This is the end of "Makefile.in". diff --git a/gdb/gdbserver/low-sun3.c b/gdb/gdbserver/low-sun3.c index eb578eee2eb..c318ff5be12 100644 --- a/gdb/gdbserver/low-sun3.c +++ b/gdb/gdbserver/low-sun3.c @@ -21,9 +21,6 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "/usr/include/sys/wait.h" #include "frame.h" #include "inferior.h" -/*************************** -#include "initialize.h" -****************************/ #include #include @@ -155,41 +152,27 @@ fetch_inferior_registers (ignored) { struct regs inferior_registers; struct fp_status inferior_fp_registers; - int i; - - /* Global and Out regs are fetched directly, as well as the control - registers. If we're getting one of the in or local regs, - and the stack pointer has not yet been fetched, - we have to do that first, since they're found in memory relative - to the stack pointer. */ - - if (ptrace (PTRACE_GETREGS, inferior_pid, - (PTRACE_ARG3_TYPE) &inferior_registers, 0)) - perror("ptrace_getregs"); - - registers[REGISTER_BYTE (0)] = 0; - memcpy (®isters[REGISTER_BYTE (1)], &inferior_registers.r_g1, - 15 * REGISTER_RAW_SIZE (G0_REGNUM)); - *(int *)®isters[REGISTER_BYTE (PS_REGNUM)] = inferior_registers.r_ps; - *(int *)®isters[REGISTER_BYTE (PC_REGNUM)] = inferior_registers.r_pc; - *(int *)®isters[REGISTER_BYTE (NPC_REGNUM)] = inferior_registers.r_npc; - *(int *)®isters[REGISTER_BYTE (Y_REGNUM)] = inferior_registers.r_y; - - /* Floating point registers */ - if (ptrace (PTRACE_GETFPREGS, inferior_pid, - (PTRACE_ARG3_TYPE) &inferior_fp_registers, - 0)) - perror("ptrace_getfpregs"); + ptrace (PTRACE_GETREGS, inferior_pid, + (PTRACE_ARG3_TYPE) &inferior_registers); +#ifdef FP0_REGNUM + ptrace (PTRACE_GETFPREGS, inferior_pid, + (PTRACE_ARG3_TYPE) &inferior_fp_registers); +#endif + + memcpy (registers, &inferior_registers, 16 * 4); +#ifdef FP0_REGNUM memcpy (®isters[REGISTER_BYTE (FP0_REGNUM)], &inferior_fp_registers, - sizeof inferior_fp_registers.fpu_fr); - - /* These regs are saved on the stack by the kernel. Only read them - all (16 ptrace calls!) if we really need them. */ - - read_inferior_memory (*(CORE_ADDR*)®isters[REGISTER_BYTE (SP_REGNUM)], - ®isters[REGISTER_BYTE (L0_REGNUM)], - 16*REGISTER_RAW_SIZE (L0_REGNUM)); + 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 } /* Store our register values back into the inferior. @@ -202,33 +185,27 @@ store_inferior_registers (ignored) { struct regs inferior_registers; struct fp_status inferior_fp_registers; - CORE_ADDR sp = *(CORE_ADDR *)®isters[REGISTER_BYTE (SP_REGNUM)]; - - write_inferior_memory (sp, ®isters[REGISTER_BYTE (L0_REGNUM)], - 16*REGISTER_RAW_SIZE (L0_REGNUM)); - - memcpy (&inferior_registers.r_g1, ®isters[REGISTER_BYTE (G1_REGNUM)], - 15 * REGISTER_RAW_SIZE (G1_REGNUM)); - - inferior_registers.r_ps = - *(int *)®isters[REGISTER_BYTE (PS_REGNUM)]; - inferior_registers.r_pc = - *(int *)®isters[REGISTER_BYTE (PC_REGNUM)]; - inferior_registers.r_npc = - *(int *)®isters[REGISTER_BYTE (NPC_REGNUM)]; - inferior_registers.r_y = - *(int *)®isters[REGISTER_BYTE (Y_REGNUM)]; - - if (ptrace (PTRACE_SETREGS, inferior_pid, - (PTRACE_ARG3_TYPE) &inferior_registers, 0)) - perror("ptrace_setregs"); - - memcpy (&inferior_fp_registers, ®isters[REGISTER_BYTE (FP0_REGNUM)], - sizeof inferior_fp_registers.fpu_fr); - if (ptrace (PTRACE_SETFPREGS, inferior_pid, - (PTRACE_ARG3_TYPE) &inferior_fp_registers, 0)) - perror("ptrace_setfpregs"); + bcopy (registers, &inferior_registers, 16 * 4); +#ifdef FP0_REGNUM + bcopy (®isters[REGISTER_BYTE (FP0_REGNUM)], &inferior_fp_registers, + 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)]; + +#ifdef FP0_REGNUM + bcopy (®isters[REGISTER_BYTE (FPC_REGNUM)], + &inferior_fp_registers.fps_control, + sizeof inferior_fp_registers - sizeof inferior_fp_registers.fps_regs); +#endif + + ptrace (PTRACE_SETREGS, inferior_pid, + (PTRACE_ARG3_TYPE) &inferior_registers); +#if FP0_REGNUM + ptrace (PTRACE_SETFPREGS, inferior_pid, + (PTRACE_ARG3_TYPE) &inferior_fp_registers); +#endif } /* NOTE! I tried using PTRACE_READDATA, etc., to read and write memory