Date: Sun, 28 Mar 2004 00:50:41 -0800 (PST) From: Marcel Moolenaar <marcel@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 49831 for review Message-ID: <200403280850.i2S8ofs9028772@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
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 <machine/reg.h> #include <gdb/gdb.h> +#include <gdb/gdb_int.h> 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_ */
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200403280850.i2S8ofs9028772>