This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [0/2] Inspect extra signal information
On Wednesday 04 February 2009 00:24:38, Daniel Jacobowitz wrote:
> What Doug described is pretty similar to what I had in mind; it does
> not fix the issue for gdbserver, but does for gdb. Read each field of
> the ptrace buffer, then use gdbarch to retrieve the type this would be
> expected to have in the inferior. Use gdb's type/value machinery to
> store the raw fields into the new value. Pass that value's contents
> back through the target layer to gdb, which will see the right values
> because it uses the same gdbarch to interpret them.
A few emails ago I mentioned "if I make use of struct type/struct value
if may not be bad, but, gdbserver can't use those..." :-), and I was
also thinking of something similar, but simpler. I was thinking
of building up a value with the 64-bit type (gdb knows how to
build it already), and pass it the raw 64-bit data. Then build
a new value with the 32-bit data, and iterate simulatenously in both
values through each field and copy/convert each field to the 32-bit
value, as appropriate. But as you say below, I don't like having
two ways to do the same thing, given that something has to be done
on the gdbserver side.
> Now, whether those hoops are worth it is another question. If we have
> to do this in gdbserver anyway, we could use the same method in gdb.
That's my thinking too. I'm half through, let's see what comes out...
> I vaguely remember having to do something similar for Solaris's
> procfs.
Yep. I remember that. It was related to that fact that auxv data
in procfs is presented with a 64-bit layout to a 64-bit gdb, even
if the inferior is 32-bit. If I'm not mistaken:
2008-05-04 Vladimir Prus ...
* target.h (struct target_ops): New field to_auxv_parse.
* auxv.c (default_auxv_parse): New, renamed from previous
target_auxv_parse.
(target_auxv_parse): Try to call target method. Fallback to
default_auxv_parse if not found.
* procfs.c (procfs_auxv_parse): New.
(init_procfs_ops): On Solaris, in 64-bit mode, install
procfs_auxv_parse.
> Only biarch platforms would have this problem, and fortunately there
> aren't too many.
--
Pedro Alves