Mirror of the gdb mailing list
 help / color / mirror / Atom feed
* G packet format ...
@ 2001-11-01  9:37 Andrew Cagney
  2001-11-01 10:18 ` Daniel Jacobowitz
                   ` (3 more replies)
  0 siblings, 4 replies; 10+ messages in thread
From: Andrew Cagney @ 2001-11-01  9:37 UTC (permalink / raw)
  To: gdb

[-- Attachment #1: Type: text/plain, Size: 2731 bytes --]

Hello,

For those that don't know, GDB's remote protocol G packet currently 
determins the layout of GDB's internal register cache.  Doh!

As part of breaking^D^D^Dfixing this, I'd like to introduce a new CLI 
command that allows the user to specify the G packet (and in fact the 
entire remote protocol numbering) at runtime.

The commands are:

	set remote registers <spec>
and 
show remote registers

(better names welcome).  The interesting thing is the spec:

	<spec> ::= <entry> { <sep> <entry> }* ;;
	<entry> ::= <size> [ ":" <name> [ ":" <pnum> ] ] ;;
	<sep> ::= ";" | "\n" ;;
Where:
	<name>	is the name of a raw register
	<size>	is the byte size of a register
	<pnum>	is the [Pp] register number

Eg:
	8:r0
	8:r1
	4:r2
	4
	8:r3

	4:spr0:1000
	4:spr1

or: 
8:r0;8:r1;4:r2;4;8:r3;;4:spr0:1000;4:spr1

GDBserver might use the first form (\n) while GDB's CLI would use the 
second form.

For want of a better way to define the semantics, try the attached shell 
script.  What follows is an attempt at an english description:

The spec is divided into two parts separated by a blank entry. 
Additional blank entries, after the first, are ignored.

The first part describes registers that are transfered via either the 
[Gg] packets or the [Pp] packets. Each entry specifies a number of bytes 
in the [Gg] packet and then, optionally, the GDB internal name 
corresponding to those bytes.  Unnamed entries are written as zero.

The second part describes registers that are only transferable via the 
[Pp] packets.  Size entries in this part of the spec are ignored.

The [Pp] packet register number of the first register is zero (unless 
explicitly specified).  The [Pp] packet register number of succeeding 
registers, if not explicitly specified, is determined by adding one to 
the previous register's number.  (Yes ``1:r1:1000;;4:r0;0'', while 
stupid, is still legal.)

If GDB's internal register is smaller than the packet specification then 
high bits are discarded to fit.

If GDB's internal register is larger than the packet specification then 
we've got a problem.  A guess is zero extend unless a -ve size is 
specified which would imply sign extend.  Worry about this when it 
actually happens.

--

NB:  If you didn't catch on.  GDB currently doesn't implement the ``read 
single register'' packet yet this spec assumes this.

--

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.

--

comments, better suggestions, code?
Andrew

[-- Attachment #2: reg.sh --]
[-- Type: text/plain, Size: 430 bytes --]

#!/bin/sh

pnum=0
offset=0

IFS=:

printf "name\tsize\tpnum\toffset\n"

while read size name num
do
    if test x"${size}" = x; then
	echo "--- END -- OF -- G -- PACKET --"
	offset=
	continue
    fi
    if test x"${num}" = x; then
	num=${pnum}
    fi
    if test x"${name}" != x; then
	printf "${name}\t${size}\t${num}\t${offset}\n"
    fi
    pnum=`expr ${num} + 1`
    test "${offset}" && offset=`expr ${offset} + ${size}`
done

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: G packet format ...
  2001-11-01  9:37 G packet format Andrew Cagney
@ 2001-11-01 10:18 ` Daniel Jacobowitz
  2001-11-01 10:30   ` Andrew Cagney
  2001-11-01 12:30 ` Fernando Nasser
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 10+ messages in thread
From: Daniel Jacobowitz @ 2001-11-01 10:18 UTC (permalink / raw)
  To: gdb

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 };

<snip here>


#!/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} <<EOF
${line}
EOF
	    IFS="${OFS}"

	    # .... and then going back through each field and strip out those
	    # that ended up with just that space character.
	    for r in ${read}
	    do
		if eval test \"\${${r}}\" = \"\ \"
		then
		    eval ${r}=""
		fi
	    done

	    break
	fi
    done
    if [ -n "${type}" ]
    then
	true
    else
	false
    fi
}

if test ! -r $1; then
  echo "$0: Could not open $1." 1>&2
  exit 1
fi

copyright ()
{
cat <<EOF
/* *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 \`\`$1''.  */

EOF
}


exec > 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


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: G packet format ...
  2001-11-01 10:18 ` Daniel Jacobowitz
@ 2001-11-01 10:30   ` Andrew Cagney
  2001-11-01 10:58     ` Daniel Jacobowitz
  0 siblings, 1 reply; 10+ messages in thread
From: Andrew Cagney @ 2001-11-01 10:30 UTC (permalink / raw)
  To: Daniel Jacobowitz; +Cc: gdb

>> 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.).

