Here is another gripe about multitables:  in the
following multitable from the GDB manual, some (but not
all) of the items in the first column get formatted strangely.
See for instance the "set breakpoint" item.  Formatted on my
machine, it comes out with the 'set' left-justified in the
field and the 'breakpoint' right-justified, and a large gap
in between.  It would seem better to have the field always
left-justified.

The machine reports:

TeX (Web2C 7.3.1) 3.14159
kpathsea version 3.3.1

texi2dvi (GNU Texinfo 3.12-pretest) 0.39

dvips(k) 5.86

Working it up on a different office machine with slightly older
versions of the above, but I think a current texinfo.tex, had
the same results for me.

- Brian Youmans, FSF


@page
@multitable @columnfractions .30 .30 .40
@item Packet
@tab Request
@tab Description

@item extended ops
@tab @code{!}
@tab
Use the extended remote protocol.  Sticky---only needs to be set once.
The extended remote protocol supports the @samp{R} packet.
@item
@tab reply @samp{}
@tab
Stubs that support the extended remote protocol return @samp{} which,
unfortunately, is identical to the response returned by stubs that do not
support protocol extensions.

@item last signal
@tab @code{?}
@tab
Indicate the reason the target halted.  The reply is the same as for step
and continue.
@item
@tab reply
@tab see below


@item reserved
@tab @code{a}
@tab Reserved for future use

@item set program arguments @strong{(reserved)}
@tab @code{A}@var{arglen}@code{,}@var{argnum}@code{,}@var{arg}@code{,...}
@tab
@item
@tab
@tab
Initialized @samp{argv[]} array passed into program. @var{arglen}
specifies the number of bytes in the hex encoded byte stream @var{arg}.
See @file{gdbserver} for more details.
@item
@tab reply @code{OK}
@item
@tab reply @code{E}@var{NN}

@item set baud @strong{(deprecated)}
@tab @code{b}@var{baud}
@tab
Change the serial line speed to @var{baud}.  JTC: @emph{When does the
transport layer state change?  When it's received, or after the ACK is
transmitted.  In either case, there are problems if the command or the
acknowledgment packet is dropped.} Stan: @emph{If people really wanted
to add something like this, and get it working for the first time, they
ought to modify ser-unix.c to send some kind of out-of-band message to a
specially-setup stub and have the switch happen "in between" packets, so
that from remote protocol's point of view, nothing actually
happened.}

@item set breakpoint @strong{(deprecated)}
@tab @code{B}@var{addr},@var{mode}
@tab
Set (@var{mode} is @samp{S}) or clear (@var{mode} is @samp{C}) a
breakpoint at @var{addr}.  @emph{This has been replaced by the @samp{Z} and
@samp{z} packets.}

@item continue
@tab @code{c}@var{addr}
@tab
@var{addr} is address to resume. If @var{addr} is omitted, resume at
current address.
@item
@tab reply
@tab see below

@item continue with signal
@tab @code{C}@var{sig}@code{;}@var{addr}
@tab
Continue with signal @var{sig} (hex signal number).  If
@code{;}@var{addr} is omitted, resume at same address.
@item
@tab reply
@tab see below

@item toggle debug @strong{(deprecated)}
@tab @code{d}
@tab
toggle debug flag.

@item detach
@tab @code{D}
@tab
Detach @value{GDBN} from the remote system.  Sent to the remote target before
@value{GDBN} disconnects.
@item
@tab reply @emph{no response}
@tab
@value{GDBN} does not check for any response after sending this packet.

@item reserved
@tab @code{e}
@tab Reserved for future use

@item reserved
@tab @code{E}
@tab Reserved for future use

@item reserved
@tab @code{f}
@tab Reserved for future use

@item reserved
@tab @code{F}
@tab Reserved for future use

@item read registers
@tab @code{g}
@tab Read general registers.
@item
@tab reply @var{XX...}
@tab
Each byte of register data is described by two hex digits.  The bytes
with the register are transmitted in target byte order.  The size of
each register and their position within the @samp{g} @var{packet} are
determined by the @value{GDBN} internal macros @var{REGISTER_RAW_SIZE} and
@var{REGISTER_NAME} macros.  The specification of several standard
@code{g} packets is specified below.
@item
@tab @code{E}@var{NN}
@tab for an error.

