* fork-child.c (fork_inferior), remote-eb.c (eb_create_inferior),
remote-mon.c (monitor_create_inferior), remote-nindy.c (nindy_create_inferior), remote-st.c (st2000_create_inferior), remote-vx.c (vx_create_inferior): Remove CREATE_INFERIOR_HOOK; it is replaced by init_trace_fun. * config/convex/xm-convex.h, convex-xdep.c: Add comments explaining how to do without CREATE_INFERIOR_HOOK for whoever fixes the Convex port. * Makefile.in: Add Mach files to ALLDEPFILES, etc. * m3-nat.c: Clean up more hair--message(), cprocs. * configure.in: Recognize Mach targets and hosts. * config/ns32k/tm-umax.h: Add some #ifndef's so tm-ns32km3.h can include this file. * Mach headers in config/*/tm-*.h: Fix includes to match correct locations of files.
This commit is contained in:
parent
8c4731b588
commit
5d76c8e662
|
@ -1,3 +1,22 @@
|
|||
Thu Oct 14 20:34:15 1993 Jim Kingdon (kingdon@lioth.cygnus.com)
|
||||
|
||||
* fork-child.c (fork_inferior), remote-eb.c (eb_create_inferior),
|
||||
remote-mon.c (monitor_create_inferior), remote-nindy.c
|
||||
(nindy_create_inferior), remote-st.c (st2000_create_inferior),
|
||||
remote-vx.c (vx_create_inferior): Remove CREATE_INFERIOR_HOOK; it
|
||||
is replaced by init_trace_fun.
|
||||
* config/convex/xm-convex.h, convex-xdep.c: Add comments explaining
|
||||
how to do without CREATE_INFERIOR_HOOK for whoever fixes the Convex
|
||||
port.
|
||||
|
||||
* Makefile.in: Add Mach files to ALLDEPFILES, etc.
|
||||
* m3-nat.c: Clean up more hair--message(), cprocs.
|
||||
* configure.in: Recognize Mach targets and hosts.
|
||||
* config/ns32k/tm-umax.h: Add some #ifndef's so tm-ns32km3.h can
|
||||
include this file.
|
||||
* Mach headers in config/*/tm-*.h: Fix includes to match correct
|
||||
locations of files.
|
||||
|
||||
Thu Oct 14 21:35:55 1993 Rob Savoye (rob@darkstar.cygnus.com)
|
||||
|
||||
* remote-mon.c (general_open): Set dev_name. Minor tweaking to get
|
||||
|
|
|
@ -373,7 +373,7 @@ HFILES = buildsym.h call-cmds.h defs.h environ.h $(gdbcmd_h) \
|
|||
config/m68k/tm-m68k.h config/pa/tm-hppa.h config/i960/tm-i960.h \
|
||||
config/sparc/tm-sparc.h config/tm-sunos.h config/tm-sysv4.h \
|
||||
config/m68k/xm-m68k.h config/sparc/xm-sparc.h config/xm-sysv4.h \
|
||||
config/vax/xm-vax.h config/nm-trash.h $(udiheaders) \
|
||||
config/vax/xm-vax.h config/nm-m3.h config/nm-trash.h $(udiheaders) \
|
||||
29k-share/udi/udiids.h 29k-share/udi_soc nindy-share/b.out.h \
|
||||
nindy-share/block_io.h nindy-share/coff.h \
|
||||
nindy-share/env.h nindy-share/stop.h \
|
||||
|
@ -561,7 +561,6 @@ kdb: $(NTSSTART) $(OBS) $(NTSOBS) $(ADD_DEPS) $(CDEPS)
|
|||
|
||||
# Put the proper machine-specific files first, so M-. on a machine
|
||||
# specific routine gets the one for the correct machine.
|
||||
# The xyzzy stuff below deals with empty DEPFILES
|
||||
TAGS:
|
||||
etags `find $(srcdir)/config \( -name $(TM_FILE) \
|
||||
-o -name $(XM_FILE) \
|
||||
|
@ -812,22 +811,27 @@ ALLDEPFILES = 29k-share/udi/udip2soc.c 29k-share/udi/udr.c \
|
|||
go32-xdep.c gould-pinsn.c gould-xdep.c h8300-tdep.c h8500-tdep.c \
|
||||
hp300ux-nat.c hppa-pinsn.c hppa-tdep.c hppab-nat.c hppah-nat.c \
|
||||
i386-pinsn.c i386-tdep.c i386b-nat.c i386mach-nat.c i386v-nat.c \
|
||||
i386aix-nat.c i386v4-nat.c i386lynx-nat.c i386ly-tdep.c i387-tdep.c \
|
||||
i386aix-nat.c i386m3-nat.c i386v4-nat.c i386lynx-nat.c i386ly-tdep.c \
|
||||
i387-tdep.c \
|
||||
i960-pinsn.c i960-tdep.c \
|
||||
infptrace.c inftarg.c irix4-nat.c isi-xdep.c m68k-pinsn.c m68k-tdep.c \
|
||||
infptrace.c inftarg.c irix4-nat.c isi-xdep.c m3-nat.c \
|
||||
m68k-pinsn.c m68k-tdep.c \
|
||||
m88k-nat.c m88k-pinsn.c m88k-tdep.c mips-nat.c mips-pinsn.c \
|
||||
mips-tdep.c news-xdep.c nindy-share/Onindy.c nindy-share/nindy.c \
|
||||
mips-tdep.c mipsm3-nat.c news-xdep.c \
|
||||
nindy-share/Onindy.c nindy-share/nindy.c \
|
||||
nindy-share/ttyflush.c nindy-tdep.c \
|
||||
ns32k-pinsn.c osfsolib.c \
|
||||
ns32k-pinsn.c ns32km3-nat.c osfsolib.c \
|
||||
paread.c procfs.c pyr-pinsn.c pyr-tdep.c pyr-xdep.c \
|
||||
remote-adapt.c remote-bug.c remote-eb.c remote-es.c remote-hms.c remote-mips.c \
|
||||
remote-adapt.c remote-bug.c remote-eb.c remote-es.c \
|
||||
remote-hms.c remote-mips.c \
|
||||
remote-mm.c remote-mon.c remote-nindy.c remote-sim.c \
|
||||
remote-st.c remote-utils.c dcache.c \
|
||||
remote-udi.c remote-vx.c remote-z8k.c rs6000-nat.c rs6000-pinsn.c \
|
||||
rs6000-tdep.c ser-go32.c ser-tcp.c sh-tdep.c solib.c sparc-nat.c \
|
||||
sparc-pinsn.c sparc-tdep.c sun3-nat.c sun386-nat.c symm-tdep.c \
|
||||
symm-nat.c tahoe-pinsn.c ultra3-nat.c ultra3-xdep.c umax-xdep.c \
|
||||
vax-pinsn.c vx-share/xdr_ld.c vx-share/xdr_ptrace.c vx-share/xdr_rdb.c \
|
||||
vax-pinsn.c \
|
||||
vx-share/xdr_ld.c vx-share/xdr_ptrace.c vx-share/xdr_rdb.c \
|
||||
xcoffexec.c xcoffread.c xcoffsolib.c z8k-tdep.c
|
||||
|
||||
ALLPARAM = config/a29k/nm-ultra3.h config/a29k/tm-a29k.h \
|
||||
|
@ -844,13 +848,15 @@ ALLPARAM = config/a29k/nm-ultra3.h config/a29k/tm-a29k.h \
|
|||
config/i386/nm-i386v4.h config/i386/nm-linux.h \
|
||||
config/i386/nm-sun386.h config/i386/nm-symmetry.h \
|
||||
config/i386/tm-i386aix.h config/i386/tm-i386bsd.h \
|
||||
config/i386/tm-i386lynx.h config/i386/tm-i386nw.h \
|
||||
config/i386/tm-i386lynx.h config/i386/tm-i386m3.h \
|
||||
config/i386/tm-i386mk.hconfig/i386/tm-i386nw.h \
|
||||
config/i386/tm-i386v.h \
|
||||
config/i386/tm-i386v4.h config/i386/tm-linux.h \
|
||||
config/i386/tm-sun386.h \
|
||||
config/i386/tm-symmetry.h config/i386/xm-go32.h \
|
||||
config/i386/xm-i386aix.h config/i386/xm-i386bsd.h \
|
||||
config/i386/xm-i386lynx.h config/i386/xm-i386mach.h \
|
||||
config/i386/xm-i386m3.h config/i386/xm-i386mk.h \
|
||||
config/i386/xm-i386sco.h config/i386/xm-i386v.h \
|
||||
config/i386/xm-i386v32.h config/i386/xm-i386v4.h \
|
||||
config/i386/xm-linux.h config/i386/xm-sun386.h \
|
||||
|
@ -879,13 +885,18 @@ ALLPARAM = config/a29k/nm-ultra3.h config/a29k/tm-a29k.h \
|
|||
config/m88k/xm-delta88.h config/m88k/xm-m88k.h config/mips/nm-irix3.h \
|
||||
config/mips/nm-irix4.h config/mips/nm-mips.h config/mips/nm-riscos.h \
|
||||
config/mips/nm-news-mips.h config/mips/tm-bigmips.h \
|
||||
config/mips/tm-irix3.h config/mips/tm-mips.h config/mips/xm-irix3.h \
|
||||
config/mips/tm-irix3.h config/mips/tm-mips.h config/mips/tm-mipsm3.h \
|
||||
config/mips/xm-irix3.h \
|
||||
config/mips/xm-irix4.h config/mips/xm-makeva.h config/mips/xm-mips.h \
|
||||
config/mips/xm-mipsm3.h \
|
||||
config/mips/xm-riscos.h config/mips/xm-news-mips.h config/nm-sysv4.h \
|
||||
config/none/nm-none.h config/none/tm-none.h config/none/xm-none.h \
|
||||
config/ns32k/nm-umax.h config/ns32k/tm-merlin.h \
|
||||
config/ns32k/tm-umax.h \
|
||||
config/ns32k/xm-merlin.h config/ns32k/xm-umax.h config/pa/nm-hppab.h \
|
||||
config/ns32k/nm-umax.h \
|
||||
config/ns32k/tm-ns32km3.h \
|
||||
config/ns32k/tm-merlin.h config/ns32k/tm-umax.h \
|
||||
config/ns32k/xm-ns32km3.h \
|
||||
config/ns32k/xm-merlin.h config/ns32k/xm-umax.h \
|
||||
config/pa/nm-hppab.h \
|
||||
config/pa/nm-hppah.h config/pa/tm-hppab.h config/pa/tm-hppah.h \
|
||||
config/pa/xm-hppab.h config/pa/xm-hppah.h config/pa/xm-pa.h \
|
||||
config/pyr/tm-pyr.h \
|
||||
|
|
|
@ -18,7 +18,7 @@ along with this program; if not, write to the Free Software
|
|||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||
|
||||
/* Include common definitions for Mach3 systems */
|
||||
#include "os-mach3.h"
|
||||
#include "nm-m3.h"
|
||||
|
||||
/* Define offsets to access CPROC stack when it does not have
|
||||
* a kernel thread.
|
||||
|
@ -57,15 +57,12 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
|||
#define NAMES_HAVE_UNDERSCORE
|
||||
|
||||
/* Sigh. There should be a file for i386 but no sysv stuff in it */
|
||||
#include "tm-i386v.h"
|
||||
#include "i386/tm-i386v.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 (); }
|
||||
|
||||
/* We use a.out format */
|
||||
#undef COFF_NO_LONG_FILE_NAMES
|
||||
|
||||
/* Address of end of stack space.
|
||||
* for MACH, see <machine/vmparam.h>
|
||||
* @@@ I don't know what is in the 5 ints...
|
||||
|
|
|
@ -22,4 +22,4 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
|||
*/
|
||||
#define MK67 1
|
||||
|
||||
#include "tm-i386mach3.h"
|
||||
#include "i386/tm-i386m3.h"
|
||||
|
|
|
@ -24,7 +24,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
|||
*/
|
||||
|
||||
/* Include common definitions for Mach3 systems */
|
||||
#include "os-mach3.h"
|
||||
#include "nm-m3.h"
|
||||
|
||||
/* Define offsets to access CPROC stack when it does not have
|
||||
* a kernel thread.
|
||||
|
@ -54,7 +54,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
|||
/* Mach supports attach/detach */
|
||||
#define ATTACH_DETACH 1
|
||||
|
||||
#include "tm-mips.h"
|
||||
#include "mips/tm-mips.h"
|
||||
|
||||
/*
|
||||
* On Mach 3.0 this is the number of exec() system calls before
|
||||
|
|
|
@ -18,7 +18,7 @@ along with this program; if not, write to the Free Software
|
|||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||
|
||||
/* Include common definitions for Mach3 systems */
|
||||
#include "os-mach3.h"
|
||||
#include "nm-m3.h"
|
||||
|
||||
/* Define offsets to access CPROC stack when it does not have
|
||||
* a kernel thread.
|
||||
|
@ -61,4 +61,4 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
|||
*/
|
||||
#define STACK_END_ADDR USRSTACK
|
||||
|
||||
#include "tm-umax.h"
|
||||
#include "ns32k/tm-umax.h"
|
||||
|
|
|
@ -17,6 +17,8 @@ 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., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||
|
||||
/* This is also included by tm-ns32km3.h, as well as being used by umax. */
|
||||
|
||||
#define TARGET_BYTE_ORDER LITTLE_ENDIAN
|
||||
|
||||
/* Need to get function ends by adding this to epilogue address from .bf
|
||||
|
@ -50,7 +52,9 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
|||
|
||||
/* Address of end of stack space. */
|
||||
|
||||
#ifndef STACK_END_ADDR
|
||||
#define STACK_END_ADDR (0xfffff000)
|
||||
#endif
|
||||
|
||||
/* Stack grows downward. */
|
||||
|
||||
|
@ -70,6 +74,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
|||
|
||||
#define ABOUT_TO_RETURN(pc) (read_memory_integer (pc, 1) == 0x12)
|
||||
|
||||
#ifndef INVALID_FLOAT
|
||||
#ifndef NaN
|
||||
#include <nan.h>
|
||||
#endif NaN
|
||||
|
@ -80,6 +85,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
|||
((s == sizeof (float))? \
|
||||
NaF (*(float *) p) : \
|
||||
NaD (*(double *) p))
|
||||
#endif /* INVALID_FLOAT */
|
||||
|
||||
/* Say how long (ordinary) registers are. */
|
||||
|
||||
|
|
|
@ -45,7 +45,10 @@ i[34]86-*-netbsd*) gdb_host=i386bsd ;;
|
|||
i[34]86-*-go32) gdb_host=go32 ;;
|
||||
i[34]86-*-linux) gdb_host=linux ;;
|
||||
i[34]86-*-lynx*) gdb_host=i386lynx ;;
|
||||
i[34]86-*-mach) gdb_host=i386mach ;;
|
||||
# Obsolete I suspect
|
||||
# i[34]86-*-mach) gdb_host=i386mach ;;
|
||||
i[34]86-*-mach*) gdb_host=i386m3 ;;
|
||||
i[34]86-*-osf1mk*) gdb_host=i386mk ;;
|
||||
i[34]86-*-sco3.2v4*) gdb_host=i386sco4 ;;
|
||||
i[34]86-*-sco*) gdb_host=i386sco ;;
|
||||
i[34]86-*-solaris*) gdb_host=i386sol2 ;;
|
||||
|
@ -86,6 +89,7 @@ mips-sgi-irix4*) gdb_host=irix4 ;;
|
|||
mips-sony-*) gdb_host=news-mips ;;
|
||||
mips-*-sysv*) gdb_host=riscos ;;
|
||||
mips-*-riscos*) gdb_host=riscos ;;
|
||||
mips-*-mach*) gdb_host=mipsm3 ;;
|
||||
|
||||
none-*-*) gdb_host=none ;;
|
||||
|
||||
|
@ -198,7 +202,9 @@ i[34]86-*-sco*) gdb_target=i386v ;;
|
|||
i[34]86-*-sysv*) gdb_target=i386v ;;
|
||||
i[34]86-*-linux*) gdb_target=linux ;;
|
||||
i[34]86-*-isc*) gdb_target=i386v ;;
|
||||
i[34]86-*-mach*) gdb_target=i386m3 ;;
|
||||
i[34]86-*-netware*) gdb_target=i386nw ;;
|
||||
i[34]86-*-osf1mk*) gdb_target=i386mk ;;
|
||||
|
||||
i960-*-bout) gdb_target=vxworks960 ;;
|
||||
i960-*-coff) gdb_target=nindy960 ;;
|
||||
|
@ -249,6 +255,7 @@ mips-sgi-*) gdb_target=irix3 ;;
|
|||
mips-sony-*) gdb_target=bigmips ;;
|
||||
mips-*-sysv*) gdb_target=bigmips ;;
|
||||
mips-*-riscos*) gdb_target=bigmips ;;
|
||||
mips-*-mach*) gdb_target=mipsm3 ;;
|
||||
|
||||
none-*-*) gdb_target=none ;;
|
||||
|
||||
|
|
|
@ -306,6 +306,9 @@ write_inferior_memory (memaddr, myaddr, len)
|
|||
and started up. We must do a pattach to grab it for debugging.
|
||||
|
||||
Also, intercept the CONT command by altering its dispatch address. */
|
||||
/* FIXME: This used to be called from a macro CREATE_INFERIOR_HOOK.
|
||||
But now init_trace_fun is in the same place. So re-write this to
|
||||
use the init_trace_fun (making convex a debugging target). */
|
||||
|
||||
create_inferior_hook (pid)
|
||||
int pid;
|
||||
|
|
|
@ -244,11 +244,7 @@ fork_inferior (exec_file, allargs, env, traceme_fun, init_trace_fun)
|
|||
|
||||
init_thread_list();
|
||||
|
||||
#ifdef CREATE_INFERIOR_HOOK
|
||||
CREATE_INFERIOR_HOOK (pid);
|
||||
#endif
|
||||
|
||||
/* The process was started by the fork that created it,
|
||||
/* The process was started by the fork that created it,
|
||||
but it will have stopped one instruction after execing the shell.
|
||||
Here we must get it up to actual execution of the real program. */
|
||||
|
||||
|
|
347
gdb/m3-nat.c
347
gdb/m3-nat.c
|
@ -67,14 +67,44 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
|||
|
||||
#include <cthreads.h>
|
||||
|
||||
/*
|
||||
* Mis-use the struct cproc busy field in the copy of
|
||||
* the cproc in gdb's address space.
|
||||
*
|
||||
* This *can* be done otherwise, but I'm too lazy.
|
||||
* (Don't tell anyone :-)
|
||||
*/
|
||||
#define CPROC_REVERSE_MAP(x) ((x)->busy)
|
||||
/* This is what a cproc looks like. This is here partly because
|
||||
cthread_internals.h is not a header we can just #include, partly with
|
||||
an eye towards perhaps getting this to work with cross-debugging
|
||||
someday. Best solution is if CMU publishes a real interface to this
|
||||
stuff. */
|
||||
#define CPROC_NEXT_OFFSET 0
|
||||
#define CPROC_NEXT_SIZE (TARGET_PTR_BIT / HOST_CHAR_BIT)
|
||||
#define CPROC_INCARNATION_OFFSET (CPROC_NEXT_OFFSET + CPROC_NEXT_SIZE)
|
||||
#define CPROC_INCARNATION_SIZE (sizeof (cthread_t))
|
||||
#define CPROC_LIST_OFFSET (CPROC_INCARNATION_OFFSET + CPROC_INCARNATION_SIZE)
|
||||
#define CPROC_LIST_SIZE (TARGET_PTR_BIT / HOST_CHAR_BIT)
|
||||
#define CPROC_WAIT_OFFSET (CPROC_LIST_OFFSET + CPROC_LIST_SIZE)
|
||||
#define CPROC_WAIT_SIZE (TARGET_PTR_BIT / HOST_CHAR_BIT)
|
||||
#define CPROC_REPLY_OFFSET (CPROC_WAIT_OFFSET + CPROC_WAIT_SIZE)
|
||||
#define CPROC_REPLY_SIZE (sizeof (mach_port_t))
|
||||
#define CPROC_CONTEXT_OFFSET (CPROC_REPLY_OFFSET + CPROC_REPLY_SIZE)
|
||||
#define CPROC_CONTEXT_SIZE (TARGET_INT_BIT / HOST_CHAR_BIT)
|
||||
#define CPROC_LOCK_OFFSET (CPROC_CONTEXT_OFFSET + CPROC_CONTEXT_SIZE)
|
||||
#define CPROC_LOCK_SIZE (sizeof (spin_lock_t))
|
||||
#define CPROC_STATE_OFFSET (CPROC_LOCK_OFFSET + CPROC_LOCK_SIZE)
|
||||
#define CPROC_STATE_SIZE (TARGET_INT_BIT / HOST_CHAR_BIT)
|
||||
#define CPROC_WIRED_OFFSET (CPROC_STATE_OFFSET + CPROC_STATE_SIZE)
|
||||
#define CPROC_WIRED_SIZE (sizeof (mach_port_t))
|
||||
#define CPROC_BUSY_OFFSET (CPROC_WIRED_OFFSET + CPROC_WIRED_SIZE)
|
||||
#define CPROC_BUSY_SIZE (TARGET_INT_BIT / HOST_CHAR_BIT)
|
||||
#define CPROC_MSG_OFFSET (CPROC_BUSY_OFFSET + CPROC_BUSY_SIZE)
|
||||
#define CPROC_MSG_SIZE (sizeof (mach_msg_header_t))
|
||||
#define CPROC_BASE_OFFSET (CPROC_MSG_OFFSET + CPROC_MSG_SIZE)
|
||||
#define CPROC_BASE_SIZE (TARGET_INT_BIT / HOST_CHAR_BIT)
|
||||
#define CPROC_SIZE_OFFSET (CPROC_BASE_OFFSET + CPROC_BASE_SIZE)
|
||||
#define CPROC_SIZE_SIZE (TARGET_INT_BIT / HOST_CHAR_BIT)
|
||||
#define CPROC_SIZE (CPROC_SIZE_OFFSET + CPROC_SIZE_SIZE)
|
||||
|
||||
/* Values for the state field in the cproc. */
|
||||
#define CPROC_RUNNING 0
|
||||
#define CPROC_SWITCHING 1
|
||||
#define CPROC_BLOCKED 2
|
||||
#define CPROC_CONDWAIT 4
|
||||
|
||||
/* For cproc and kernel thread mapping */
|
||||
typedef struct gdb_thread {
|
||||
|
@ -82,9 +112,23 @@ typedef struct gdb_thread {
|
|||
CORE_ADDR sp;
|
||||
CORE_ADDR pc;
|
||||
CORE_ADDR fp;
|
||||
cproc_t cproc;
|
||||
boolean_t in_emulator;
|
||||
int slotid;
|
||||
|
||||
/* This is for the mthreads list. It points to the cproc list.
|
||||
Perhaps the two lists should be merged (or perhaps it was a mistake
|
||||
to make them both use a struct gdb_thread). */
|
||||
struct gdb_thread *cproc;
|
||||
|
||||
/* These are for the cproc list, which is linked through the next field
|
||||
of the struct gdb_thread. */
|
||||
char raw_cproc[CPROC_SIZE];
|
||||
/* The cthread which is pointed to by the incarnation field from the
|
||||
cproc. This points to the copy we've read into GDB. */
|
||||
cthread_t cthread;
|
||||
/* Point back to the mthreads list. */
|
||||
int reverse_map;
|
||||
struct gdb_thread *next;
|
||||
} *gdb_thread_t;
|
||||
|
||||
/*
|
||||
|
@ -136,7 +180,7 @@ char *fmt;
|
|||
int a,b,c;
|
||||
{
|
||||
if (debug_level)
|
||||
message (fmt, a, b, c);
|
||||
warning (fmt, a, b, c);
|
||||
}
|
||||
|
||||
/* This is in libmach.a */
|
||||
|
@ -253,7 +297,7 @@ port_chain_insert (list, name, type)
|
|||
{
|
||||
if (! MACH_PORT_VALID (mid_server))
|
||||
{
|
||||
message ("Machid server port invalid, can not map port 0x%x to MID",
|
||||
warning ("Machid server port invalid, can not map port 0x%x to MID",
|
||||
name);
|
||||
mid = name;
|
||||
}
|
||||
|
@ -263,7 +307,7 @@ port_chain_insert (list, name, type)
|
|||
|
||||
if (ret != KERN_SUCCESS)
|
||||
{
|
||||
message ("Can not map name (0x%x) to MID with machid", name);
|
||||
warning ("Can not map name (0x%x) to MID with machid", name);
|
||||
mid = name;
|
||||
}
|
||||
}
|
||||
|
@ -342,7 +386,7 @@ int type;
|
|||
|
||||
if (! MACH_PORT_VALID (mid_server))
|
||||
{
|
||||
message ("Machid server port invalid, can not map port 0x%x to mid",
|
||||
warning ("Machid server port invalid, can not map port 0x%x to mid",
|
||||
name);
|
||||
return -1;
|
||||
}
|
||||
|
@ -355,7 +399,7 @@ int type;
|
|||
|
||||
if (ret != KERN_SUCCESS)
|
||||
{
|
||||
message ("Can not map name (0x%x) to mid with machid", name);
|
||||
warning ("Can not map name (0x%x) to mid with machid", name);
|
||||
return -1;
|
||||
}
|
||||
return mid;
|
||||
|
@ -394,7 +438,7 @@ setup_single_step (thread, start_step)
|
|||
{
|
||||
if (MACH_PORT_VALID (singlestepped_thread_port))
|
||||
{
|
||||
message ("Singlestepped_thread_port (0x%x) is still valid?",
|
||||
warning ("Singlestepped_thread_port (0x%x) is still valid?",
|
||||
singlestepped_thread_port);
|
||||
singlestepped_thread_port = MACH_PORT_NULL;
|
||||
}
|
||||
|
@ -941,7 +985,7 @@ select_thread (task, thread_id, flag)
|
|||
ret = task_threads (task, &thread_list, &thread_count);
|
||||
if (ret != KERN_SUCCESS)
|
||||
{
|
||||
message ("Can not select a thread from a dead task");
|
||||
warning ("Can not select a thread from a dead task");
|
||||
kill_inferior ();
|
||||
return KERN_FAILURE;
|
||||
}
|
||||
|
@ -952,7 +996,7 @@ select_thread (task, thread_id, flag)
|
|||
* exists as a container for memory and ports.
|
||||
*/
|
||||
registers_changed ();
|
||||
message ("Task %d has no threads",
|
||||
warning ("Task %d has no threads",
|
||||
map_port_name_to_mid (task, MACH_TYPE_TASK));
|
||||
current_thread = MACH_PORT_NULL;
|
||||
(void) vm_deallocate(mach_task_self(),
|
||||
|
@ -1055,7 +1099,7 @@ switch_to_thread (new_thread)
|
|||
mid = map_port_name_to_mid (new_thread,
|
||||
MACH_TYPE_THREAD);
|
||||
if (mid == -1)
|
||||
message ("Can't map thread name 0x%x to mid", new_thread);
|
||||
warning ("Can't map thread name 0x%x to mid", new_thread);
|
||||
else if (select_thread (inferior_task, mid, 1) != KERN_SUCCESS)
|
||||
{
|
||||
if (current_thread)
|
||||
|
@ -1224,7 +1268,7 @@ mach_really_wait (w)
|
|||
(WIFEXITED(*w) && WEXITSTATUS(*w) > 0377))
|
||||
{
|
||||
WSETEXIT(*w, 0);
|
||||
message ("Using exit value 0 for terminated task");
|
||||
warning ("Using exit value 0 for terminated task");
|
||||
}
|
||||
else if (!WIFEXITED(*w))
|
||||
{
|
||||
|
@ -1232,11 +1276,11 @@ mach_really_wait (w)
|
|||
|
||||
/* Signals cause problems. Warn the user. */
|
||||
if (sig != SIGKILL) /* Bad luck if garbage matches this */
|
||||
message ("The terminating signal stuff may be nonsense");
|
||||
warning ("The terminating signal stuff may be nonsense");
|
||||
else if (sig > NSIG)
|
||||
{
|
||||
WSETEXIT(*w, 0);
|
||||
message ("Using exit value 0 for terminated task");
|
||||
warning ("Using exit value 0 for terminated task");
|
||||
}
|
||||
}
|
||||
return inferior_pid;
|
||||
|
@ -1293,7 +1337,7 @@ mach3_quit ()
|
|||
|
||||
if (ret != KERN_SUCCESS)
|
||||
{
|
||||
message ("Could not suspend task for interrupt: %s",
|
||||
warning ("Could not suspend task for interrupt: %s",
|
||||
mach_error_string (ret));
|
||||
mach_really_waiting = 0;
|
||||
return;
|
||||
|
@ -1306,7 +1350,7 @@ mach3_quit ()
|
|||
mid = map_port_name_to_mid (current_thread, MACH_TYPE_THREAD);
|
||||
if (mid == -1)
|
||||
{
|
||||
message ("Selecting first existing kernel thread");
|
||||
warning ("Selecting first existing kernel thread");
|
||||
mid = 0;
|
||||
}
|
||||
|
||||
|
@ -1349,7 +1393,7 @@ gdb_message_server (InP)
|
|||
case GDB_MESSAGE_ID_STOP:
|
||||
ret = task_suspend (inferior_task);
|
||||
if (ret != KERN_SUCCESS)
|
||||
message ("Could not suspend task for stop message: %s",
|
||||
warning ("Could not suspend task for stop message: %s",
|
||||
mach_error_string (ret));
|
||||
|
||||
/* QUIT in mach_really_wait() loop. */
|
||||
|
@ -1357,7 +1401,7 @@ gdb_message_server (InP)
|
|||
break;
|
||||
|
||||
default:
|
||||
message ("Invalid message id %d received, ignored.",
|
||||
warning ("Invalid message id %d received, ignored.",
|
||||
InP->msgh_id);
|
||||
break;
|
||||
}
|
||||
|
@ -1646,7 +1690,7 @@ catch_exception_raise (port, thread, task, exception, code, subcode)
|
|||
if (select_thread (inferior_task, mid, 0) != KERN_SUCCESS)
|
||||
error ("Could not select thread %d causing exception", mid);
|
||||
else
|
||||
message ("Gdb selected thread %d", mid);
|
||||
warning ("Gdb selected thread %d", mid);
|
||||
}
|
||||
|
||||
/* If we receive an exception that is not breakpoint
|
||||
|
@ -1656,7 +1700,7 @@ catch_exception_raise (port, thread, task, exception, code, subcode)
|
|||
if (MACH_PORT_VALID (singlestepped_thread_port))
|
||||
{
|
||||
if (stop_exception != EXC_BREAKPOINT)
|
||||
message ("Single step interrupted by exception");
|
||||
warning ("Single step interrupted by exception");
|
||||
else if (port == singlestepped_thread_port)
|
||||
{
|
||||
/* Single step exception occurred, remove trace bit
|
||||
|
@ -1669,7 +1713,7 @@ catch_exception_raise (port, thread, task, exception, code, subcode)
|
|||
resume_all_threads (0);
|
||||
}
|
||||
else
|
||||
message ("Breakpoint while single stepping?");
|
||||
warning ("Breakpoint while single stepping?");
|
||||
|
||||
discard_single_step (current_thread);
|
||||
}
|
||||
|
@ -1746,7 +1790,7 @@ mach3_read_inferior (addr, myaddr, length)
|
|||
screw it. Eamonn seems to like this, so I enable
|
||||
it if OSF is defined...
|
||||
*/
|
||||
message ("[read inferior %x failed: %s]",
|
||||
warning ("[read inferior %x failed: %s]",
|
||||
addr, mach_error_string (ret));
|
||||
errno = 0;
|
||||
#endif
|
||||
|
@ -1852,7 +1896,7 @@ mach3_write_inferior (addr, myaddr, length)
|
|||
/* Check for holes in memory */
|
||||
if (old_address != region_address)
|
||||
{
|
||||
message ("No memory at 0x%x. Nothing written",
|
||||
warning ("No memory at 0x%x. Nothing written",
|
||||
old_address);
|
||||
ret = KERN_SUCCESS;
|
||||
length = 0;
|
||||
|
@ -1861,7 +1905,7 @@ mach3_write_inferior (addr, myaddr, length)
|
|||
|
||||
if (!(max_protection & VM_PROT_WRITE))
|
||||
{
|
||||
message ("Memory at address 0x%x is unwritable. Nothing written",
|
||||
warning ("Memory at address 0x%x is unwritable. Nothing written",
|
||||
old_address);
|
||||
ret = KERN_SUCCESS;
|
||||
length = 0;
|
||||
|
@ -1940,7 +1984,7 @@ mach3_write_inferior (addr, myaddr, length)
|
|||
|
||||
if (ret != KERN_SUCCESS)
|
||||
{
|
||||
message ("%s %s", errstr, mach_error_string (ret));
|
||||
warning ("%s %s", errstr, mach_error_string (ret));
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1982,22 +2026,21 @@ int state;
|
|||
}
|
||||
|
||||
static char *
|
||||
translate_cstate(state)
|
||||
int state;
|
||||
translate_cstate (state)
|
||||
int state;
|
||||
{
|
||||
switch (state) {
|
||||
switch (state)
|
||||
{
|
||||
case CPROC_RUNNING: return "R";
|
||||
case CPROC_SWITCHING: return "S";
|
||||
case CPROC_BLOCKED: return "B";
|
||||
case CPROC_CONDWAIT: return "C";
|
||||
case CPROC_CONDWAIT|CPROC_SWITCHING:
|
||||
return "CS";
|
||||
case CPROC_CONDWAIT|CPROC_SWITCHING: return "CS";
|
||||
default: return "?";
|
||||
}
|
||||
}
|
||||
|
||||
/* type == MACH_MSG_TYPE_COPY_SEND || type == MACH_MSG_TYPE_MAKE_SEND
|
||||
*/
|
||||
/* type == MACH_MSG_TYPE_COPY_SEND || type == MACH_MSG_TYPE_MAKE_SEND */
|
||||
|
||||
mach_port_t /* no mach_port_name_t found in include files. */
|
||||
map_inferior_port_name (inferior_name, type)
|
||||
|
@ -2041,26 +2084,26 @@ static char buf[7];
|
|||
|
||||
static char *
|
||||
get_thread_name (one_cproc, id)
|
||||
cproc_t one_cproc;
|
||||
gdb_thread_t one_cproc;
|
||||
int id;
|
||||
{
|
||||
if (one_cproc)
|
||||
if (one_cproc->incarnation == NULL)
|
||||
if (one_cproc->cthread == NULL)
|
||||
{
|
||||
/* cproc not mapped to any cthread */
|
||||
sprintf(buf, "_C%d", id);
|
||||
}
|
||||
else if (! one_cproc->incarnation->name)
|
||||
else if (! one_cproc->cthread->name)
|
||||
{
|
||||
/* cproc and cthread, but no name */
|
||||
sprintf(buf, "_t%d", id);
|
||||
}
|
||||
else
|
||||
return (one_cproc->incarnation->name);
|
||||
return (one_cproc->cthread->name);
|
||||
else
|
||||
{
|
||||
if (id < 0)
|
||||
message ("Inconsistency in thread name id %d", id);
|
||||
warning ("Inconsistency in thread name id %d", id);
|
||||
|
||||
/* Kernel thread without cproc */
|
||||
sprintf(buf, "_K%d", id);
|
||||
|
@ -2083,7 +2126,7 @@ fetch_thread_info (task, mthreads_out)
|
|||
ret = task_threads (task, &th_table, &th_count);
|
||||
if (ret != KERN_SUCCESS)
|
||||
{
|
||||
message ("Error getting inferior's thread list:%s",
|
||||
warning ("Error getting inferior's thread list:%s",
|
||||
mach_error_string(ret));
|
||||
kill_inferior ();
|
||||
return -1;
|
||||
|
@ -2130,7 +2173,7 @@ fetch_thread_info (task, mthreads_out)
|
|||
(th_count * sizeof(mach_port_t)));
|
||||
if (ret != KERN_SUCCESS)
|
||||
{
|
||||
message ("Error trying to deallocate thread list : %s",
|
||||
warning ("Error trying to deallocate thread list : %s",
|
||||
mach_error_string (ret));
|
||||
}
|
||||
|
||||
|
@ -2157,7 +2200,7 @@ fetch_usp_from_emulator_stack (sp)
|
|||
&stack_pointer,
|
||||
sizeof (CORE_ADDR)) != sizeof (CORE_ADDR))
|
||||
{
|
||||
message ("Can't read user sp from emulator stack address 0x%x", sp);
|
||||
warning ("Can't read user sp from emulator stack address 0x%x", sp);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -2211,7 +2254,7 @@ have_emulator_p (task)
|
|||
static boolean_t informed = FALSE;
|
||||
if (!informed)
|
||||
{
|
||||
message("Emulation vector address 0x08%x outside emulator space",
|
||||
warning("Emulation vector address 0x08%x outside emulator space",
|
||||
entry);
|
||||
informed = TRUE;
|
||||
}
|
||||
|
@ -2220,41 +2263,41 @@ have_emulator_p (task)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
/*
|
||||
* Map cprocs to kernel threads and vice versa.
|
||||
*
|
||||
* For reverse mapping the code mis-uses one struct cproc field,
|
||||
* see "os-mach3.h" and code here.
|
||||
*
|
||||
*/
|
||||
/* Map cprocs to kernel threads and vice versa. */
|
||||
|
||||
void
|
||||
map_cprocs_to_kernel_threads (cprocs, mthreads, thread_count)
|
||||
cproc_t cprocs;
|
||||
gdb_thread_t cprocs;
|
||||
gdb_thread_t mthreads;
|
||||
int thread_count;
|
||||
{
|
||||
int index;
|
||||
cproc_t scan;
|
||||
gdb_thread_t scan;
|
||||
boolean_t all_mapped = TRUE;
|
||||
|
||||
for (scan = cprocs; scan; scan = scan->list)
|
||||
for (scan = cprocs; scan; scan = scan->next)
|
||||
{
|
||||
/* Default to: no kernel thread for this cproc */
|
||||
CPROC_REVERSE_MAP (scan) = -1;
|
||||
scan->reverse_map = -1;
|
||||
|
||||
/* Check if the cproc is found by its stack */
|
||||
for (index = 0; index < thread_count; index++)
|
||||
{
|
||||
if ((mthreads + index)->sp > scan->stack_base &&
|
||||
(mthreads + index)->sp <= scan->stack_base + scan->stack_size)
|
||||
LONGEST stack_base =
|
||||
extract_signed_integer (scan.raw_cproc + CPROC_BASE_OFFSET,
|
||||
CPROC_BASE_SIZE);
|
||||
LONGEST stack_size =
|
||||
extract_signed_integer (scan.raw_cproc + CPROC_SIZE_OFFSET,
|
||||
CPROC_SIZE_SIZE);
|
||||
if ((mthreads + index)->sp > stack_base &&
|
||||
(mthreads + index)->sp <= stack_base + stack_size)
|
||||
{
|
||||
(mthreads + index)->cproc = scan;
|
||||
CPROC_REVERSE_MAP (scan) = index;
|
||||
scan->reverse_map = index;
|
||||
break;
|
||||
}
|
||||
}
|
||||
all_mapped &= (CPROC_REVERSE_MAP(scan) != -1);
|
||||
all_mapped &= (scan->reverse_map != -1);
|
||||
}
|
||||
|
||||
/* Check for threads that are currently in the emulator.
|
||||
|
@ -2282,7 +2325,7 @@ map_cprocs_to_kernel_threads (cprocs, mthreads, thread_count)
|
|||
gdb_thread_t mthread = (mthreads+index);
|
||||
emul_sp = mthread->sp;
|
||||
|
||||
if (! mthread->cproc &&
|
||||
if (mthread->cproc == NULL &&
|
||||
EMULATOR_BASE <= emul_sp && emul_sp <= EMULATOR_END)
|
||||
{
|
||||
mthread->in_emulator = emulator_present;
|
||||
|
@ -2298,19 +2341,19 @@ map_cprocs_to_kernel_threads (cprocs, mthreads, thread_count)
|
|||
/* Try to match this stack pointer to the cprocs that
|
||||
* don't yet have a kernel thread.
|
||||
*/
|
||||
for (scan = cprocs; scan; scan = scan->list)
|
||||
for (scan = cprocs; scan; scan = scan->next)
|
||||
{
|
||||
|
||||
/* Check is this unmapped CPROC stack contains
|
||||
* the user stack pointer saved in the
|
||||
* emulator.
|
||||
*/
|
||||
if (CPROC_REVERSE_MAP (scan) == -1 &&
|
||||
if (scan->reverse_map == -1 &&
|
||||
usp > scan->stack_base &&
|
||||
usp <= scan->stack_base + scan->stack_size)
|
||||
{
|
||||
mthread->cproc = scan;
|
||||
CPROC_REVERSE_MAP (scan) = index;
|
||||
scan->reverse_map = index;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -2380,10 +2423,13 @@ lookup_address_of_variable (name)
|
|||
return symaddr;
|
||||
}
|
||||
|
||||
static cproc_t
|
||||
static gdb_thread_t
|
||||
get_cprocs()
|
||||
{
|
||||
cproc_t their_cprocs, cproc_head, cproc_copy;
|
||||
gdb_thread_t cproc_head;
|
||||
gdb_thread_t cproc_copy;
|
||||
CORE_ADDR their_cprocs;
|
||||
char *buf[TARGET_PTR_BIT / HOST_CHAR_BIT];
|
||||
char *name;
|
||||
cthread_t cthread;
|
||||
CORE_ADDR symaddr;
|
||||
|
@ -2391,7 +2437,8 @@ get_cprocs()
|
|||
symaddr = lookup_address_of_variable ("cproc_list");
|
||||
|
||||
if (! symaddr)
|
||||
{ /* cproc_list is not in a file compiled with debugging
|
||||
{
|
||||
/* cproc_list is not in a file compiled with debugging
|
||||
symbols, but don't give up yet */
|
||||
|
||||
symaddr = lookup_address_of_variable ("cprocs");
|
||||
|
@ -2399,56 +2446,67 @@ get_cprocs()
|
|||
if (symaddr)
|
||||
{
|
||||
static int informed = 0;
|
||||
if (!informed) {
|
||||
if (!informed)
|
||||
{
|
||||
informed++;
|
||||
message ("Your program is loaded with an old threads library.");
|
||||
message ("GDB does not know the old form of threads");
|
||||
message ("so things may not work.");
|
||||
warning ("Your program is loaded with an old threads library.");
|
||||
warning ("GDB does not know the old form of threads");
|
||||
warning ("so things may not work.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Stripped or no -lthreads loaded or "cproc_list" is in wrong segment. */
|
||||
if (! symaddr)
|
||||
return NO_CPROC;
|
||||
return NULL;
|
||||
|
||||
/* Get the address of the first cproc in the task */
|
||||
if (!mach3_read_inferior(symaddr,
|
||||
&their_cprocs,
|
||||
sizeof(cproc_t)))
|
||||
error("Can't read cproc master list at address (0x%x).", symaddr);
|
||||
if (!mach3_read_inferior (symaddr,
|
||||
buf,
|
||||
TARGET_PTR_BIT / HOST_CHAR_BIT))
|
||||
error ("Can't read cproc master list at address (0x%x).", symaddr);
|
||||
their_cprocs = extract_address (buf, TARGET_PTR_BIT / HOST_CHAR_BIT);
|
||||
|
||||
/* Scan the CPROCs in the task.
|
||||
CPROCs are chained with LIST field, not NEXT field, which
|
||||
chains mutexes, condition variables and queues */
|
||||
|
||||
cproc_head = NO_CPROC;
|
||||
cproc_head = NULL;
|
||||
|
||||
while (their_cprocs != NO_CPROC)
|
||||
while (their_cprocs != (CORE_ADDR)0)
|
||||
{
|
||||
cproc_copy = (cproc_t) obstack_alloc(cproc_obstack,
|
||||
sizeof(struct cproc));
|
||||
CORE_ADDR cproc_copy_incarnation;
|
||||
cproc_copy = (gdb_thread_t) obstack_alloc (cproc_obstack,
|
||||
sizeof (struct gdb_thread));
|
||||
|
||||
if (!mach3_read_inferior(their_cprocs,
|
||||
cproc_copy,
|
||||
sizeof(struct cproc)))
|
||||
if (!mach3_read_inferior (their_cprocs,
|
||||
&cproc_copy.raw_cproc[0],
|
||||
CPROC_SIZE))
|
||||
error("Can't read next cproc at 0x%x.", their_cprocs);
|
||||
cproc_copy = extract_address (buf, TARGET_PTR_BIT / HOST_CHAR_BIT);
|
||||
|
||||
their_cprocs = cproc_copy->list;
|
||||
their_cprocs =
|
||||
extract_address (cproc_copy.raw_cproc + CPROC_LIST_OFFSET,
|
||||
CPROC_LIST_SIZE);
|
||||
cproc_copy_incarnation =
|
||||
extract_address (cproc_copy.raw_cproc + CPROC_INCARNATION_OFFSET,
|
||||
CPROC_INCARNATION_SIZE);
|
||||
|
||||
if (cproc_copy->incarnation != NULL)
|
||||
if (cproc_copy_incarnation == (CORE_ADDR)0)
|
||||
cproc_copy->cthread = NULL;
|
||||
else
|
||||
{
|
||||
/* This CPROC has an attached CTHREAD. Get its name */
|
||||
cthread = (cthread_t)obstack_alloc (cproc_obstack,
|
||||
sizeof(struct cthread));
|
||||
|
||||
if (!mach3_read_inferior(cproc_copy->incarnation,
|
||||
if (!mach3_read_inferior (cproc_copy_incarnation,
|
||||
cthread,
|
||||
sizeof(struct cthread)))
|
||||
error("Can't read next thread at 0x%x.",
|
||||
cproc_copy->incarnation);
|
||||
cproc_copy_incarnation);
|
||||
|
||||
cproc_copy->incarnation = cthread;
|
||||
cproc_copy->cthread = cthread;
|
||||
|
||||
if (cthread->name)
|
||||
{
|
||||
|
@ -2462,10 +2520,10 @@ get_cprocs()
|
|||
}
|
||||
|
||||
/* insert in front */
|
||||
cproc_copy->list = cproc_head;
|
||||
cproc_copy->next = cproc_head;
|
||||
cproc_head = cproc_copy;
|
||||
}
|
||||
return(cproc_head);
|
||||
return cproc_head;
|
||||
}
|
||||
|
||||
#ifndef FETCH_CPROC_STATE
|
||||
|
@ -2489,7 +2547,9 @@ mach3_cproc_state (mthread)
|
|||
if (! mthread || !mthread->cproc || !mthread->cproc->context)
|
||||
return -1;
|
||||
|
||||
context = mthread->cproc->context;
|
||||
context = extract_signed_integer
|
||||
(mthread->cproc->raw_cproc + CPROC_CONTEXT_OFFSET,
|
||||
CPROC_CONTEXT_SIZE);
|
||||
|
||||
mthread->sp = context + MACHINE_CPROC_SP_OFFSET;
|
||||
|
||||
|
@ -2497,7 +2557,7 @@ mach3_cproc_state (mthread)
|
|||
&mthread->pc,
|
||||
sizeof (CORE_ADDR)) != sizeof (CORE_ADDR))
|
||||
{
|
||||
message ("Can't read cproc pc from inferior");
|
||||
warning ("Can't read cproc pc from inferior");
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
@ -2505,7 +2565,7 @@ mach3_cproc_state (mthread)
|
|||
&mthread->fp,
|
||||
sizeof (CORE_ADDR)) != sizeof (CORE_ADDR))
|
||||
{
|
||||
message ("Can't read cproc fp from inferior");
|
||||
warning ("Can't read cproc fp from inferior");
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
@ -2519,8 +2579,8 @@ thread_list_command()
|
|||
{
|
||||
thread_basic_info_data_t ths;
|
||||
int thread_count;
|
||||
cproc_t cprocs;
|
||||
cproc_t scan;
|
||||
gdb_thread_t cprocs;
|
||||
gdb_thread_t scan;
|
||||
int index;
|
||||
char *name;
|
||||
char selected;
|
||||
|
@ -2555,7 +2615,7 @@ thread_list_command()
|
|||
|
||||
map_cprocs_to_kernel_threads (cprocs, their_threads, thread_count);
|
||||
|
||||
for (scan = cprocs; scan; scan = scan->list)
|
||||
for (scan = cprocs; scan; scan = scan->next)
|
||||
{
|
||||
int mid;
|
||||
char buf[10];
|
||||
|
@ -2564,10 +2624,12 @@ thread_list_command()
|
|||
selected = ' ';
|
||||
|
||||
/* a wired cproc? */
|
||||
wired = scan->wired ? "wired" : "";
|
||||
wired = (extract_address (scan->raw_cproc + CPROC_WIRED_OFFSET,
|
||||
CPROC_WIRED_SIZE)
|
||||
? "wired" : "");
|
||||
|
||||
if (CPROC_REVERSE_MAP(scan) != -1)
|
||||
kthread = (their_threads + CPROC_REVERSE_MAP(scan));
|
||||
if (scan->reverse_map != -1)
|
||||
kthread = (their_threads + scan->reverse_map);
|
||||
else
|
||||
kthread = NULL;
|
||||
|
||||
|
@ -2586,7 +2648,7 @@ thread_list_command()
|
|||
|
||||
if (ret != KERN_SUCCESS)
|
||||
{
|
||||
message ("Unable to get basic info on thread %d : %s",
|
||||
warning ("Unable to get basic info on thread %d : %s",
|
||||
mid,
|
||||
mach_error_string (ret));
|
||||
continue;
|
||||
|
@ -2611,6 +2673,7 @@ thread_list_command()
|
|||
if (ths.flags & TH_FLAGS_IDLE)
|
||||
strcat (buf, "I");
|
||||
|
||||
/* FIXME: May run afloul of arbitrary limit in printf_filtered. */
|
||||
printf_filtered (TL_FORMAT,
|
||||
slot,
|
||||
mid,
|
||||
|
@ -2638,6 +2701,7 @@ thread_list_command()
|
|||
continue; /* EMcM */
|
||||
#endif
|
||||
|
||||
/* FIXME: May run afloul of arbitrary limit in printf_filtered. */
|
||||
printf_filtered (TL_FORMAT,
|
||||
"-",
|
||||
-neworder, /* Pseudo MID */
|
||||
|
@ -2683,7 +2747,7 @@ thread_list_command()
|
|||
|
||||
if (ret != KERN_SUCCESS)
|
||||
{
|
||||
message ("Unable to get basic info on thread %d : %s",
|
||||
warning ("Unable to get basic info on thread %d : %s",
|
||||
mid,
|
||||
mach_error_string (ret));
|
||||
continue;
|
||||
|
@ -2709,6 +2773,7 @@ thread_list_command()
|
|||
if (ths.flags & TH_FLAGS_IDLE)
|
||||
strcat (buf, "I");
|
||||
|
||||
/* FIXME: May run afloul of arbitrary limit in printf_filtered. */
|
||||
printf_filtered (TL_FORMAT,
|
||||
slot,
|
||||
mid,
|
||||
|
@ -2779,7 +2844,7 @@ boolean_t set;
|
|||
|
||||
if (! MACH_PORT_VALID (thread))
|
||||
{
|
||||
message ("thread_trace: invalid thread");
|
||||
warning ("thread_trace: invalid thread");
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -2828,7 +2893,7 @@ flush_inferior_icache(pc, amount)
|
|||
MATTR_CACHE,
|
||||
&flush);
|
||||
if (ret != KERN_SUCCESS)
|
||||
message ("Error flushing inferior's cache : %s",
|
||||
warning ("Error flushing inferior's cache : %s",
|
||||
mach_error_string (ret));
|
||||
}
|
||||
#endif FLUSH_INFERIOR_CACHE
|
||||
|
@ -2848,7 +2913,7 @@ suspend_all_threads (from_tty)
|
|||
ret = task_threads (inferior_task, &thread_list, &thread_count);
|
||||
if (ret != KERN_SUCCESS)
|
||||
{
|
||||
message ("Could not suspend inferior threads.");
|
||||
warning ("Could not suspend inferior threads.");
|
||||
kill_inferior ();
|
||||
return_to_top_level ();
|
||||
}
|
||||
|
@ -2863,7 +2928,7 @@ suspend_all_threads (from_tty)
|
|||
ret = thread_suspend(thread_list[ index ]);
|
||||
|
||||
if (ret != KERN_SUCCESS)
|
||||
message ("Error trying to suspend thread %d : %s",
|
||||
warning ("Error trying to suspend thread %d : %s",
|
||||
mid, mach_error_string (ret));
|
||||
|
||||
if (from_tty)
|
||||
|
@ -2875,7 +2940,7 @@ suspend_all_threads (from_tty)
|
|||
&infoCnt);
|
||||
CHK ("suspend can't get thread info", ret);
|
||||
|
||||
message ("Thread %d suspend count is %d",
|
||||
warning ("Thread %d suspend count is %d",
|
||||
mid, th_info.suspend_count);
|
||||
}
|
||||
}
|
||||
|
@ -2924,7 +2989,7 @@ thread_suspend_command (args, from_tty)
|
|||
|
||||
ret = thread_suspend (current_thread);
|
||||
if (ret != KERN_SUCCESS)
|
||||
message ("thread_suspend failed : %s",
|
||||
warning ("thread_suspend failed : %s",
|
||||
mach_error_string (ret));
|
||||
|
||||
infoCnt = THREAD_BASIC_INFO_COUNT;
|
||||
|
@ -2934,7 +2999,7 @@ thread_suspend_command (args, from_tty)
|
|||
&infoCnt);
|
||||
CHK ("suspend can't get thread info", ret);
|
||||
|
||||
message ("Thread %d suspend count is %d", mid, th_info.suspend_count);
|
||||
warning ("Thread %d suspend count is %d", mid, th_info.suspend_count);
|
||||
|
||||
current_thread = saved_thread;
|
||||
}
|
||||
|
@ -2971,17 +3036,17 @@ resume_all_threads (from_tty)
|
|||
if (! th_info.suspend_count)
|
||||
{
|
||||
if (mid != -1 && from_tty)
|
||||
message ("Thread %d is not suspended", mid);
|
||||
warning ("Thread %d is not suspended", mid);
|
||||
continue;
|
||||
}
|
||||
|
||||
ret = thread_resume (thread_list[ index ]);
|
||||
|
||||
if (ret != KERN_SUCCESS)
|
||||
message ("Error trying to resume thread %d : %s",
|
||||
warning ("Error trying to resume thread %d : %s",
|
||||
mid, mach_error_string (ret));
|
||||
else if (mid != -1 && from_tty)
|
||||
message ("Thread %d suspend count is %d",
|
||||
warning ("Thread %d suspend count is %d",
|
||||
mid, --th_info.suspend_count);
|
||||
}
|
||||
|
||||
|
@ -3035,18 +3100,18 @@ thread_resume_command (args, from_tty)
|
|||
|
||||
if (! th_info.suspend_count)
|
||||
{
|
||||
message ("Thread %d is not suspended", mid);
|
||||
warning ("Thread %d is not suspended", mid);
|
||||
goto out;
|
||||
}
|
||||
|
||||
ret = thread_resume (current_thread);
|
||||
if (ret != KERN_SUCCESS)
|
||||
message ("thread_resume failed : %s",
|
||||
warning ("thread_resume failed : %s",
|
||||
mach_error_string (ret));
|
||||
else
|
||||
{
|
||||
th_info.suspend_count--;
|
||||
message ("Thread %d suspend count is %d", mid, th_info.suspend_count);
|
||||
warning ("Thread %d suspend count is %d", mid, th_info.suspend_count);
|
||||
}
|
||||
|
||||
out:
|
||||
|
@ -3094,7 +3159,7 @@ thread_kill_command (args, from_tty)
|
|||
CHK ("Thread could not be terminated", ret);
|
||||
|
||||
if (select_thread (inferior_task, 0, 1) != KERN_SUCCESS)
|
||||
message ("Last thread was killed, use \"kill\" command to kill task");
|
||||
warning ("Last thread was killed, use \"kill\" command to kill task");
|
||||
}
|
||||
else
|
||||
for (index = 0; index < thread_count; index++)
|
||||
|
@ -3111,7 +3176,7 @@ thread_kill_command (args, from_tty)
|
|||
(thread_count * sizeof(mach_port_t)));
|
||||
CHK ("Error trying to deallocate thread list", ret);
|
||||
|
||||
message ("Thread %d killed", mid);
|
||||
warning ("Thread %d killed", mid);
|
||||
}
|
||||
|
||||
|
||||
|
@ -3151,14 +3216,14 @@ task_resume_command (args, from_tty)
|
|||
|
||||
if (ta_info.suspend_count == 1)
|
||||
{
|
||||
message ("Inferior task %d is no longer suspended", mid);
|
||||
warning ("Inferior task %d is no longer suspended", mid);
|
||||
must_suspend_thread = 1;
|
||||
/* @@ This is not complete: Registers change all the time when not
|
||||
suspended! */
|
||||
registers_changed ();
|
||||
}
|
||||
else
|
||||
message ("Inferior task %d suspend count is now %d",
|
||||
warning ("Inferior task %d suspend count is now %d",
|
||||
mid, ta_info.suspend_count-1);
|
||||
}
|
||||
|
||||
|
@ -3190,7 +3255,7 @@ task_suspend_command (args, from_tty)
|
|||
&infoCnt);
|
||||
CHK ("task_suspend_command: task_info failed", ret);
|
||||
|
||||
message ("Inferior task %d suspend count is now %d",
|
||||
warning ("Inferior task %d suspend count is now %d",
|
||||
mid, ta_info.suspend_count);
|
||||
}
|
||||
|
||||
|
@ -3507,7 +3572,7 @@ gdb_register_port (name, port)
|
|||
|
||||
if (! MACH_PORT_VALID (port) || !name || !*name)
|
||||
{
|
||||
message ("Invalid registration request");
|
||||
warning ("Invalid registration request");
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -3665,29 +3730,31 @@ do_mach_notify_dead_name (notify, name)
|
|||
switch (element->type) {
|
||||
|
||||
case MACH_TYPE_THREAD:
|
||||
target_terminal_ours_for_output ();
|
||||
if (name == current_thread)
|
||||
{
|
||||
message ("\nCurrent thread %d died", element->mid);
|
||||
printf_filtered ("\nCurrent thread %d died", element->mid);
|
||||
current_thread = MACH_PORT_NULL;
|
||||
}
|
||||
else
|
||||
message ("\nThread %d died", element->mid);
|
||||
printf_filtered ("\nThread %d died", element->mid);
|
||||
|
||||
break;
|
||||
|
||||
case MACH_TYPE_TASK:
|
||||
target_terminal_ours_for_output ();
|
||||
if (name != inferior_task)
|
||||
message ("Task %d died, but it was not the selected task",
|
||||
printf_filtered ("Task %d died, but it was not the selected task",
|
||||
element->mid);
|
||||
else
|
||||
{
|
||||
message ("Current task %d died", element->mid);
|
||||
printf_filtered ("Current task %d died", element->mid);
|
||||
|
||||
mach_port_destroy (mach_task_self(), name);
|
||||
inferior_task = MACH_PORT_NULL;
|
||||
|
||||
if (notify_chain)
|
||||
message("There were still unreceived dead_name_notifications???");
|
||||
warning ("There were still unreceived dead_name_notifications???");
|
||||
|
||||
/* Destroy the old notifications */
|
||||
setup_notify_port (0);
|
||||
|
@ -3709,7 +3776,7 @@ do_mach_notify_msg_accepted (notify, name)
|
|||
mach_port_t notify;
|
||||
mach_port_t name;
|
||||
{
|
||||
message ("do_mach_notify_msg_accepted : notify %x, name %x",
|
||||
warning ("do_mach_notify_msg_accepted : notify %x, name %x",
|
||||
notify, name);
|
||||
return KERN_SUCCESS;
|
||||
}
|
||||
|
@ -3719,7 +3786,7 @@ do_mach_notify_no_senders (notify, mscount)
|
|||
mach_port_t notify;
|
||||
mach_port_mscount_t mscount;
|
||||
{
|
||||
message ("do_mach_notify_no_senders : notify %x, mscount %x",
|
||||
warning ("do_mach_notify_no_senders : notify %x, mscount %x",
|
||||
notify, mscount);
|
||||
return KERN_SUCCESS;
|
||||
}
|
||||
|
@ -3729,7 +3796,7 @@ do_mach_notify_port_deleted (notify, name)
|
|||
mach_port_t notify;
|
||||
mach_port_t name;
|
||||
{
|
||||
message ("do_mach_notify_port_deleted : notify %x, name %x",
|
||||
warning ("do_mach_notify_port_deleted : notify %x, name %x",
|
||||
notify, name);
|
||||
return KERN_SUCCESS;
|
||||
}
|
||||
|
@ -3739,7 +3806,7 @@ do_mach_notify_port_destroyed (notify, rights)
|
|||
mach_port_t notify;
|
||||
mach_port_t rights;
|
||||
{
|
||||
message ("do_mach_notify_port_destroyed : notify %x, rights %x",
|
||||
warning ("do_mach_notify_port_destroyed : notify %x, rights %x",
|
||||
notify, rights);
|
||||
return KERN_SUCCESS;
|
||||
}
|
||||
|
@ -3750,7 +3817,7 @@ do_mach_notify_send_once (notify)
|
|||
{
|
||||
#ifdef DUMP_SYSCALL
|
||||
/* MANY of these are generated. */
|
||||
message ("do_mach_notify_send_once : notify %x",
|
||||
warning ("do_mach_notify_send_once : notify %x",
|
||||
notify);
|
||||
#endif
|
||||
return KERN_SUCCESS;
|
||||
|
@ -3882,7 +3949,7 @@ m3_resume (pid, step, signal)
|
|||
|
||||
ret = task_resume (inferior_task);
|
||||
if (ret == KERN_FAILURE)
|
||||
message ("Task was not suspended");
|
||||
warning ("Task was not suspended");
|
||||
else
|
||||
CHK ("Resuming task", ret);
|
||||
|
||||
|
@ -4037,7 +4104,7 @@ deallocate_inferior_ports ()
|
|||
ret = task_threads (inferior_task, &thread_list, &thread_count);
|
||||
if (ret != KERN_SUCCESS)
|
||||
{
|
||||
message ("deallocate_inferior_ports: task_threads",
|
||||
warning ("deallocate_inferior_ports: task_threads",
|
||||
mach_error_string(ret));
|
||||
return;
|
||||
}
|
||||
|
@ -4107,7 +4174,7 @@ m3_do_detach (signal)
|
|||
setup_notify_port (0);
|
||||
|
||||
if (remove_breakpoints ())
|
||||
message ("Could not remove breakpoints when detaching");
|
||||
warning ("Could not remove breakpoints when detaching");
|
||||
|
||||
if (signal && inferior_pid > 0)
|
||||
kill (inferior_pid, signal);
|
||||
|
@ -4435,9 +4502,9 @@ _initialize_m3_nat ()
|
|||
{
|
||||
mid_server = MACH_PORT_NULL;
|
||||
|
||||
message ("initialize machid: netname_lookup_up(MachID) : %s",
|
||||
warning ("initialize machid: netname_lookup_up(MachID) : %s",
|
||||
mach_error_string(ret));
|
||||
message ("Some (most?) features disabled...");
|
||||
warning ("Some (most?) features disabled...");
|
||||
}
|
||||
|
||||
mid_auth = mach_privileged_host_port();
|
||||
|
@ -4462,7 +4529,7 @@ _initialize_m3_nat ()
|
|||
MACH_PORT_RIGHT_RECEIVE,
|
||||
&our_message_port);
|
||||
if (ret != KERN_SUCCESS)
|
||||
message ("Creating message port %s", mach_error_string (ret));
|
||||
warning ("Creating message port %s", mach_error_string (ret));
|
||||
else
|
||||
{
|
||||
char buf[ MAX_NAME_LEN ];
|
||||
|
@ -4470,7 +4537,7 @@ _initialize_m3_nat ()
|
|||
our_message_port,
|
||||
inferior_wait_port_set);
|
||||
if (ret != KERN_SUCCESS)
|
||||
message ("message move member %s", mach_error_string (ret));
|
||||
warning ("message move member %s", mach_error_string (ret));
|
||||
|
||||
|
||||
/* @@@@ No way to change message port name currently */
|
||||
|
|
|
@ -252,10 +252,6 @@ eb_create_inferior (execfile, args, env)
|
|||
|
||||
entry_pt = (int) bfd_get_start_address (exec_bfd);
|
||||
|
||||
#ifdef CREATE_INFERIOR_HOOK
|
||||
CREATE_INFERIOR_HOOK (0); /* No process-ID */
|
||||
#endif
|
||||
|
||||
{
|
||||
/* OK, now read in the file. Y=read, C=COFF, D=no symbols
|
||||
0=start address, %s=filename. */
|
||||
|
|
|
@ -76,6 +76,7 @@ static int sr_get_debug(); /* flag set by "set remotedebug" */
|
|||
#endif
|
||||
static int hashmark; /* flag set by "set hash" */
|
||||
|
||||
/* FIXME: Replace with sr_get_debug (). */
|
||||
#define LOG_FILE "monitor.log"
|
||||
#if defined (LOG_FILE)
|
||||
FILE *log_file;
|
||||
|
@ -288,9 +289,6 @@ monitor_create_inferior (execfile, args, env)
|
|||
|
||||
entry_pt = (int) bfd_get_start_address (exec_bfd);
|
||||
|
||||
#ifdef CREATE_INFERIOR_HOOK
|
||||
CREATE_INFERIOR_HOOK (0); /* No process-ID */
|
||||
#endif
|
||||
#ifdef LOG_FILE
|
||||
fputs ("\nIn Create_inferior()", log_file);
|
||||
#endif
|
||||
|
|
|
@ -609,11 +609,7 @@ nindy_create_inferior (execfile, args, env)
|
|||
|
||||
pid = 42;
|
||||
|
||||
#ifdef CREATE_INFERIOR_HOOK
|
||||
CREATE_INFERIOR_HOOK (pid);
|
||||
#endif
|
||||
|
||||
/* The "process" (board) is already stopped awaiting our commands, and
|
||||
/* The "process" (board) is already stopped awaiting our commands, and
|
||||
the program is already downloaded. We just set its PC and go. */
|
||||
|
||||
inferior_pid = pid; /* Needed for wait_for_inferior below */
|
||||
|
|
|
@ -251,10 +251,6 @@ st2000_create_inferior (execfile, args, env)
|
|||
|
||||
entry_pt = (int) bfd_get_start_address (exec_bfd);
|
||||
|
||||
#ifdef CREATE_INFERIOR_HOOK
|
||||
CREATE_INFERIOR_HOOK (0); /* No process-ID */
|
||||
#endif
|
||||
|
||||
/* The "process" (board) is already stopped awaiting our commands, and
|
||||
the program is already downloaded. We just set its PC and go. */
|
||||
|
||||
|
|
|
@ -215,10 +215,6 @@ vx_create_inferior (exec_file, args, env)
|
|||
vx_running = savestring (passArgs.arg_array_val[0],
|
||||
strlen (passArgs.arg_array_val[0]));
|
||||
|
||||
#ifdef CREATE_INFERIOR_HOOK
|
||||
CREATE_INFERIOR_HOOK (pid);
|
||||
#endif
|
||||
|
||||
push_target (&vx_run_ops);
|
||||
inferior_pid = taskStart.pid;
|
||||
|
||||
|
|
Loading…
Reference in New Issue