Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 28 Jun 2002 19:51:55 -0700 (PDT)
From:      Julian Elischer <julian@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 13562 for review
Message-ID:  <200206290251.g5T2pt7u017279@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://people.freebsd.org/~peter/p4db/chv.cgi?CH=13562

Change 13562 by julian@julian_ref on 2002/06/28 19:51:34

	MFC to keep following current

Affected files ...

.. //depot/projects/kse/gnu/usr.bin/binutils/gdb/Makefile#6 integrate
.. //depot/projects/kse/gnu/usr.bin/binutils/gdb/Makefile.alpha#4 integrate
.. //depot/projects/kse/gnu/usr.bin/binutils/gdb/Makefile.i386#4 integrate
.. //depot/projects/kse/gnu/usr.bin/binutils/gdb/alpha/freebsd-nat-stubs.c#2 delete
.. //depot/projects/kse/gnu/usr.bin/binutils/gdb/alpha/freebsd-nat.c#3 delete
.. //depot/projects/kse/gnu/usr.bin/binutils/gdb/alpha/kvm-fbsd.c#6 delete
.. //depot/projects/kse/gnu/usr.bin/binutils/gdb/alpha/nm.h#4 delete
.. //depot/projects/kse/gnu/usr.bin/binutils/gdb/alpha/tm.h#3 delete
.. //depot/projects/kse/gnu/usr.bin/binutils/gdb/alpha/version.c#3 delete
.. //depot/projects/kse/gnu/usr.bin/binutils/gdb/alpha/xm.h#2 delete
.. //depot/projects/kse/gnu/usr.bin/binutils/gdb/config.h#4 integrate
.. //depot/projects/kse/gnu/usr.bin/binutils/gdb/freebsd-uthread.c#4 integrate
.. //depot/projects/kse/gnu/usr.bin/binutils/gdb/i386/freebsd-nat.c#6 delete
.. //depot/projects/kse/gnu/usr.bin/binutils/gdb/i386/kvm-fbsd.c#10 delete
.. //depot/projects/kse/gnu/usr.bin/binutils/gdb/i386/nm.h#2 delete
.. //depot/projects/kse/gnu/usr.bin/binutils/gdb/i386/tm.h#3 delete
.. //depot/projects/kse/gnu/usr.bin/binutils/gdb/i386/xm.h#2 delete
.. //depot/projects/kse/gnu/usr.bin/binutils/gdb/kvm-fbsd.c#1 branch
.. //depot/projects/kse/sys/boot/alpha/boot1/boot1.c#3 integrate
.. //depot/projects/kse/sys/boot/alpha/libalpha/common.h#2 integrate
.. //depot/projects/kse/sys/ddb/db_elf.c#2 integrate
.. //depot/projects/kse/sys/dev/bge/if_bge.c#11 integrate
.. //depot/projects/kse/sys/dev/fxp/if_fxp.c#14 integrate
.. //depot/projects/kse/sys/dev/lge/if_lge.c#5 integrate
.. //depot/projects/kse/sys/dev/nge/if_nge.c#10 integrate
.. //depot/projects/kse/sys/dev/sio/sio_ebus.c#2 integrate
.. //depot/projects/kse/sys/dev/sound/pci/maestro3.c#7 integrate
.. //depot/projects/kse/sys/geom/geom_aes.c#3 integrate
.. //depot/projects/kse/sys/i386/isa/intr_machdep.h#9 integrate
.. //depot/projects/kse/sys/kern/kern_descrip.c#32 integrate
.. //depot/projects/kse/sys/kern/kern_event.c#12 integrate
.. //depot/projects/kse/sys/kern/kern_exec.c#31 integrate
.. //depot/projects/kse/sys/kern/kern_exit.c#57 integrate
.. //depot/projects/kse/sys/kern/kern_ktrace.c#13 integrate
.. //depot/projects/kse/sys/kern/kern_lockf.c#10 integrate
.. //depot/projects/kse/sys/kern/kern_physio.c#3 integrate
.. //depot/projects/kse/sys/kern/kern_prot.c#30 integrate
.. //depot/projects/kse/sys/kern/kern_resource.c#21 integrate
.. //depot/projects/kse/sys/kern/kern_sig.c#57 integrate
.. //depot/projects/kse/sys/kern/kern_subr.c#15 integrate
.. //depot/projects/kse/sys/kern/kern_synch.c#74 integrate
.. //depot/projects/kse/sys/kern/kern_sysctl.c#14 integrate
.. //depot/projects/kse/sys/kern/kern_time.c#10 integrate
.. //depot/projects/kse/sys/kern/kern_xxx.c#6 integrate
.. //depot/projects/kse/sys/kern/subr_disklabel.c#10 integrate
.. //depot/projects/kse/sys/kern/subr_log.c#7 integrate
.. //depot/projects/kse/sys/kern/subr_mbuf.c#13 integrate
.. //depot/projects/kse/sys/kern/subr_prf.c#15 integrate
.. //depot/projects/kse/sys/kern/subr_prof.c#10 integrate
.. //depot/projects/kse/sys/kern/sys_pipe.c#13 integrate
.. //depot/projects/kse/sys/kern/sys_socket.c#9 integrate
.. //depot/projects/kse/sys/kern/uipc_cow.c#2 integrate
.. //depot/projects/kse/sys/kern/uipc_jumbo.c#2 integrate
.. //depot/projects/kse/sys/kern/uipc_socket.c#20 integrate
.. //depot/projects/kse/sys/kern/uipc_socket2.c#18 integrate
.. //depot/projects/kse/sys/kern/uipc_syscalls.c#19 integrate
.. //depot/projects/kse/sys/kern/uipc_usrreq.c#20 integrate
.. //depot/projects/kse/sys/kern/vfs_cache.c#14 integrate
.. //depot/projects/kse/sys/kern/vfs_export.c#5 integrate
.. //depot/projects/kse/sys/kern/vfs_subr.c#35 integrate
.. //depot/projects/kse/sys/kern/vfs_syscalls.c#30 integrate
.. //depot/projects/kse/sys/kern/vfs_vnops.c#28 integrate
.. //depot/projects/kse/sys/modules/ipfw/Makefile#3 integrate
.. //depot/projects/kse/sys/netinet/ip_fw2.c#2 integrate
.. //depot/projects/kse/sys/netinet/tcp_syncache.c#18 integrate
.. //depot/projects/kse/sys/nfsclient/nfs.h#10 integrate
.. //depot/projects/kse/sys/nfsclient/nfs_bio.c#9 integrate
.. //depot/projects/kse/sys/nfsclient/nfs_socket.c#13 integrate
.. //depot/projects/kse/sys/nfsclient/nfs_vnops.c#9 integrate
.. //depot/projects/kse/sys/pci/if_sk.c#7 integrate
.. //depot/projects/kse/sys/pci/if_ti.c#11 integrate
.. //depot/projects/kse/sys/pci/if_wb.c#5 integrate
.. //depot/projects/kse/sys/sparc64/include/profile.h#2 integrate
.. //depot/projects/kse/sys/sys/event.h#8 integrate
.. //depot/projects/kse/sys/sys/file.h#12 integrate
.. //depot/projects/kse/sys/sys/jumbo.h#2 integrate
.. //depot/projects/kse/sys/sys/mbuf.h#11 integrate
.. //depot/projects/kse/sys/sys/socketvar.h#22 integrate
.. //depot/projects/kse/sys/sys/vnode.h#26 integrate

