First cut at supporting simulators in gdbserver:
* configure, configure.in: Allow gdbserver to be configured for cross-target environments. * gdbserver/Makefile.in: Add simulator support. * gdbserver/configure.in: Eliminate assumption that host == target. Simplify using gdb/configure.tgt and gdb/configure.host. Fix other minor configuration errors. * gdbserver/low-sparc.c: Fix compile error. * gdbserver/remote-utils.c: Eliminate assumption that registers and addresses are four bytes. Fix minor compile errors and warnings. * gdbserver/server.c: Rewrite numerous instances of identical code for starting inferior processes to call new function start_inferior. Eliminate assumption that registers and addresses are four bytes. * gdbserver/server.h: Add missing prototypes to eliminate compiler warnings. * gdbserver/low-sim.c: New file to mate gdbserver with simulators. * config/mips/vr5000.mt: Add Vr5000 simulator support to gdbserver. * config/i386/linux.mh: Eliminate gdbserver support as a first step in moving such support from host to target makefile fragments. * config/i386/linux.mt: Move gdbserver support here from linux.mh.
This commit is contained in:
parent
52c92c7f75
commit
33ef0f9387
7 changed files with 277 additions and 246 deletions
|
@ -3,3 +3,9 @@ TDEPFILES= mips-tdep.o remote-mips.o
|
|||
TM_FILE= tm-vr5000.h
|
||||
SIM_OBS = remote-sim.o
|
||||
SIM = ../sim/mips/libsim.a -lm
|
||||
GDBSERVER_DEPFILES= low-sim.o
|
||||
GDBSERVER_LIBS = \
|
||||
../../sim/mips/libsim.a \
|
||||
../../bfd/libbfd.a \
|
||||
../../libiberty/libiberty.a \
|
||||
-lm
|
||||
|
|
4
gdb/configure
vendored
4
gdb/configure
vendored
|
@ -3053,9 +3053,9 @@ if test "${target}" = "${host}"; then
|
|||
nativefile=`sed -n '
|
||||
s/NAT_FILE[ ]*=[ ]*\([^ ]*\)/\1/p
|
||||
' ${host_makefile_frag}`
|
||||
else
|
||||
# else
|
||||
# GDBserver is only useful in a "native" enviroment
|
||||
configdirs=`echo $configdirs | sed 's/gdbserver//'`
|
||||
# configdirs=`echo $configdirs | sed 's/gdbserver//'`
|
||||
fi
|
||||
|
||||
|
||||
|
|
|
@ -411,9 +411,9 @@ if test "${target}" = "${host}"; then
|
|||
nativefile=`sed -n '
|
||||
s/NAT_FILE[ ]*=[ ]*\([^ ]*\)/\1/p
|
||||
' ${host_makefile_frag}`
|
||||
else
|
||||
# else
|
||||
# GDBserver is only useful in a "native" enviroment
|
||||
configdirs=`echo $configdirs | sed 's/gdbserver//'`
|
||||
# configdirs=`echo $configdirs | sed 's/gdbserver//'`
|
||||
fi
|
||||
changequote([,])
|
||||
|
||||
|
|
|
@ -31,6 +31,7 @@ gdbserver.1
|
|||
low-hppabsd.c
|
||||
low-linux.c
|
||||
low-lynx.c
|
||||
low-sim.c
|
||||
low-sparc.c
|
||||
low-sun3.c
|
||||
remote-utils.c
|
||||
|
|
|
@ -4,116 +4,9 @@ gdb_serial_driver=../ser-unix.c
|
|||
|
||||
# per-host:
|
||||
|
||||
# per-target:
|
||||
. ${srcdir}/../configure.host
|
||||
|
||||
# Hack alert! We want this directory to be configured only for the target,
|
||||
# which is where it will be running, so we just eliminate the per-host section,
|
||||
# and make the per-target stuff setup host & host_cpu according to the target.
|
||||
|
||||
host_cpu=$target_cpu
|
||||
host=$target
|
||||
|
||||
# Map host cpu into the config cpu subdirectory name.
|
||||
# The default is $host_cpu.
|
||||
|
||||
case "${host_cpu}" in
|
||||
|
||||
c[12]) gdb_host_cpu=convex ;;
|
||||
hppa*) gdb_host_cpu=pa ;;
|
||||
i[3456]86) gdb_host_cpu=i386 ;;
|
||||
m68*) gdb_host_cpu=m68k ;;
|
||||
np1) gdb_host_cpu=gould ;;
|
||||
pyramid) gdb_host_cpu=pyr ;;
|
||||
*) gdb_host_cpu=$target_cpu ;;
|
||||
|
||||
esac
|
||||
|
||||
# map host info into gdb names.
|
||||
|
||||
case "${host}" in
|
||||
|
||||
a29k-*-*) gdb_host=ultra3 ;;
|
||||
|
||||
arm-*-*) gdb_host=arm ;;
|
||||
|
||||
c[12]-*-*) gdb_host=convex ;;
|
||||
|
||||
hppa*-hp-bsd*) gdb_host=hppabsd ;;
|
||||
hppa*-hp-hpux*) gdb_host=hppahpux ;;
|
||||
|
||||
i[3456]86-ncr-*) gdb_host=ncr3000 ;;
|
||||
i[3456]86-sequent-*) gdb_host=symmetry ;;
|
||||
|
||||
i[3456]86-*-bsd*) gdb_host=i386bsd ;;
|
||||
i[3456]86-*-lynxos*) gdb_host=i386lynx ;;
|
||||
i[3456]86-*-go32) gdb_host=go32
|
||||
gdb_serial_driver=ser-go32.c
|
||||
;;
|
||||
i[3456]86-*-linux*) gdb_host=linux ;;
|
||||
i[3456]86-pc-linux-gnu) gdb_host=linux ;;
|
||||
i[3456]86-*-mach) gdb_host=i386mach ;;
|
||||
i[3456]86-*-sco3.2v4*) gdb_host=i386sco4 ;;
|
||||
i[3456]86-*-sco*) gdb_host=i386sco ;;
|
||||
i[3456]86-*-solaris*) gdb_host=i386sol2 ;;
|
||||
i[3456]86-*-sunos*) gdb_host=sun386 ;;
|
||||
i[3456]86-*-sysv3.2) gdb_host=i386v32 ;;
|
||||
i[3456]86-*-sysv4*) gdb_host=i386v4 ;;
|
||||
i[3456]86-*-sysv*) gdb_host=i386v ;;
|
||||
|
||||
m680[01]0-sun-sunos3*) gdb_host=sun2os3 ;;
|
||||
m680[01]0-sun-sunos4*) gdb_host=sun2os4 ;;
|
||||
m68030-sony-*) gdb_host=news1000 ;;
|
||||
|
||||
m68*-altos-*) gdb_host=altos ;;
|
||||
m68*-apollo*-sysv*) gdb_host=apollo68v ;;
|
||||
m68*-apollo*-bsd*) gdb_host=apollo68b ;;
|
||||
m68*-att-*) gdb_host=3b1 ;;
|
||||
m68*-cbm-sysv4*) gdb_host=amix ;;
|
||||
m68*-hp-bsd*) gdb_host=hp300bsd ;;
|
||||
m68*-hp-hpux*) gdb_host=hp300hpux ;;
|
||||
m68*-isi-*) gdb_host=isi ;;
|
||||
m68*-*-lynxos*) gdb_host=m68klynx ;;
|
||||
m68*-sony-*) gdb_host=news ;;
|
||||
m68*-sun-sunos3*) gdb_host=sun3os3 ;;
|
||||
m68*-sun-sunos4*) gdb_host=sun3os4 ;;
|
||||
m68*-sun-*) gdb_host=sun3os4 ;;
|
||||
|
||||
m88k-motorola-*) gdb_host=delta88 ;;
|
||||
m88k-*-*) gdb_host=m88k ;;
|
||||
|
||||
mips-dec-*) gdb_host=decstation ;;
|
||||
mips-little-*) gdb_host=littlemips ;;
|
||||
mips-sgi-irix3) gdb_host=irix3 ;;
|
||||
mips-sgi-irix4*) gdb_host=irix4 ;;
|
||||
mips-sony-*) gdb_host=bigmips ;;
|
||||
|
||||
none-*-*) gdb_host=none ;;
|
||||
|
||||
np1-*-*) gdb_host=np1 ;;
|
||||
|
||||
ns32k-umax-*) gdb_host=umax ;;
|
||||
ns32k-utek-sysv) gdb_host=merlin ;;
|
||||
|
||||
pn-*-*) gdb_host=pn ;;
|
||||
|
||||
pyramid-*-*) gdb_host=pyramid ;;
|
||||
|
||||
romp-*-*) gdb_host=rtbsd ;;
|
||||
|
||||
rs6000-*-*) gdb_host=rs6000 ;;
|
||||
|
||||
sparc-*-lynxos*) gdb_host=sparclynx ;;
|
||||
sparc-*-solaris2*) gdb_host=sun4sol2 ;;
|
||||
sparc-*-sunos4*) gdb_host=sun4os4 ;;
|
||||
sparc-*-*) gdb_host=sun4os4 ;;
|
||||
|
||||
tahoe-*-*) gdb_host=tahoe ;;
|
||||
|
||||
vax-*-bsd*) gdb_host=vaxbsd ;;
|
||||
vax-*-ultrix2*) gdb_host=vaxult2 ;;
|
||||
vax-*-ultrix*) gdb_host=vaxult ;;
|
||||
|
||||
esac
|
||||
echo "gdbserver/configure.in: host is $host, target is $target"
|
||||
|
||||
if [ ! -f ${srcdir}/../config/${gdb_host_cpu}/${gdb_host}.mh ]; then
|
||||
echo '***' "GDB remote does not support host ${host}" 1>&2
|
||||
|
@ -125,138 +18,9 @@ hostfile=`awk '$1 == "XM_FILE=" { print $2 }' <${srcdir}/../config/${gdb_host_cp
|
|||
|
||||
# per-target:
|
||||
|
||||
# Map target cpu into the config cpu subdirectory name.
|
||||
# The default is $target_cpu.
|
||||
. ${srcdir}/../configure.tgt
|
||||
|
||||
case "${target_cpu}" in
|
||||
|
||||
c[12]) gdb_target_cpu=convex ;;
|
||||
hppa*) gdb_target_cpu=pa ;;
|
||||
i[3456]86) gdb_target_cpu=i386 ;;
|
||||
m68*) gdb_target_cpu=m68k ;;
|
||||
np1) gdb_target_cpu=gould ;;
|
||||
pn) gdb_target_cpu=gould ;;
|
||||
pyramid) gdb_target_cpu=pyr ;;
|
||||
sparc*) gdb_target_cpu=sparc ;;
|
||||
*) gdb_target_cpu=$target_cpu ;;
|
||||
|
||||
esac
|
||||
|
||||
# map target info into gdb names.
|
||||
|
||||
case "${target}" in
|
||||
|
||||
a29k-*-aout) gdb_target=a29k ;;
|
||||
a29k-*-coff) gdb_target=a29k ;;
|
||||
a29k-*-elf) gdb_target=a29k ;;
|
||||
a29k-*-ebmon) gdb_target=a29k ;;
|
||||
a29k-*-kern) gdb_target=a29k-kern ;;
|
||||
a29k-*-none) gdb_target=a29k ;;
|
||||
a29k-*-sym1) gdb_target=ultra3 ;;
|
||||
a29k-*-udi) gdb_target=a29k-udi ;;
|
||||
|
||||
arm-*-*) gdb_target=arm ;;
|
||||
|
||||
c1-*-*) gdb_target=convex ;;
|
||||
c2-*-*) gdb_target=convex ;;
|
||||
|
||||
h8300-*-*) gdb_target=h8300hms ;;
|
||||
h8500-*-*) gdb_target=h8500hms ;;
|
||||
|
||||
sh-*-*) gdb_target=sh ;;
|
||||
|
||||
hppa*-*-bsd*) gdb_target=hppabsd ;;
|
||||
hppa*-*-hpux*) gdb_target=hppahpux ;;
|
||||
|
||||
i[3456]86-sequent-*) gdb_target=symmetry ;;
|
||||
i[3456]86-ncr-*) gdb_target=ncr3000 ;;
|
||||
|
||||
i[3456]86-*-aout) gdb_target=i386aout ;;
|
||||
i[3456]86-*-coff) gdb_target=i386v ;;
|
||||
i[3456]86-*-elf) gdb_target=i386v ;;
|
||||
|
||||
i[3456]86-*-bsd*) gdb_target=i386bsd ;;
|
||||
i[3456]86-*-lynxos*) gdb_target=i386lynx ;;
|
||||
i[3456]86-*-go32) gdb_target=i386aout ;;
|
||||
i[3456]86-*-solaris*) gdb_target=i386sol2 ;;
|
||||
i[3456]86-*-sunos*) gdb_target=sun386 ;;
|
||||
i[3456]86-*-sysv4*) gdb_target=i386v4 ;;
|
||||
i[3456]86-*-sco*) gdb_target=i386v ;;
|
||||
i[3456]86-*-sysv*) gdb_target=i386v ;;
|
||||
i[3456]86-*-linux*) gdb_target=linux ;;
|
||||
|
||||
i960-*-bout) gdb_target=vxworks960 ;;
|
||||
i960-*-coff) gdb_target=nindy960 ;;
|
||||
i960-*-elf) gdb_target=nindy960 ;;
|
||||
|
||||
i960-*-nindy) gdb_target=nindy960 ;;
|
||||
i960-*-vxworks) gdb_target=vxworks960 ;;
|
||||
|
||||
m68000-*-aout) gdb_target=m68k-nofp ;;
|
||||
m68000-*-coff) gdb_target=m68k-nofp ;;
|
||||
m68000-*-elf) gdb_target=m68k-nofp ;;
|
||||
m68000-*-sunos3*) gdb_target=sun2os3 ;;
|
||||
m68000-*-sunos4*) gdb_target=sun2os4 ;;
|
||||
|
||||
m68*-cbm-sysv4*) gdb_target=amix ;;
|
||||
m68*-hp-bsd*) gdb_target=hp300bsd ;;
|
||||
m68*-hp-hpux*) gdb_target=hp300hpux ;;
|
||||
|
||||
m68*-altos-*) gdb_target=altos ;;
|
||||
m68*-att-*) gdb_target=3b1 ;;
|
||||
m68*-ericsson-*) gdb_target=es1800 ;;
|
||||
m68*-isi-*) gdb_target=isi ;;
|
||||
m68*-netx-*) gdb_target=vxworks68 ;;
|
||||
m68*-sony-*) gdb_target=news ;;
|
||||
m68*-tandem-*) gdb_target=st2000 ;;
|
||||
|
||||
m68*-*-aout) gdb_target=m68k-fp ;;
|
||||
m68*-*-coff) gdb_target=m68k-fp ;;
|
||||
m68*-*-elf) gdb_target=m68k-fp ;;
|
||||
m68*-*-lynxos*) gdb_target=m68klynx ;;
|
||||
m68*-*-os68k) gdb_target=os68k ;;
|
||||
m68*-*-sunos3*) gdb_target=sun3os3 ;;
|
||||
m68*-*-sunos4*) gdb_target=sun3os4 ;;
|
||||
m68*-*-vxworks*) gdb_target=vxworks68 ;;
|
||||
|
||||
m88k-motorola-*) gdb_target=delta88 ;;
|
||||
m88k-*-*) gdb_target=m88k ;;
|
||||
|
||||
mips-big-*) gdb_target=bigmips ;;
|
||||
mips-dec-*) gdb_target=decstation ;;
|
||||
mips-idt-ecoff) gdb_target=idt ;;
|
||||
mips-little-*) gdb_target=littlemips ;;
|
||||
mips-sgi-*) gdb_target=irix3 ;;
|
||||
mips-sony-*) gdb_target=bigmips ;;
|
||||
|
||||
none-*-*) gdb_target=none ;;
|
||||
|
||||
np1-*-*) gdb_target=np1 ;;
|
||||
|
||||
ns32k-utek-sysv) gdb_target=merlin ;;
|
||||
ns32k-utek-*) gdb_target=umax ;;
|
||||
|
||||
pn-*-*) gdb_target=pn ;;
|
||||
|
||||
pyramid-*-*) gdb_target=pyramid ;;
|
||||
|
||||
rs6000-*-*) gdb_target=rs6000 ;;
|
||||
|
||||
sparc-*-aout) gdb_target=sparc-em ;;
|
||||
sparc-*-coff) gdb_target=sparc-em ;;
|
||||
sparc-*-elf) gdb_target=sparc-em ;;
|
||||
sparc-*-lynxos*) gdb_target=sparclynx ;;
|
||||
sparc-*-solaris2*) gdb_target=sun4sol2 ;;
|
||||
sparc-*-sunos4*) gdb_target=sun4os4 ;;
|
||||
sparc-*-vxworks*) gdb_target=sparc-em ;;
|
||||
sparc-*-*) gdb_target=sun4os4 ;;
|
||||
sparclite*-*-*) gdb_target=sparclite ;;
|
||||
|
||||
tahoe-*-*) gdb_target=tahoe ;;
|
||||
vax-*-*) gdb_target=vax ;;
|
||||
|
||||
z8k-*-sim) gdb_target=z8ksim ;;
|
||||
esac
|
||||
echo "gdbserver/configure.in: host_cpu is $host_cpu, target_cpu is $target_cpu"
|
||||
|
||||
if [ ! -f ${srcdir}/../config/${gdb_target_cpu}/${gdb_target}.mt ]; then
|
||||
echo '***' "GDB remote does not support target ${target}" 1>&2
|
||||
|
@ -319,7 +83,7 @@ if [ "${nativefile}" != "" ]; then
|
|||
# temporary scaffolding until all hosts have the host/target/native
|
||||
# split in place.
|
||||
else
|
||||
files="${files} ../config/nm-trash.h"
|
||||
files="${files} ../config/nm-empty.h"
|
||||
links="${links} nm.h"
|
||||
fi
|
||||
|
||||
|
|
260
gdb/gdbserver/low-sim.c
Normal file
260
gdb/gdbserver/low-sim.c
Normal file
|
@ -0,0 +1,260 @@
|
|||
/* Low level interface to simulators, for the remote server for GDB.
|
||||
Copyright (C) 1995, 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 "defs.h"
|
||||
#include "bfd.h"
|
||||
#include "server.h"
|
||||
#include "callback.h" /* GDB simulator callback interface */
|
||||
#include "remote-sim.h" /* GDB simulator interface */
|
||||
|
||||
extern host_callback default_callback; /* in callback.c */
|
||||
|
||||
char registers[REGISTER_BYTES];
|
||||
|
||||
int target_byte_order; /* used by simulator */
|
||||
|
||||
/* This version of "load" should be usable for any simulator that
|
||||
does not support loading itself. */
|
||||
|
||||
static void
|
||||
generic_load (loadfile_bfd)
|
||||
bfd *loadfile_bfd;
|
||||
{
|
||||
asection *s;
|
||||
|
||||
for (s = loadfile_bfd->sections; s; s = s->next)
|
||||
{
|
||||
if (s->flags & SEC_LOAD)
|
||||
{
|
||||
bfd_size_type size;
|
||||
|
||||
size = bfd_get_section_size_before_reloc (s);
|
||||
if (size > 0)
|
||||
{
|
||||
char *buffer;
|
||||
bfd_vma vma;
|
||||
|
||||
buffer = xmalloc (size);
|
||||
vma = bfd_get_section_vma (loadfile_bfd, s);
|
||||
|
||||
/* Is this really necessary? I guess it gives the user something
|
||||
to look at during a long download. */
|
||||
fprintf (stderr, "Loading section %s, size 0x%lx vma 0x%lx\n",
|
||||
bfd_get_section_name (loadfile_bfd, s),
|
||||
(unsigned long) size,
|
||||
(unsigned long) vma); /* chops high 32 bits. FIXME!! */
|
||||
|
||||
bfd_get_section_contents (loadfile_bfd, s, buffer, 0, size);
|
||||
|
||||
write_inferior_memory (vma, buffer, size);
|
||||
free (buffer);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fprintf (stderr, "Start address 0x%lx\n",
|
||||
(unsigned long)loadfile_bfd->start_address);
|
||||
|
||||
/* We were doing this in remote-mips.c, I suspect it is right
|
||||
for other targets too. */
|
||||
/* write_pc (loadfile_bfd->start_address); */ /* FIXME!! */
|
||||
}
|
||||
|
||||
int
|
||||
create_inferior (program, allargs)
|
||||
char *program;
|
||||
char **allargs;
|
||||
{
|
||||
bfd *abfd;
|
||||
int pid = 0;
|
||||
|
||||
abfd = bfd_openr (program, 0);
|
||||
if (!abfd)
|
||||
{
|
||||
fprintf (stderr, "gdbserver: can't open %s: %s\n",
|
||||
program, bfd_errmsg (bfd_get_error ()));
|
||||
exit (1);
|
||||
}
|
||||
|
||||
if (!bfd_check_format (abfd, bfd_object))
|
||||
{
|
||||
fprintf (stderr, "gdbserver: unknown load format for %s: %s\n",
|
||||
program, bfd_errmsg (bfd_get_error ()));
|
||||
exit (1);
|
||||
}
|
||||
|
||||
/* This must be set before sim_open is called, because gdb assumes that
|
||||
the simulator endianness is known immediately after the sim_open call. */
|
||||
target_byte_order = bfd_big_endian (abfd) ? 4321 : 1234;
|
||||
|
||||
sim_set_callbacks (&default_callback);
|
||||
default_callback.init (&default_callback);
|
||||
|
||||
/* Should concatenate args here. FIXME!! */
|
||||
sim_open (allargs[0]);
|
||||
|
||||
/* Load program. */
|
||||
if (sim_load (allargs[0], 0) != 0)
|
||||
generic_load (abfd);
|
||||
|
||||
return pid;
|
||||
}
|
||||
|
||||
/* Kill the inferior process. Make us have no inferior. */
|
||||
|
||||
void
|
||||
kill_inferior ()
|
||||
{
|
||||
sim_close (0);
|
||||
default_callback.shutdown (&default_callback);
|
||||
}
|
||||
|
||||
/* Fetch one register. */
|
||||
|
||||
static void
|
||||
fetch_register (regno)
|
||||
int regno;
|
||||
{
|
||||
sim_fetch_register (regno, ®isters[REGISTER_BYTE (regno)]);
|
||||
}
|
||||
|
||||
/* Fetch all registers, or just one, from the child process. */
|
||||
|
||||
void
|
||||
fetch_inferior_registers (regno)
|
||||
int regno;
|
||||
{
|
||||
if (regno == -1 || regno == 0)
|
||||
for (regno = 0; regno < NUM_REGS/*-NUM_FREGS*/; regno++)
|
||||
fetch_register (regno);
|
||||
else
|
||||
fetch_register (regno);
|
||||
}
|
||||
|
||||
/* 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 (regno)
|
||||
int regno;
|
||||
{
|
||||
if (regno == -1)
|
||||
{
|
||||
for (regno = 0; regno < NUM_REGS; regno++)
|
||||
store_inferior_registers (regno);
|
||||
}
|
||||
else
|
||||
sim_store_register (regno, ®isters[REGISTER_BYTE (regno)]);
|
||||
}
|
||||
|
||||
/* Return nonzero if the given thread is still alive. */
|
||||
int
|
||||
mythread_alive (pid)
|
||||
int pid;
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Wait for process, returns status */
|
||||
|
||||
unsigned char
|
||||
mywait (status)
|
||||
char *status;
|
||||
{
|
||||
int sigrc;
|
||||
enum sim_stop reason;
|
||||
|
||||
sim_stop_reason (&reason, &sigrc);
|
||||
switch (reason)
|
||||
{
|
||||
case sim_exited:
|
||||
fprintf (stderr, "\nChild exited with retcode = %x \n", sigrc);
|
||||
*status = 'W';
|
||||
return sigrc;
|
||||
|
||||
#if 0
|
||||
case sim_stopped:
|
||||
fprintf (stderr, "\nChild terminated with signal = %x \n", sigrc);
|
||||
*status = 'X';
|
||||
return sigrc;
|
||||
#endif
|
||||
|
||||
default: /* should this be sim_signalled or sim_stopped? FIXME!! */
|
||||
fprintf (stderr, "\nChild received signal = %x \n", sigrc);
|
||||
fetch_inferior_registers (0);
|
||||
*status = 'T';
|
||||
return (unsigned char) sigrc;
|
||||
}
|
||||
}
|
||||
|
||||
/* Resume execution of the inferior process.
|
||||
If STEP is nonzero, single-step it.
|
||||
If SIGNAL is nonzero, give it that signal. */
|
||||
|
||||
void
|
||||
myresume (step, signo)
|
||||
int step;
|
||||
int signo;
|
||||
{
|
||||
/* Should be using target_signal_to_host() or signal numbers in target.h
|
||||
to convert GDB signal number to target signal number. */
|
||||
sim_resume (step, signo);
|
||||
}
|
||||
|
||||
/* Copy LEN bytes from inferior's memory starting at MEMADDR
|
||||
to debugger memory starting at MYADDR. */
|
||||
|
||||
void
|
||||
read_inferior_memory (memaddr, myaddr, len)
|
||||
CORE_ADDR memaddr;
|
||||
char *myaddr;
|
||||
int len;
|
||||
{
|
||||
sim_read (memaddr, myaddr, len);
|
||||
}
|
||||
|
||||
/* Copy LEN bytes of data from debugger memory at MYADDR
|
||||
to inferior's memory at MEMADDR.
|
||||
On failure (cannot write the inferior)
|
||||
returns the value of errno. */
|
||||
|
||||
int
|
||||
write_inferior_memory (memaddr, myaddr, len)
|
||||
CORE_ADDR memaddr;
|
||||
char *myaddr;
|
||||
int len;
|
||||
{
|
||||
sim_write (memaddr, myaddr, len); /* should check for error. FIXME!! */
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if 0
|
||||
void
|
||||
initialize ()
|
||||
{
|
||||
inferior_pid = 0;
|
||||
}
|
||||
|
||||
int
|
||||
have_inferior_p ()
|
||||
{
|
||||
return inferior_pid != 0;
|
||||
}
|
||||
#endif
|
|
@ -46,7 +46,7 @@ char buf2[MAX_REGISTER_RAW_SIZE];
|
|||
/***************End MY defs*********************/
|
||||
|
||||
#include <sys/ptrace.h>
|
||||
#include <machine/reg.h>
|
||||
#include <sys/reg.h>
|
||||
|
||||
extern int sys_nerr;
|
||||
extern char **sys_errlist;
|
||||
|
|
Loading…
Add table
Reference in a new issue