diff options
-rw-r--r-- | gdb/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/a68v-nat.c | 176 | ||||
-rw-r--r-- | gdb/dstread.c | 8 |
3 files changed, 87 insertions, 102 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index ddb556c3..692ae31 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,10 @@ Tue Nov 16 13:33:47 1993 Jim Kingdon (kingdon@lioth.cygnus.com) + * 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. + * Makefile.in (TAGS): Depend on TAGFILES_{NO,WITH}_SRCDIR. * Makefile.in: (HFILES,TAGFILES): Split into _WITH_SRCDIR and 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. */ diff --git a/gdb/dstread.c b/gdb/dstread.c index 6fbd2fe..23e46ed 100644 --- a/gdb/dstread.c +++ b/gdb/dstread.c @@ -349,7 +349,13 @@ dst_symfile_read (objfile, section_offsets, mainline) /* Sort symbols alphabetically within each block. */ - sort_all_symtab_syms (); + { + struct symtab *s; + for (s = objfile -> symtabs; s != NULL; s = s -> next) + { + sort_symtab_syms (s); + } + } /* Install any minimal symbols that have been collected as the current minimal symbols for this objfile. */ |