[x86 example deleted]

Doesn't the x86 have the potential for 4 billion MSRs? :-)

	Andrew



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: G packet format ...
  2001-11-01 10:30   ` Andrew Cagney
@ 2001-11-01 10:58     ` Daniel Jacobowitz
  2001-11-05  8:04       ` Andrew Cagney
  0 siblings, 1 reply; 10+ messages in thread
From: Daniel Jacobowitz @ 2001-11-01 10:58 UTC (permalink / raw)
  To: Andrew Cagney; +Cc: gdb

On Mon, Nov 12, 2001 at 12:57:31AM -0500, Andrew Cagney wrote:
> >>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.).
> 
> [x86 example deleted]
> 
> Doesn't the x86 have the potential for 4 billion MSRs? :-)

I wouldn't know :)  It's my least-familiar platform; I only picked it
because the register data was short :P

I'm a little skeptical of using the P packet for registers
not-present-in-all-cases, either.  Perhaps in the morning I'll be able
to figure out why.

-- 
Daniel Jacobowitz                           Carnegie Mellon University
MontaVista Software                         Debian GNU/Linux Developer


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: G packet format ...
  2001-11-01  9:37 G packet format Andrew Cagney
  2001-11-01 10:18 ` Daniel Jacobowitz
@ 2001-11-01 12:30 ` Fernando Nasser
  2001-11-01 12:51   ` Andrew Cagney
  2001-11-01 16:51 ` Frank Ch. Eigler
  2001-11-05  8:19 ` Andrew Cagney
  3 siblings, 1 reply; 10+ messages in thread
From: Fernando Nasser @ 2001-11-01 12:30 UTC (permalink / raw)
  To: Andrew Cagney; +Cc: gdb

Andrew 

What about having built-in sets of such configurations and 
letting the user select from the one available for the
currently selected architecture.

Like:

show remote registers

(prints the currently selected spec and the available ones)

set remote registers <spec>

where <spec> is from the list of available ones.

For instance, for i386, one could have:

i386-std
i386-extended
i386-cygmon
i386-codetap


This way we can minimize the risk of a mismatch with the target.


-- 
Fernando Nasser
Red Hat - Toronto                       E-Mail:  fnasser@redhat.com
2323 Yonge Street, Suite #300
Toronto, Ontario   M4P 2C9


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: G packet format ...
  2001-11-01 12:30 ` Fernando Nasser
@ 2001-11-01 12:51   ` Andrew Cagney
  0 siblings, 0 replies; 10+ messages in thread
From: Andrew Cagney @ 2001-11-01 12:51 UTC (permalink / raw)
  To: Fernando Nasser; +Cc: gdb

> Andrew 
> 
> What about having built-in sets of such configurations and 
> letting the user select from the one available for the
> currently selected architecture.

Yes true.  Get something basic working first though :-)

Andrew



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: G packet format ...
  2001-11-01  9:37 G packet format Andrew Cagney
  2001-11-01 10:18 ` Daniel Jacobowitz
  2001-11-01 12:30 ` Fernando Nasser