Differences ...

==== //depot/projects/kse/gnu/usr.bin/binutils/gdb/Makefile#6 (text+ko) ====

@@ -1,4 +1,4 @@
-# $FreeBSD: src/gnu/usr.bin/binutils/gdb/Makefile,v 1.59 2002/06/22 17:07:45 obrien Exp $
+# $FreeBSD: src/gnu/usr.bin/binutils/gdb/Makefile,v 1.60 2002/06/29 01:16:00 obrien Exp $
 
 .include "../Makefile.inc0"
 
@@ -9,22 +9,28 @@
 XSRCS=	annotate.c ax-general.c ax-gdb.c bcache.c blockframe.c		\
 	breakpoint.c buildsym.c c-exp.y c-lang.c c-typeprint.c		\
 	c-valprint.c ch-exp.c ch-lang.c ch-typeprint.c ch-valprint.c	\
-	coffread.c command.c complaints.c copying.c core-regset.c	\
+	coffread.c complaints.c copying.c core-regset.c	\
 	corefile.c corelow.c cp-valprint.c dcache.c dbxread.c		\
 	demangle.c dwarfread.c dwarf2read.c elfread.c environ.c eval.c	\
 	exec.c expprint.c f-exp.y f-lang.c f-typeprint.c f-valprint.c	\
-	findvar%UAfix.c fork-child.c freebsd-uthread.c gdbarch.c gdbtypes.c \
+	findvar.c fork-child.c gdbarch.c gdbtypes.c \
 	infcmd.c inflow.c infptrace.c infrun.c inftarg.c language.c	\
 	jv-exp.y jv-lang.c jv-valprint.c jv-typeprint.c nlmread.c	\
 	m2-lang.c m2-exp.y m2-typeprint.c m2-valprint.c main.c maint.c	\
 	mdebugread.c mem-break.c minsyms.c objfiles.c parse.c		\
 	printcmd.c remote.c remote-utils.c scm-exp.c scm-lang.c		\
 	scm-valprint.c solib.c source.c stabsread.c stack.c symfile.c	\
-	symmisc.c symtab.c target.c thread.c top.c tracepoint.c		\
+	symmisc.c symtab.c target.c thread.c top.c tracepoint.c \
 	typeprint.c utils.c valarith.c valops.c valprint.c values.c	\
-	version.c serial.c ser-unix.c ser-tcp.c
-SRCS=	init.c ${XSRCS}
-SRCS+=	wait.h
+	serial.c ser-unix.c ser-tcp.c
+XSRCS+=	arch-utils.c cp-abi.c completer.c doublest.c event-loop.c	\
+	event-top.c frame.c gdb-events.c inf-loop.c linespec.c		\
+	memattr.c regcache.c signals.c solib-svr4.c solib-legacy.c	\
+	ui-file.c ui-out.c wrapper.c cli-out.c \
+	cli-cmds.c cli-cmds.h cli-decode.c cli-decode.h	cli-script.c	\
+	cli-script.h cli-setshow.c cli-setshow.h cli-utils.c cli-utils.h
+XSRCS+=	freebsd-uthread.c kvm-fbsd.c
+SRCS=	init.c ${XSRCS} nm.h tm.h xm.h gdbversion.c xregex.h
 
 .if exists(${.CURDIR}/Makefile.${TARGET_ARCH})
 .include "${.CURDIR}/Makefile.${TARGET_ARCH}"
