From owner-p4-projects@FreeBSD.ORG Sun Mar 28 00:50:43 2004 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 11BE816A4D0; Sun, 28 Mar 2004 00:50:43 -0800 (PST) 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 DBB3416A4CE for ; Sun, 28 Mar 2004 00:50:42 -0800 (PST) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id BD24443D2D for ; Sun, 28 Mar 2004 00:50:42 -0800 (PST) (envelope-from marcel@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.12.10/8.12.10) with ESMTP id i2S8ogGe028775 for ; Sun, 28 Mar 2004 00:50:42 -0800 (PST) (envelope-from marcel@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.12.10/8.12.10/Submit) id i2S8ofs9028772 for perforce@freebsd.org; Sun, 28 Mar 2004 00:50:41 -0800 (PST) (envelope-from marcel@freebsd.org) Date: Sun, 28 Mar 2004 00:50:41 -0800 (PST) Message-Id: <200403280850.i2S8ofs9028772@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to marcel@freebsd.org using -f From: Marcel Moolenaar To: Perforce Change Reviews Subject: PERFORCE change 49831 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 28 Mar 2004 08:50:43 -0000 http://perforce.freebsd.org/chv.cgi?CH=49831 Change 49831 by marcel@marcel_nfs on 2004/03/28 00:50:36 Add support for machine dependent queries. Use this on ia64 to handle the Part:dirty:read:: query added to the remote protocol to support the TARGET_OBJECT_DIRTY partial xfer. In short: can can read the dirty stacked registers. Affected files ... .. //depot/projects/gdb/sys/gdb/gdb_main.c#11 edit .. //depot/projects/gdb/sys/i386/include/gdb_machdep.h#5 edit .. //depot/projects/gdb/sys/ia64/ia64/gdb_machdep.c#6 edit .. //depot/projects/gdb/sys/ia64/include/gdb_machdep.h#5 edit Differences ... ==== //depot/projects/gdb/sys/gdb/gdb_main.c#11 (text+ko) ==== @@ -183,7 +183,7 @@ gdb_tx_begin('l'); gdb_tx_end(); } - } else + } else if (!gdb_cpu_query()) gdb_tx_empty(); break; case 's': { /* single step */ ==== //depot/projects/gdb/sys/i386/include/gdb_machdep.h#5 (text+ko) ==== @@ -39,6 +39,12 @@ return (sizeof(int)); } +static __inline int +gdb_cpu_query(void) +{ + return (0); +} + void *gdb_cpu_getreg(int, size_t *); void gdb_cpu_setreg(int, register_t); int gdb_cpu_signal(int, int); ==== //depot/projects/gdb/sys/ia64/ia64/gdb_machdep.c#6 (text+ko) ==== @@ -39,6 +39,7 @@ #include #include +#include void * gdb_cpu_getreg(int regnum, size_t *regsz) @@ -122,3 +123,26 @@ case GDB_REG_PC: break; } } + +int +gdb_cpu_query(void) +{ + if (gdb_rx_equal("Part:dirty:read::")) { + uint64_t *kstack; + uintmax_t slot; + if (gdb_rx_varhex(&slot) < 0) { + gdb_tx_err(EINVAL); + return (-1); + } + if (slot >= 0 && slot < (kdb_frame->tf_special.ndirty >> 3)) { + kstack = (uint64_t*)(kdb_thread->td_kstack + + (kdb_frame->tf_special.bspstore & 0x1ffUL)); + gdb_tx_begin('\0'); + gdb_tx_mem((void*)(kstack + slot), 8); + gdb_tx_end(); + } + return (1); + } + + return (0); +} ==== //depot/projects/gdb/sys/ia64/include/gdb_machdep.h#5 (text+ko) ==== @@ -48,5 +48,6 @@ void *gdb_cpu_getreg(int, size_t *); void gdb_cpu_setreg(int, register_t); +int gdb_cpu_query(void); #endif /* !_MACHINE_GDB_MACHDEP_H_ */