public inbox for gdb@sourceware.org
 help / color / mirror / Atom feed
From: Mark Kettenis <kettenis@chello.nl>
To: brobecker@gnat.com
Cc: mec@shout.net, gdb@sources.redhat.com
Subject: Re: 8-byte register values on a 32-bit machine
Date: Sat, 01 Mar 2003 22:38:00 -0000	[thread overview]
Message-ID: <200303012238.h21Mcim9035371@elgar.kettenis.dyndns.org> (raw)
In-Reply-To: <20030301190929.GF11181@gnat.com> (message from Joel Brobecker on Sat, 1 Mar 2003 11:09:29 -0800)

   Date: Sat, 1 Mar 2003 11:09:29 -0800
   From: Joel Brobecker <brobecker@gnat.com>

   > Yup, that's defenitely what it does for stabs, and from looking at the
   > code, it does it for other debug formats as well (including dwarf-2).
   > Right now, GDB interprets this as that the variable is stored in
   > consecutive registers starting at the register number indicated by the
   > debug info.  I have a strong suspicion that there are several GDB
   > targets that rely on this behaviour.  However, it isn't working for
   > the i386 since GCC allocates the registers in an order that's
   > different from the order that GDB uses.

   What I have seen as well is GCC an 8 bytes structure over 2 registers
   (2 fields of 4 bytes, one field on each register). The first register
   used (and specified in the stabs info) was %ebx, and the next one was
   sort of consecutive. It was %esi. The only thing is that there are two
   special registers in the middle (%esp, and %ebp) :-).

Yup, GCC allocates %esi after %ebx.  By the way, the fact that GDB
"thinks" that %esp follows %ebx makes things very interesting if you
happen to modify the last 4 bytes of said structure.  This will make
GDB modify the stack pointer, which most likely makes your program
blow up.

   Because of this, even if we modified GCC to allocate the registers in
   the same order as the GDB order (or modify the GDB order, if that's
   possible), we'll still have situations where this is not going to work.

Modifying GCC probably wouldn't be a good idea.  The order on which
GCC allocates the registers seems to be chosen such that it generates
optimized code.  Modifying the GDB order isn't possible (yet) because
of the remote protocol.

   I think we've lost the stabs battle.

Actually, the order in which GCC allocates its registers has been the
same for many years (at least since GCC 2.6.3 which was released in
1994).  We only need to teach GDB this order in order to make GCC do
the right thing for code generated by any version of GCC that's still
in wide use.  I posted a preliminary patch that does this early
februari.  If we're concerned about aother compilers than GCC, we can
probably tweak things that we only use the heuristics in my patch when
the code was compiled by GCC.

   So I started to look into the DWARF2 format, but could not find
   anything that helps. Does anybody know if this format supports this
   sort of situation?

The idea was that DWARF2 location expressions could help.  I believe
GCC should emit location descriptors that are concatenation of
locations, just like it already does for complex variables.

Mark

  reply	other threads:[~2003-03-01 22:38 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-02-24  2:36 Michael Elizabeth Chastain
2003-03-01 13:35 ` Mark Kettenis
2003-03-01 20:33   ` Joel Brobecker
2003-03-01 22:38     ` Mark Kettenis [this message]
2003-03-01 23:41       ` Andrew Cagney
2003-03-02  0:28         ` Daniel Jacobowitz
2003-03-03 11:26           ` Richard Earnshaw
2003-03-03 11:52             ` Keith Walker
2003-03-01 23:39     ` Andrew Cagney
2003-03-01 20:57 Michael Elizabeth Chastain
2003-03-01 22:46 ` Mark Kettenis
2003-03-02  6:52 Michael Elizabeth Chastain
2003-03-02  9:35 ` Stephane Carrez
2003-03-03  4:50   ` Daniel Jacobowitz
2003-03-02 16:59 Michael Elizabeth Chastain
2003-03-12 15:35 ` Andrew Cagney
2003-03-12 15:51   ` Daniel Jacobowitz
2003-03-12 16:57     ` Andrew Cagney
2003-03-12 17:01       ` Daniel Jacobowitz
2003-03-12 18:15         ` Andrew Cagney
2003-03-12 18:29     ` Andrew Cagney
2003-03-12 18:35       ` Daniel Jacobowitz
2003-03-12 18:38         ` Andrew Cagney
2003-03-12 18:48         ` Paul Koning
2003-03-12 19:00           ` Daniel Jacobowitz
2003-03-12 21:04             ` Andrew Cagney
2003-03-12 20:06               ` Daniel Jacobowitz
2003-03-12 19:09 Michael Elizabeth Chastain
2003-03-12 20:47 ` Andrew Cagney
2003-03-13  4:18 Michael Elizabeth Chastain
2003-03-13 17:05 ` Andrew Cagney
2003-03-14 16:27 Michael Elizabeth Chastain

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200303012238.h21Mcim9035371@elgar.kettenis.dyndns.org \
    --to=kettenis@chello.nl \
    --cc=brobecker@gnat.com \
    --cc=gdb@sources.redhat.com \
    --cc=mec@shout.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).