@item write regs
@tab @code{G}@var{XX...}
@tab
See @samp{g} for a description of the @var{XX...} data.
@item
@tab reply @code{OK}
@tab for success
@item
@tab reply @code{E}@var{NN}
@tab for an error

@item reserved
@tab @code{h}
@tab Reserved for future use

@item set thread 
@tab @code{H}@var{c}@var{t...}
@tab
Set thread for subsequent operations (@samp{m}, @samp{M}, @samp{g},
@samp{G}, et.al.).  @var{c} = @samp{c} for thread used in step and
continue; @var{t...} can be -1 for all threads.  @var{c} = @samp{g} for
thread used in other operations.  If zero, pick a thread, any thread.
@item
@tab reply @code{OK}
@tab for success
@item
@tab reply @code{E}@var{NN}
@tab for an error

@c FIXME: JTC:
@c   'H': How restrictive (or permissive) is the thread model.  If a
@c        thread is selected and stopped, are other threads allowed
@c        to continue to execute?  As I mentioned above, I think the
@c        semantics of each command when a thread is selected must be
@c        described.  For example:
@c
@c        'g':    If the stub supports threads and a specific thread is
@c                selected, returns the register block from that thread;
@c                otherwise returns current registers.
@c
@c        'G'     If the stub supports threads and a specific thread is
@c                selected, sets the registers of the register block of
@c                that thread; otherwise sets current registers.

@item cycle step @strong{(draft)}
@tab @code{i}@var{addr}@code{,}@var{nnn}
@tab
Step the remote target by a single clock cycle.  If @code{,}@var{nnn} is
present, cycle step @var{nnn} cycles.  If @var{addr} is present, cycle
step starting at that address.

@item signal then cycle step @strong{(reserved)}
@tab @code{I}
@tab
See @samp{i} and @samp{S} for likely syntax and semantics.

@item reserved
@tab @code{j}
@tab Reserved for future use

@item reserved
@tab @code{J}
@tab Reserved for future use

@item kill request
@tab @code{k}
@tab
FIXME: @emph{There is no description of how operate when a specific
thread context has been selected (ie. does 'k' kill only that thread?)}.

@item reserved
@tab @code{l}
@tab Reserved for future use

@item reserved
@tab @code{L}
@tab Reserved for future use

@item read memory
@tab @code{m}@var{addr}@code{,}@var{length}
@tab
Read @var{length} bytes of memory starting at address @var{addr}.
Neither @value{GDBN} nor the stub assume that sized memory transfers are assumed
using word alligned accesses. FIXME: @emph{A word aligned memory
transfer mechanism is needed.}
@item
@tab reply @var{XX...}
@tab
@var{XX...} is mem contents. Can be fewer bytes than requested if able
to read only part of the data.  Neither @value{GDBN} nor the stub assume that
sized memory transfers are assumed using word alligned accesses. FIXME:
@emph{A word aligned memory transfer mechanism is needed.}
@item
@tab reply @code{E}@var{NN}
@tab @var{NN} is errno

@item write mem
@tab @code{M}@var{addr},@var{length}@code{:}@var{XX...}
@tab
Write @var{length} bytes of memory starting at address @var{addr}.
@var{XX...} is the data.
@item
@tab reply @code{OK}
@tab for success
@item
@tab reply @code{E}@var{NN}
@tab
for an error (this includes the case where only part of the data was
written).

@item reserved
@tab @code{n}
@tab Reserved for future use

@item reserved
@tab @code{N}
@tab Reserved for future use

@item reserved
@tab @code{o}
@tab Reserved for future use

@item reserved
@tab @code{O}
@tab Reserved for future use

@item read reg @strong{(reserved)}
@tab @code{p}@var{n...}
@tab
See write register.
@item
@tab return @var{r....}
@tab The hex encoded value of the register in target byte order.

@item write reg
@tab @code{P}@var{n...}@code{=}@var{r...}
@tab
Write register @var{n...} with value @var{r...}, which contains two hex
digits for each byte in the register (target byte order).
@item
@tab reply @code{OK}
@tab for success
@item
@tab reply @code{E}@var{NN}
@tab for an error