@ 2001-11-01 16:51 ` Frank Ch. Eigler
  2001-11-02  0:37   ` Andrew Cagney
  2001-11-05  8:19 ` Andrew Cagney
  3 siblings, 1 reply; 10+ messages in thread
From: Frank Ch. Eigler @ 2001-11-01 16:51 UTC (permalink / raw)
  To: Andrew Cagney; +Cc: gdb


cagney wrote:

: [...]  As part of breaking^D^D^Dfixing this, I'd like to introduce a
: new CLI command that allows the user to specify the G packet (and in
: fact the entire remote protocol numbering) at runtime. [...]

I assume the intent is eventually (soon?) to query the remote target
for its own remote-register-spec string.  After all, it knows best.
If so, is it a possible problem that the specification string of a
large-register-bank machine may itself be so long as to exceed various
packet-size limits?

- FChE


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: G packet format ...
  2001-11-01 16:51 ` Frank Ch. Eigler
@ 2001-11-02  0:37   ` Andrew Cagney
  0 siblings, 0 replies; 10+ messages in thread
From: Andrew Cagney @ 2001-11-02  0:37 UTC (permalink / raw)
  To: Frank Ch. Eigler; +Cc: Andrew Cagney, gdb

> cagney wrote:
> 
> : [...]  As part of breaking^D^D^Dfixing this, I'd like to introduce a
> : new CLI command that allows the user to specify the G packet (and in
> : fact the entire remote protocol numbering) at runtime. [...]
> 
> I assume the intent is eventually (soon?) to query the remote target
> for its own remote-register-spec string.  After all, it knows best.
> If so, is it a possible problem that the specification string of a
> large-register-bank machine may itself be so long as to exceed various
> packet-size limits?

That might happen (like querying a target for its architecture). 
However it is beyond the scope of this immediate change.

Andrew



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: G packet format ...
  2001-11-01 10:58     ` Daniel Jacobowitz
@ 2001-11-05  8:04       ` Andrew Cagney
  0 siblings, 0 replies; 10+ messages in thread
From: Andrew Cagney @ 2001-11-05  8:04 UTC (permalink / raw)
  To: Daniel Jacobowitz; +Cc: gdb


>> >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.).

[...]

> I'm a little skeptical of using the P packet for registers
> not-present-in-all-cases, either.  Perhaps in the morning I'll be able
> to figure out why.

Not sure it is relevant, however, the following feature of the remote 
protocol is interesting.

The G packet contains all registers.  There for, if the G packet is 
short, GDB assumes that any missing registers are zero.

Consider the sequence:

Target stops.  Supplies value for register 1000 in T packet.

User does something to cause register ``0'' to be fetched and this is 
done via a G packet.

Two things can happen:

	o	target supplies GDB with all registers (0..1000)
		which makes for a very large G packet.

	o	target supplies GDB with a subset of registers
		(a short packet) and GDB interprets that to mean
		that register 1000 should be set to zero.

Ulgh.


By allowing registers beyond the end of a G packet. These problems are 
avoided.

A variation on my change might be to allow the target to bundle up more 
than the official NR of registers in a G packet.  However, not having 
them does not mean that they are zero.

enjoy,
Andrew



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: G packet format ...
  2001-11-01  9:37 G packet format Andrew Cagney
                   ` (2 preceding siblings ...)
  2001-11-01 16:51 ` Frank Ch. Eigler
@ 2001-11-05  8:19 ` Andrew Cagney
  3 siblings, 0 replies; 10+ messages in thread
From: Andrew Cagney @ 2001-11-05  8:19 UTC (permalink / raw)
  To: Andrew Cagney; +Cc: gdb

Based on the comments so far, and some trying this by hand, I'd like to 
suggest a few refinements:

	For the multi-line version, a line with a leading ``#'' is considered a 
comment and is discarded.

	For the multi-line version, a blank line is considered a comment and is 
discarded.  (Note this is different).

	The target can send less than G packet length bytes.  The missing bytes 
are assumed to be zero (and registers will be show with zero values). 
(This is, more than anything, to remind me to fix that bit of the remote 
protocol spec.)

	The target can send more than G packet length bytes.  The additional 
registers will have their GDB value updated.  However, not supplying 
those registers does not result in their value being set to zero.