@@ -34,17 +40,22 @@
 .if ${TARGET_ARCH} != ${MACHINE_ARCH}
 CFLAGS+=	-DCROSS_COMPILE=1
 .endif
+CFLAGS+=	-DDEFAULT_BFD_ARCH=bfd_${TARGET_ARCH}_arch
 CFLAGS+=	-I${.CURDIR}/${TARGET_ARCH}
 CFLAGS+=	-I${SRCDIR}/binutils
 CFLAGS+=	-I${SRCDIR}/bfd
 CFLAGS+=	-I${GDBDIR}/gdb
 CFLAGS+=	-I${GDBDIR}/gdb/config
-DPADD=		${RELTOP}/libbfd/libbfd.a
+DPADD=		${LIBKVM}
+DPADD+=		${LIBM}
+DPADD+=		${RELTOP}/libbfd/libbfd.a
 DPADD+=		${RELTOP}/libopcodes/libopcodes.a
 DPADD+=		${LIBGNUREGEX}
 DPADD+=		${RELTOP}/libiberty/libiberty.a
 DPADD+=		${LIBREADLINE}
 DPADD+=		${LIBTERMCAP}
+LDADD=		-lkvm
+LDADD+=		-lm
 LDADD+=		${RELTOP}/libbfd/libbfd.a
 LDADD+=		${RELTOP}/libopcodes/libopcodes.a
 LDADD+=		-lgnuregex
@@ -53,16 +64,13 @@
 LDADD+=		-ltermcap
 
 GDBDIR=	${.CURDIR}/../../../../contrib/gdb
-.PATH:	${GDBDIR}/gdb
+.PATH:	${GDBDIR}/gdb ${GDBDIR}/gdb/cli
 .PATH:	${SRCDIR}/opcodes
 
-CFLAGS+=	-DFREEBSD_ELF
-
 CFLAGS+= -I$(.CURDIR) -I${DESTDIR}/usr/include/readline
 YFLAGS=
 
-CLEANFILES=	init.c init.c-tmp wait.h
-CLEANFILES+=	findvar%UAfix.c
+CLEANFILES=	init.c init.c-tmp nm.h tm.h xm.h gdbversion.c xregex.h
 
 # We do this by grepping through sources.  If that turns out to be too slow,
 # maybe we could just require every .o file to have an initialization routine
@@ -80,6 +88,8 @@
 	@rm -f init.c-tmp
 	@echo '/* Do not modify this file.  */' >init.c-tmp
 	@echo '/* It is created automatically by the Makefile.  */'>>init.c-tmp
