From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 7734 invoked by alias); 12 Nov 2001 05:40:06 -0000 Mailing-List: contact gdb-help@sourceware.cygnus.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-owner@sources.redhat.com Received: (qmail 7600 invoked from network); 12 Nov 2001 05:39:56 -0000 Received: from unknown (HELO nevyn.them.org) (128.2.145.6) by sourceware.cygnus.com with SMTP; 12 Nov 2001 05:39:56 -0000 Received: from drow by nevyn.them.org with local (Exim 3.32 #1 (Debian)) id 1639pB-0003FH-00 for ; Mon, 12 Nov 2001 00:40:01 -0500 Date: Thu, 01 Nov 2001 10:18:00 -0000 From: Daniel Jacobowitz To: gdb@sources.redhat.com Subject: Re: G packet format ... Message-ID: <20011112004001.A11764@nevyn.them.org> Mail-Followup-To: gdb@sources.redhat.com References: <3BEF5CF4.4010201@cygnus.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <3BEF5CF4.4010201@cygnus.com> User-Agent: Mutt/1.3.23i X-SW-Source: 2001-11/txt/msg00015.txt.bz2 On Mon, Nov 12, 2001 at 12:24:04AM -0500, Andrew Cagney wrote: > Hello, > > For those that don't know, GDB's remote protocol G packet currently > determins the layout of GDB's internal register cache. Doh! Indeed. > NB: Why do this? > > The objective is to decouple the remote protocol's G packet from the > rest of GDB. That way, GDB has greater flexability in how it implements > its regcache. For instance, with the MIPS, it will be possible to have > a single internal register layout while still being able to connect to > all the remote MIPS targets. I guess I posted my gdbserver register cache patch before I converted it to generate them from a shell script. Here's what I've been using. I didn't consider the issue of only-transferable-in-P-packet registers (and I still don't see a good reason... well, maybe I can come up with one, actually. Things that react when read.). Here's an example and a shell script; ideally these would be built into an archive and then linked to both gdb and gdbserver. Possibly autogenerate a manual chapter from them? Should not be hard. -- Daniel Jacobowitz Carnegie Mellon University MontaVista Software Debian GNU/Linux Developer /* *INDENT-OFF* */ /* THIS FILE IS GENERATED */ /* A register protocol for GDB, the GNU debugger. Copyright 2001 Free Software Foundation, Inc. This file is part of GDB. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* This file was created with the aid of ``regdat.sh'' and ``dat/reg-i386.dat''. */ struct reg regs_i386[] = { { "eax", 0, 4 }, { "ecx", 4, 4 }, { "edx", 8, 4 }, { "ebx", 12, 4 }, { "esp", 16, 4 }, { "ebp", 20, 4 }, { "esi", 24, 4 }, { "edi", 28, 4 }, { "eip", 32, 4 }, { "eflags", 36, 4 }, { "cs", 40, 4 }, { "ss", 44, 4 }, { "ds", 48, 4 }, { "es", 52, 4 }, { "fs", 56, 4 }, { "gs", 60, 4 }, { "st0", 64, 10 }, { "st1", 74, 10 }, { "st2", 84, 10 }, { "st3", 94, 10 }, { "st4", 104, 10 }, { "st5", 114, 10 }, { "st6", 124, 10 }, { "st7", 134, 10 }, { "fctrl", 144, 4 }, { "fstat", 148, 4 }, { "ftag", 152, 4 }, { "fiseg", 156, 4 }, { "fioff", 160, 4 }, { "foseg", 164, 4 }, { "fooff", 168, 4 }, { "fop", 172, 4 }, { "xmm0", 176, 16 }, { "xmm1", 192, 16 }, { "xmm2", 208, 16 }, { "xmm3", 224, 16 }, { "xmm4", 240, 16 }, { "xmm5", 256, 16 }, { "xmm6", 272, 16 }, { "xmm7", 288, 16 }, { "mxcsr", 304, 4 }, }; const char *resume_regs_i386 = { "ebp", "esp", "eip", 0 }; #!/bin/sh -u # Register protocol definitions for GDB, the GNU debugger. # Copyright 2001 Free Software Foundation, Inc. # # This file is part of GDB. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. move_if_change () { file=$1 if test -r ${file} && cmp -s "${file}" new-"${file}" then echo "${file} unchanged." 1>&2 else mv new-"${file}" "${file}" echo "${file} updated." 1>&2 fi } # Format of the input files read="type entry" do_read () { type="" entry="" while read line do if test "${line}" = "" then continue elif test "${line}" = "#" -a "${comment}" = "" then continue elif expr "${line}" : "#" > /dev/null then comment="${comment} ${line}" else # The semantics of IFS varies between different SH's. Some # treat ``::' as three fields while some treat it as just too. # Work around this by eliminating ``::'' .... line="`echo "${line}" | sed -e 's/::/: :/g' -e 's/::/: :/g'`" OFS="${IFS}" ; IFS="[:]" eval read ${read} <&2 exit 1 fi copyright () { cat < new-$2 copyright offset=0 i=0 name=x resume=x exec < $1 while do_read do if test "${type}" = "name"; then name="${entry}" echo "struct reg regs_${name}[] = {" continue elif test "${type}" = "resume"; then resume="${entry}" continue elif test "${name}" = x; then echo "$0: $1 does not specify \`\`name''." 1>&2 exit 1 else echo " { \"${entry}\", ${offset}, ${type} }," offset=`expr ${offset} + ${type}` i=`expr $i + 1` fi done echo "};" echo echo "const char *resume_regs_${name} = { \"`echo ${resume} | sed 's/,/", "/g'`\", 0 };" # close things off exec 1>&2 move_if_change $2