As for where to chop the G packet, I'd like to propose ``---'' vis:

	4:r0
	8:r1
	4:r2
	4
	8:r3
	---
	4:spr0:1000
	4:spr1

Other idea's very welcome.

--

There is currently a multi-arch method REGISTER_BYTES_OK(nr bytes in 
packet) which returns true if ``nr bytes in packet'' matches certain 
values. Two targets use this:

	cris	rejects short packets
	m68k	only accepts a packet containing the GPRs or GPRs+FPRs rejecting short 
packets.

Any suggestions on how to incorporate that into the semantics (a ``===' 
separator?).  Or perhaps that check could simply be removed.

--

Another problem, down the track, eluded to by Frank is for targets with 
large numbers of registers.   Entering:  ``4:r0;4:r1.....4:r4000'' by 
hand could be tedious.  There will probably eventually be a need for a 
an expansion mechanism, something like: ``4:r{0-4000}''

Andrew

----


> Hello,
> 
> For those that don't know, GDB's remote protocol G packet currently determins the layout of GDB's internal register cache.  Doh!
> 
> As part of breaking^D^D^Dfixing this, I'd like to introduce a new CLI command that allows the user to specify the G packet (and in fact the entire remote protocol numbering) at runtime.
> 
> The commands are:
> 
>     set remote registers <spec>
> and show remote registers
> 
> (better names welcome).  The interesting thing is the spec:
> 
>     <spec> ::= <entry> { <sep> <entry> }* ;;
>     <entry> ::= <size> [ ":" <name> [ ":" <pnum> ] ] ;;
>     <sep> ::= ";" | "\n" ;;
> Where:
>     <name>    is the name of a raw register
>     <size>    is the byte size of a register
>     <pnum>    is the [Pp] register number
> 
> Eg:
>     8:r0
>     8:r1
>     4:r2
>     4
>     8:r3
> 
>     4:spr0:1000
>     4:spr1
> 
> or: 8:r0;8:r1;4:r2;4;8:r3;;4:spr0:1000;4:spr1
> 
> GDBserver might use the first form (\n) while GDB's CLI would use the second form.
> 
> For want of a better way to define the semantics, try the attached shell script.  What follows is an attempt at an english description:
> 
> The spec is divided into two parts separated by a blank entry. Additional blank entries, after the first, are ignored.
> 
> The first part describes registers that are transfered via either the [Gg] packets or the [Pp] packets. Each entry specifies a number of bytes in the [Gg] packet and then, optionally, the GDB internal name corresponding to those bytes.  Unnamed entries are written as zero.
> 
> The second part describes registers that are only transferable via the [Pp] packets.  Size entries in this part of the spec are ignored.
> 
> The [Pp] packet register number of the first register is zero (unless explicitly specified).  The [Pp] packet register number of succeeding registers, if not explicitly specified, is determined by adding one to the previous register's number.  (Yes ``1:r1:1000;;4:r0;0'', while stupid, is still legal.)
> 
> If GDB's internal register is smaller than the packet specification then high bits are discarded to fit.
> 
> If GDB's internal register is larger than the packet specification then we've got a problem.  A guess is zero extend unless a -ve size is specified which would imply sign extend.  Worry about this when it actually happens.
> 
> -- 
> 
> NB:  If you didn't catch on.  GDB currently doesn't implement the ``read single register'' packet yet this spec assumes this.
> 
> -- 
> 
> 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.
> 
> -- 
> 
> comments, better suggestions, code?
> Andrew
> 
> 



^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2001-11-15 21:34 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2001-11-01  9:37 G packet format Andrew Cagney
2001-11-01 10:18 ` Daniel Jacobowitz
2001-11-01 10:30   ` Andrew Cagney
2001-11-01 10:58     ` Daniel Jacobowitz
2001-11-05  8:04       ` Andrew Cagney
2001-11-01 12:30 ` Fernando Nasser
2001-11-01 12:51   ` Andrew Cagney
2001-11-01 16:51 ` Frank Ch. Eigler
2001-11-02  0:37   ` Andrew Cagney
2001-11-05  8:19 ` Andrew Cagney

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox