From owner-p4-projects Fri Jun 28 19:53:23 2002 Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 8363937B401; Fri, 28 Jun 2002 19:51:58 -0700 (PDT) Delivered-To: perforce@freebsd.org Received: from mx1.FreeBSD.org (mx1.FreeBSD.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 26F0E37B400 for ; Fri, 28 Jun 2002 19:51:58 -0700 (PDT) Received: from freefall.freebsd.org (freefall.FreeBSD.org [216.136.204.21]) by mx1.FreeBSD.org (Postfix) with ESMTP id B858F43E0A for ; Fri, 28 Jun 2002 19:51:56 -0700 (PDT) (envelope-from julian@freebsd.org) Received: from freefall.freebsd.org (perforce@localhost [127.0.0.1]) by freefall.freebsd.org (8.12.4/8.12.4) with ESMTP id g5T2puJU017282 for ; Fri, 28 Jun 2002 19:51:56 -0700 (PDT) (envelope-from julian@freebsd.org) Received: (from perforce@localhost) by freefall.freebsd.org (8.12.4/8.12.4/Submit) id g5T2pt7u017279 for perforce@freebsd.org; Fri, 28 Jun 2002 19:51:55 -0700 (PDT) Date: Fri, 28 Jun 2002 19:51:55 -0700 (PDT) Message-Id: <200206290251.g5T2pt7u017279@freefall.freebsd.org> X-Authentication-Warning: freefall.freebsd.org: perforce set sender to julian@freebsd.org using -f From: Julian Elischer Subject: PERFORCE change 13562 for review To: Perforce Change Reviews Sender: owner-p4-projects@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG 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 ' >${.TARGET} .include ==== //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 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*) ®base[regmap[regno]]); + if (thread) + supply_register (regno, (char*) ®base[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