This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]