+	@echo '#include "defs.h"'		>>init.c-tmp
+	@echo '#include "call-cmds.h"'		>>init.c-tmp
 	@echo 'void initialize_all_files () {' >>init.c-tmp
 	@for i in ${.ALLSRC} ; do \
 	  filename=`echo $$i | sed \
@@ -106,7 +116,24 @@
 
 .PRECIOUS: init.c
 
-wait.h:
-	ln -sf ${.CURDIR}/../../../../sys/sys/wait.h ${.TARGET}
+nm.h:
+	echo '#include "${TARGET_ARCH}/nm-fbsd.h"'	>${.TARGET}
+	echo '#include "fbsd-kgdb.h"'		>>${.TARGET}
+
+.for H in tm-fbsd xm-${TARGET_ARCH}
+${H:C/-.*$//}.h:
+	ln -sf \
+	    ${.CURDIR}/../../../../contrib/gdb/gdb/config/${TARGET_ARCH}/${H}.h \
+	    ${.TARGET}
+.endfor
+
+gdbversion.c: version.in
+	@echo '#include "version.h"'				> ${.TARGET}
+	@echo 'const char version[] = "'"`sed q ${.ALLSRC}`"'";'>>${.TARGET}
+	@echo 'const char host_name[] = "${MACHINE_ARCH}-undermydesk-freebsd";'	>>${.TARGET}
+	@echo 'const char target_name[] = "${TARGET_ARCH}-undermydesk-freebsd";'	>>${.TARGET}
+
+xregex.h:
+	@echo '#include <gnuregex.h>' >${.TARGET}
 
 .include <bsd.prog.mk>

==== //depot/projects/kse/gnu/usr.bin/binutils/gdb/Makefile.alpha#4 (text+ko) ====

@@ -1,16 +1,4 @@
-# $FreeBSD: src/gnu/usr.bin/binutils/gdb/Makefile.alpha,v 1.5 2002/05/18 04:59:56 obrien Exp $
+# $FreeBSD: src/gnu/usr.bin/binutils/gdb/Makefile.alpha,v 1.6 2002/06/29 01:16:00 obrien Exp $
 
-.PATH: ${.CURDIR}/alpha
-
-.if ${TARGET_ARCH} == ${MACHINE_ARCH}
-XSRCS+= freebsd-nat.c
-.else
-XSRCS+= freebsd-nat-stubs.c
-.endif
-XSRCS+= alpha-tdep.c kvm-fbsd.c
-LDADD+= -lkvm
-
-findvar%UAfix.c: findvar.c
-	sed -e \
-	    's,char registers[REGISTER_BYTES + /* SLOP */ 256];,char registers[REGISTER_BYTES + /* SLOP */ 256] __attribute__ ((aligned (8)));,g' \
-	    ${.ALLSRC} >${.TARGET}
+XSRCS+=	alphabsd-nat.c alphafbsd-tdep.c alpha-tdep.c
+CFLAGS+= -DDEFAULT_BFD_VEC=bfd_elf64_alpha_vec

==== //depot/projects/kse/gnu/usr.bin/binutils/gdb/Makefile.i386#4 (text+ko) ====

@@ -1,10 +1,9 @@
-# $FreeBSD: src/gnu/usr.bin/binutils/gdb/Makefile.i386,v 1.4 2002/05/18 04:59:56 obrien Exp $
+# $FreeBSD: src/gnu/usr.bin/binutils/gdb/Makefile.i386,v 1.5 2002/06/29 01:16:00 obrien Exp $
 
-.PATH: ${.CURDIR}/i386
+XSRCS+=	i386fbsd-nat.c i386bsd-tdep.c i386bsd-nat.c i386-nat.c i386-tdep.c \
+	i387-nat.c i387-tdep.c \
+	core-aout.c
 
-XSRCS+=	freebsd-nat.c i386-tdep.c i387-tdep.c kvm-fbsd.c
-
 CFLAGS+= -Dprint_insn_i386=print_insn_i386_att
-
-findvar%UAfix.c: findvar.c
-	ln -sf ${.ALLSRC} ${.TARGET}
+CFLAGS+= -DDEFAULT_BFD_VEC=bfd_elf32_i386_vec
+CFLAGS+= -DGDB_XM_FILE

==== //depot/projects/kse/gnu/usr.bin/binutils/gdb/config.h#4 (text+ko) ====

@@ -1,4 +1,4 @@
-/* $FreeBSD: src/gnu/usr.bin/binutils/gdb/config.h,v 1.6 2002/06/28 01:33:53 obrien Exp $ */
+/* $FreeBSD: src/gnu/usr.bin/binutils/gdb/config.h,v 1.7 2002/06/29 01:16:00 obrien Exp $ */
 
 /* config.h.  Generated automatically by configure.  */
 /* config.in.  Generated automatically from configure.in by autoheader.  */
@@ -170,22 +170,22 @@
 #define USE_INCLUDED_REGEX 1
 
 /* BFD's default architecture. */
-#define DEFAULT_BFD_ARCH bfd_i386_arch
+/* #define DEFAULT_BFD_ARCH bfd_alpha_arch */
 
 /* BFD's default target vector. */
-#define DEFAULT_BFD_VEC bfd_elf32_i386_vec
+/* #define DEFAULT_BFD_VEC bfd_elf64_alpha_vec */
 
 /* Multi-arch enabled. */
 /* #undef GDB_MULTI_ARCH */
 
 /* hostfile */
-#define GDB_XM_FILE config/i386/xm-i386.h
+/* #define GDB_XM_FILE 1 */
 
 /* targetfile */
-#define GDB_TM_FILE config/i386/tm-fbsd.h
+#define GDB_TM_FILE 1
 
 /* nativefile */
-#define GDB_NM_FILE config/i386/nm-fbsd.h
+#define GDB_NM_FILE 1
 
 /* Define if you have the __argz_count function.  */
 /* #undef HAVE___ARGZ_COUNT */
@@ -503,4 +503,3 @@
 
 /* Define if <sys/procfs.h> has pr_siginfo64_t. */
 /* #undef HAVE_PR_SIGINFO64_T */
-

==== //depot/projects/kse/gnu/usr.bin/binutils/gdb/freebsd-uthread.c#4 (text+ko) ====

@@ -1,4 +1,4 @@
-/* $FreeBSD: src/gnu/usr.bin/binutils/gdb/freebsd-uthread.c,v 1.7 2002/02/23 19:28:01 deischen Exp $ */
+/* $FreeBSD: src/gnu/usr.bin/binutils/gdb/freebsd-uthread.c,v 1.8 2002/06/29 01:16:00 obrien Exp $ */
 /* Low level interface for debugging FreeBSD user threads for GDB, the GNU debugger.
    Copyright 1996, 1999 Free Software Foundation, Inc.
 
@@ -51,8 +51,6 @@
 
 extern void _initialize_freebsd_uthread PARAMS ((void));
 
-static int main_pid = -1;	/* Real process ID */
-
 /* Set to true while we are part-way through attaching */
 static int freebsd_uthread_attaching;
 
@@ -60,60 +58,17 @@
 static CORE_ADDR P_thread_list;
 static CORE_ADDR P_thread_run;
 
-static struct cleanup * save_inferior_pid PARAMS ((void));
+/* Pointer to the next function on the objfile event chain.  */
+static void (*target_new_objfile_chain) (struct objfile *objfile);
 
-static void restore_inferior_pid PARAMS ((int pid));
-
-static void freebsd_uthread_resume PARAMS ((int pid, int step,
+static void freebsd_uthread_resume PARAMS ((ptid_t pid, int step,
 					enum target_signal signo));
 
 static void init_freebsd_uthread_ops PARAMS ((void));
 
 static struct target_ops freebsd_uthread_ops;
-static struct target_thread_vector freebsd_uthread_vec;
 
-/*
-
-LOCAL FUNCTION
-
-	save_inferior_pid - Save inferior_pid on the cleanup list
-	restore_inferior_pid - Restore inferior_pid from the cleanup list
-
-SYNOPSIS
-
-	struct cleanup *save_inferior_pid ()
-	void restore_inferior_pid (int pid)
-
-DESCRIPTION
-
-	These two functions act in unison to restore inferior_pid in
-	case of an error.
-
-NOTES
-
-	inferior_pid is a global variable that needs to be changed by many of
-	these routines before calling functions in procfs.c.  In order to
-	guarantee that inferior_pid gets restored (in case of errors), you
-	need to call save_inferior_pid before changing it.  At the end of the
-	function, you should invoke do_cleanups to restore it.
-
- */
-
-static struct cleanup *
-save_inferior_pid ()
-{
-  return make_cleanup ((make_cleanup_func) restore_inferior_pid,
-		       (void *)(intptr_t) inferior_pid);
-}
-
-static void
-restore_inferior_pid (pid)
-     int pid;
-{
-  inferior_pid = pid;
-}
-
-static int find_active_thread PARAMS ((void));
+static ptid_t find_active_ptid PARAMS ((void));
 
 struct cached_pthread {
   u_int64_t		uniqueid;
@@ -125,13 +80,10 @@
   }			ctx;
 };
 
-static int cached_thread;
+static ptid_t cached_ptid;
 static struct cached_pthread cached_pthread;
 static CORE_ADDR cached_pthread_addr;
 
-#define THREADID_TID(id)	((id) >> 17)
-#define THREADID_PID(id)	((id) & ((1 << 17) - 1))
-
 LIST_HEAD(idmaplist, idmap);
 
 struct idmap {
@@ -171,8 +123,7 @@
 #define IS_TID_FREE(tid)	(tid_to_hash[tid] == -1)
 
 static int
-get_new_tid(h)
-     int h;
+get_new_tid(int h)
 {
   int tid = next_free_tid;
 
@@ -199,30 +150,28 @@
   return tid;
 }
 
-static int
-find_pid(uniqueid)
-     u_int64_t uniqueid;
+static ptid_t
+find_ptid(u_int64_t uniqueid)
 {
   int h = UNIQUEID_HASH(uniqueid);
   struct idmap *im;
 
   LIST_FOREACH(im, &map_hash[h], link)
     if (im->uniqueid == uniqueid)
-      return (im->tid << 17) + main_pid;
+      return MERGEPID(PIDGET(inferior_ptid), im->tid);
 
   im = xmalloc(sizeof(struct idmap));
   im->uniqueid = uniqueid;
   im->tid = get_new_tid(h);
   LIST_INSERT_HEAD(&map_hash[h], im, link);
 
-  return (im->tid << 17) + main_pid;
+  return MERGEPID(PIDGET(inferior_ptid), im->tid);
 }
 
 static void
-free_pid(pid)
-	int pid;
+free_ptid(ptid_t ptid)
 {
-  int tid = THREADID_TID(pid);
+  int tid = TIDGET(ptid);
   int h = tid_to_hash[tid];
   struct idmap *im;
 
@@ -248,7 +197,7 @@
 				     sizeof(name##_value))
 
 static void
-read_thread_offsets ()
+read_thread_offsets (void)
 {
   READ_OFFSET(next);
   READ_OFFSET(uniqueid);
@@ -264,8 +213,7 @@
   read_memory ((ptr) + field##_offset, (char *) &(result), sizeof result)
 
 static u_int64_t
-read_pthread_uniqueid (ptr)
-     CORE_ADDR ptr;
+read_pthread_uniqueid (CORE_ADDR ptr)
 {
   u_int64_t uniqueid;
   READ_FIELD(ptr, u_int64_t, uniqueid, uniqueid);
@@ -273,8 +221,7 @@
 }
 
 static CORE_ADDR
-read_pthread_next (ptr)
-     CORE_ADDR ptr;
+read_pthread_next (CORE_ADDR ptr)
 {
   CORE_ADDR next;
   READ_FIELD(ptr, CORE_ADDR, next, next);
@@ -282,9 +229,7 @@
 }
 
 static void
-read_cached_pthread (ptr, cache)
-     CORE_ADDR ptr;
-     struct cached_pthread *cache;
+read_cached_pthread (CORE_ADDR ptr, struct cached_pthread *cache)
 {
   READ_FIELD(ptr, u_int64_t,	uniqueid,	cache->uniqueid);
   READ_FIELD(ptr, int,		state,		cache->state);
@@ -292,31 +237,27 @@
   READ_FIELD(ptr, ucontext_t,	ctx,		cache->ctx);
 }
 
-static int
-find_active_thread ()
+static ptid_t
+find_active_ptid (void)
 {
   CORE_ADDR ptr;
 
-  if (main_pid == -1)
-    return -1;
-
   read_memory ((CORE_ADDR)P_thread_run,
 	       (char *)&ptr,
 	       sizeof ptr);
 
-  return find_pid(read_pthread_uniqueid(ptr));
+  return find_ptid(read_pthread_uniqueid(ptr));
 }
 
-static CORE_ADDR find_pthread_addr PARAMS ((int thread));
-static struct cached_pthread * find_pthread PARAMS ((int thread));
+static CORE_ADDR find_pthread_addr PARAMS ((ptid_t ptid));
+static struct cached_pthread * find_pthread PARAMS ((ptid_t ptid));
 
 static CORE_ADDR
-find_pthread_addr (thread)
-     int thread;
+find_pthread_addr (ptid_t ptid)
 {
   CORE_ADDR ptr;
 
-  if (thread == cached_thread)
+  if (ptid_equal(ptid, cached_ptid))
     return cached_pthread_addr;
 
   read_memory ((CORE_ADDR)P_thread_list,
@@ -325,9 +266,9 @@
 
   while (ptr != 0)
     {
-      if (find_pid(read_pthread_uniqueid(ptr)) == thread)
+      if (ptid_equal(find_ptid(read_pthread_uniqueid(ptr)), ptid))
 	{
-	  cached_thread = thread;
+	  cached_ptid = ptid;
 	  cached_pthread_addr = ptr;
 	  read_cached_pthread(ptr, &cached_pthread);
 	  return ptr;
@@ -339,12 +280,11 @@
 }
 
 static struct cached_pthread *
-find_pthread (thread)
-     int thread;
+find_pthread (ptid_t ptid)
 {
   CORE_ADDR ptr;
 
-  if (thread == cached_thread)
+  if (ptid_equal(ptid, cached_ptid))
     return &cached_pthread;
 
   read_memory ((CORE_ADDR)P_thread_list,
@@ -353,9 +293,9 @@
 
   while (ptr != 0)
     {
-      if (find_pid(read_pthread_uniqueid(ptr)) == thread)
+      if (ptid_equal(find_ptid(read_pthread_uniqueid(ptr)), ptid))
 	{
-	  cached_thread = thread;
+	  cached_ptid = ptid;
 	  cached_pthread_addr = ptr;
 	  read_cached_pthread(ptr, &cached_pthread);
 	  return &cached_pthread;
@@ -364,8 +304,7 @@
     }
 
 #if 0
-  error ("Can't find pthread %d,%d",
-	 THREADID_TID(thread), THREADID_PID(thread));
+  error ("Can't find pthread %d,%d", PIDGET(ptid), TIDGET(ptid));
 #endif
   return NULL;
 }
@@ -376,9 +315,7 @@
 
 /* ARGSUSED */
 static void
-freebsd_uthread_open (arg, from_tty)
-     char *arg;
-     int from_tty;
+freebsd_uthread_open (char *arg, int from_tty)
 {
   child_ops.to_open (arg, from_tty);
 }
@@ -387,9 +324,7 @@
    and wait for the trace-trap that results from attaching.  */
 
 static void
-freebsd_uthread_attach (args, from_tty)
-     char *args;
-     int from_tty;
+freebsd_uthread_attach (char *args, int from_tty)
 {
   child_ops.to_attach (args, from_tty);
   push_target (&freebsd_uthread_ops);
@@ -399,20 +334,13 @@
 /* After an attach, see if the target is threaded */
 
 static void
-freebsd_uthread_post_attach (pid)
-     int pid;
+freebsd_uthread_post_attach (int pid)
 {
   if (freebsd_uthread_active)
     {
       read_thread_offsets ();
-
-      main_pid = pid;
-
-      bind_target_thread_vector (&freebsd_uthread_vec);
-
-      inferior_pid = find_active_thread ();
-
-      add_thread (inferior_pid);
+      inferior_ptid = find_active_ptid ();
+      add_thread (inferior_ptid);
     }
   else
     {
@@ -432,9 +360,7 @@
    started via the normal ptrace (PTRACE_TRACEME).  */
 
 static void
-freebsd_uthread_detach (args, from_tty)
-     char *args;
-     int from_tty;
+freebsd_uthread_detach (char *args, int from_tty)
 {
   child_ops.to_detach (args, from_tty);
 }
@@ -445,70 +371,46 @@
    for procfs.  */
 
 static void
-freebsd_uthread_resume (pid, step, signo)
-     int pid;
-     int step;
-     enum target_signal signo;
+freebsd_uthread_resume (ptid_t ptid, int step, enum target_signal signo)
 {
-  struct cleanup *old_chain;
-
   if (freebsd_uthread_attaching)
     {
-      child_ops.to_resume (pid, step, signo);
+      child_ops.to_resume (ptid, step, signo);
       return;
     }
 
-  old_chain = save_inferior_pid ();
-
-  pid = inferior_pid = main_pid;
-
-  child_ops.to_resume (pid, step, signo);
-
-  cached_thread = 0;
-
-  do_cleanups (old_chain);
+  child_ops.to_resume (ptid, step, signo);
+  cached_ptid = MERGEPID(0, 0);
 }
 
 /* Wait for any threads to stop.  We may have to convert PID from a thread id
    to a LWP id, and vice versa on the way out.  */
 
-static int
-freebsd_uthread_wait (pid, ourstatus)
-     int pid;
-     struct target_waitstatus *ourstatus;
+static ptid_t
+freebsd_uthread_wait (ptid_t ptid, struct target_waitstatus *ourstatus)
 {
-  int rtnval;
-  struct cleanup *old_chain;
+  ptid_t rtnval;
 
   if (freebsd_uthread_attaching)
     {
-      return child_ops.to_wait (pid, ourstatus);
+      return child_ops.to_wait (ptid, ourstatus);
     }
 
-  old_chain = save_inferior_pid ();
+  rtnval = child_ops.to_wait (ptid, ourstatus);
 
-  inferior_pid = main_pid;
-
-  if (pid != -1)
-    pid = main_pid;
-
-  rtnval = child_ops.to_wait (pid, ourstatus);
-
-  if (rtnval >= 0)
+  if (PIDGET(rtnval) >= 0)
     {
-      rtnval = find_active_thread ();
+      rtnval = find_active_ptid ();
       if (!in_thread_list (rtnval))
 	add_thread (rtnval);
     }
 
-  do_cleanups (old_chain);
-
   return rtnval;
 }
 
 #ifdef __i386__
 
-static char sigmap[NUM_REGS] =	/* map reg to sigcontext  */
+static char sigmap[MAX_NUM_REGS] = /* map reg to sigcontext  */
 {
   12,				/* eax */
   11,				/* ecx */
@@ -526,9 +428,13 @@
   3,				/* es */
   2,				/* fs */
   1,				/* gs */
+  -1, -1, -1, -1, -1, -1, -1,	/* st0-st7 */
+  -1, -1, -1, -1, -1, -1, -1,	/* fctrl-fop */
+  -1, -1, -1, -1, -1, -1, -1,	/* xmm0-xmm7 */
+  -1,				/* mxcsr */
 };
 
-static char jmpmap[NUM_REGS] = /* map reg to jmp_buf */
+static char jmpmap[MAX_NUM_REGS] = /* map reg to jmp_buf */
 {
   6,				/* eax */
   -1,				/* ecx */
@@ -546,6 +452,10 @@
   -1,				/* es */
   -1,				/* fs */
   -1,				/* gs */
+  -1, -1, -1, -1, -1, -1, -1,	/* st0-st7 */
+  -1, -1, -1, -1, -1, -1, -1,	/* fctrl-fop */
+  -1, -1, -1, -1, -1, -1, -1,	/* xmm0-xmm7 */
+  -1,				/* mxcsr */
 };
 
 #endif
@@ -579,36 +489,26 @@
 #endif
 
 static void
-freebsd_uthread_fetch_registers (regno)
-     int regno;
+freebsd_uthread_fetch_registers (int regno)
 {
   struct cached_pthread *thread;
-  struct cleanup *old_chain;
   int active;
   int first_regno, last_regno;
   register_t *regbase;
   char *regmap;
 
-  if (freebsd_uthread_attaching)
+  if (freebsd_uthread_attaching || TIDGET(inferior_ptid) == 0)
     {
       child_ops.to_fetch_registers (regno);
       return;
     }
 
-  thread = find_pthread (inferior_pid);
-
-  old_chain = save_inferior_pid ();
-
-  active = (inferior_pid == find_active_thread());
+  thread = find_pthread (inferior_ptid);
+  active = (ptid_equal(inferior_ptid, find_active_ptid()));
 
-  inferior_pid = main_pid;
-
   if (active)
     {
       child_ops.to_fetch_registers (regno);
-
-      do_cleanups (old_chain);
-
       return;
     }
 
@@ -631,19 +531,18 @@
       if (regmap[regno] == -1)
 	child_ops.to_fetch_registers (regno);
       else
-	supply_register (regno, (char*) &regbase[regmap[regno]]);
+	if (thread)
+	  supply_register (regno, (char*) &regbase[regmap[regno]]);
+	else
+	  supply_register (regno, NULL);
     }
-
-  do_cleanups (old_chain);
 }
 
 static void
-freebsd_uthread_store_registers (regno)
-     int regno;
+freebsd_uthread_store_registers (int regno)
 {
   struct cached_pthread *thread;
   CORE_ADDR ptr;
-  struct cleanup *old_chain;
   int first_regno, last_regno;
   u_int32_t *regbase;
   char *regmap;
@@ -654,18 +553,11 @@
       return;
     }
 
-  thread = find_pthread (inferior_pid);
-
-  old_chain = save_inferior_pid ();
+  thread = find_pthread (inferior_ptid);
 
-  inferior_pid = main_pid;
-
   if (thread->state == PS_RUNNING_value)
     {
       child_ops.to_store_registers (regno);
-
-      do_cleanups (old_chain);
-
       return;
     }
 
@@ -683,7 +575,7 @@
   regbase = (u_int32_t*) &thread->ctx.jb[0];
   regmap = jmpmap;
 
-  ptr = find_pthread_addr (inferior_pid);
+  ptr = find_pthread_addr (inferior_ptid);
   for (regno = first_regno; regno <= last_regno; regno++)
     {
       if (regmap[regno] == -1)
@@ -704,8 +596,6 @@
 			REGISTER_RAW_SIZE (regno));
 	}
     }
-
-  do_cleanups (old_chain);
 }
 
 /* Get ready to modify the registers array.  On machines which store
@@ -715,102 +605,53 @@
    debugged.  */
 
 static void
-freebsd_uthread_prepare_to_store ()
+freebsd_uthread_prepare_to_store (void)
 {
-  struct cleanup *old_chain;
-
-  if (freebsd_uthread_attaching)
-    {
-      child_ops.to_prepare_to_store ();
-      return;
-    }
-
-  old_chain = save_inferior_pid ();
-  inferior_pid = main_pid;
-
   child_ops.to_prepare_to_store ();
-
-  do_cleanups (old_chain);
 }
 
 static int
-freebsd_uthread_xfer_memory (memaddr, myaddr, len, dowrite, target)
-     CORE_ADDR memaddr;
-     char *myaddr;
-     int len;
-     int dowrite;
-     struct target_ops *target; /* ignored */
+freebsd_uthread_xfer_memory (CORE_ADDR memaddr, char *myaddr, int len,
+			     int dowrite, struct mem_attrib *attrib,
+			     struct target_ops *target)
 {
-  int retval;
-  struct cleanup *old_chain;
-
-  if (freebsd_uthread_attaching)
-    {
-      return child_ops.to_xfer_memory (memaddr, myaddr, len, dowrite, target);
-    }
-
-  old_chain = save_inferior_pid ();
-
-  inferior_pid = main_pid;
-
-  retval = child_ops.to_xfer_memory (memaddr, myaddr, len, dowrite, target);
-
-  do_cleanups (old_chain);
-
-  return retval;
+  return child_ops.to_xfer_memory (memaddr, myaddr, len, dowrite,
+				   attrib, target);
 }
 
 /* Print status information about what we're accessing.  */
 
 static void
-freebsd_uthread_files_info (ignore)
-     struct target_ops *ignore;
+freebsd_uthread_files_info (struct target_ops *ignore)
 {
   child_ops.to_files_info (ignore);
 }
 
 static void
-freebsd_uthread_kill_inferior ()
+freebsd_uthread_kill_inferior (void)
 {
-  inferior_pid = main_pid;
   child_ops.to_kill ();
 }
 
 static void
-freebsd_uthread_notice_signals (pid)
-     int pid;
+freebsd_uthread_notice_signals (ptid_t ptid)
 {
-  struct cleanup *old_chain;
-  old_chain = save_inferior_pid ();
-  inferior_pid = main_pid;
-
-  child_ops.to_notice_signals (pid);
-
-  do_cleanups (old_chain);
+  child_ops.to_notice_signals (ptid);
 }
 
 /* Fork an inferior process, and start debugging it with /proc.  */
 
 static void
-freebsd_uthread_create_inferior (exec_file, allargs, env)
-     char *exec_file;
-     char *allargs;
-     char **env;
+freebsd_uthread_create_inferior (char *exec_file, char *allargs, char **env)
 {
   child_ops.to_create_inferior (exec_file, allargs, env);
 
-  if (inferior_pid && freebsd_uthread_active)
+  if (PIDGET(inferior_ptid) && freebsd_uthread_active)
     {
       read_thread_offsets ();
-
-      main_pid = inferior_pid;
-
       push_target (&freebsd_uthread_ops);
-      bind_target_thread_vector (&freebsd_uthread_vec);
-
-      inferior_pid = find_active_thread ();
-
-      add_thread (inferior_pid);
+      inferior_ptid = find_active_ptid ();
+      add_thread (inferior_ptid);
     }
 }
 
@@ -818,8 +659,7 @@
    We check for the _thread_run and _thread_list globals. */
 
 void
-freebsd_uthread_new_objfile (objfile)
-     struct objfile *objfile;
+freebsd_uthread_new_objfile (struct objfile *objfile)
 {
   struct minimal_symbol *ms;
 
@@ -873,24 +713,11 @@
   freebsd_uthread_active = 1;
 }
 
-int
-freebsd_uthread_has_exited (pid, wait_status, exit_status)
-  int  pid;
-  int  wait_status;
-  int *  exit_status;
-{
-  int t = child_ops.to_has_exited (pid, wait_status, exit_status);
-  if (t)
-    main_pid = -1;
-  return t;
-}
-
 /* Clean up after the inferior dies.  */
 
 static void
 freebsd_uthread_mourn_inferior ()
 {
-  inferior_pid = main_pid;	/* don't bother to restore inferior_pid */
   child_ops.to_mourn_inferior ();
   unpush_target (&freebsd_uthread_ops);
 }
@@ -904,10 +731,8 @@
 }
 
 static int
-freebsd_uthread_thread_alive (pid)
-     int pid;
+freebsd_uthread_thread_alive (ptid_t ptid)
 {
-  struct cleanup *old_chain;
   struct cached_pthread *thread;

>>> TRUNCATED FOR MAIL (1000 lines) <<<

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe p4-projects" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200206290251.g5T2pt7u017279>