@item general query
@tab @code{q}@var{query}
@tab
Request info about @var{query}.  In general @value{GDBN} queries
have a leading upper case letter.  Custom vendor queries should use a
company prefix (in lower case) ex: @samp{qfsf.var}.  @var{query} may
optionally be followed by a @samp{,} or @samp{;} separated list.  Stubs
must ensure that they match the full @var{query} name.
@item
@tab reply @code{XX...}
@tab Hex encoded data from query.  The reply can not be empty.
@item
@tab reply @code{E}@var{NN}
@tab error reply
@item
@tab reply @samp{}
@tab Indicating an unrecognized @var{query}.

@item general set
@tab @code{Q}@var{var}@code{=}@var{val}
@tab
Set value of @var{var} to @var{val}.  See @samp{q} for a discussing of
naming conventions.

@item reset @strong{(deprecated)}
@tab @code{r}
@tab
Reset the entire system.

@item remote restart
@tab @code{R}@var{XX}
@tab
Restart the remote server.  @var{XX} while needed has no clear
definition.  FIXME: @emph{An example interaction explaining how this
packet is used in extended-remote mode is needed}.

@item step
@tab @code{s}@var{addr}
@tab
@var{addr} is address to resume.  If @var{addr} is omitted, resume at
same address.
@item
@tab reply
@tab see below

@item step with signal
@tab @code{S}@var{sig}@code{;}@var{addr}
@tab
Like @samp{C} but step not continue.
@item
@tab reply
@tab see below

@item search 
@tab @code{t}@var{addr}@code{:}@var{PP}@code{,}@var{MM}
@tab
Search backwards starting at address @var{addr} for a match with pattern
@var{PP} and mask @var{MM}.  @var{PP} and @var{MM} are 4
bytes.  @var{addr} must be at least 3 digits.

@item thread alive
@tab @code{T}@var{XX}
@tab Find out if the thread XX is alive.
@item
@tab reply @code{OK}
@tab thread is still alive
@item
@tab reply @code{E}@var{NN}
@tab thread is dead

@item reserved
@tab @code{u}
@tab Reserved for future use

@item reserved
@tab @code{U}
@tab Reserved for future use

@item reserved
@tab @code{v}
@tab Reserved for future use

@item reserved
@tab @code{V}
@tab Reserved for future use

@item reserved
@tab @code{w}
@tab Reserved for future use

@item reserved
@tab @code{W}
@tab Reserved for future use

@item reserved
@tab @code{x}
@tab Reserved for future use

@item write mem (binary)
@tab @code{X}@var{addr}@code{,}@var{length}@var{:}@var{XX...}
@tab
@var{addr} is address, @var{length} is number of bytes, @var{XX...} is
binary data.  The characters @code{$}, @code{#}, and @code{0x7d} are
escaped using @code{0x7d}.
@item
@tab reply @code{OK}
@tab for success
@item
@tab reply @code{E}@var{NN}
@tab for an error

@item reserved
@tab @code{y}
@tab Reserved for future use

@item reserved
@tab @code{Y}
@tab Reserved for future use

@item remove break or watchpoint @strong{(draft)}
@tab @code{z}@var{t}@code{,}@var{addr}@code{,}@var{length}
@tab
See @samp{Z}.

@item insert break or watchpoint @strong{(draft)}
@tab @code{Z}@var{t}@code{,}@var{addr}@code{,}@var{length}
@tab
@var{t} is type: @samp{0} - software breakpoint, @samp{1} - hardware
breakpoint, @samp{2} - write watchpoint, @samp{3} - read watchpoint,
@samp{4} - access watchpoint; @var{addr} is address; @var{length} is in
bytes.  For a software breakpoint, @var{length} specifies the size of
the instruction to be patched.  For hardware breakpoints and watchpoints
@var{length} specifies the memory region to be monitored.  To avoid
potential problems with duplicate packets, the operations should be
implemented in an idempotent way.
@item
@tab reply @code{E}@var{NN}
@tab for an error
@item
@tab reply @code{OK}
@tab for success
@item
@tab @samp{}
@tab If not supported.

@item reserved
@tab <other>
@tab Reserved for future use

@end multitable

Reply via email to