This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [RFC 1/5] Lazy register values
- From: "Ulrich Weigand" <uweigand at de dot ibm dot com>
- To: drow at false dot org (Daniel Jacobowitz)
- Cc: gdb-patches at sourceware dot org
- Date: Fri, 4 Apr 2008 21:17:38 +0200 (CEST)
- Subject: Re: [RFC 1/5] Lazy register values
Hi Dan,
> This patch allows a register value to be lazy. Lazy register values
> are created by value_of_register_lazy and fetched by value_fetch_lazy,
> like lazy memory values. I went through every check of value_lazy and
> updated the ones which assumed this implied memory; the others guard
> calls to value_fetch_lazy, which is still correct.
I like this approach! However, I'm wondering about some of the
value_lazy changes; for example in code like:
v = allocate_value (elt_type);
if (value_lazy (array))
set_value_lazy (v, 1);
else
memcpy (value_contents_writeable (v),
value_contents (array) + elt_offs, elt_size);
if (VALUE_LVAL (array) == lval_internalvar)
VALUE_LVAL (v) = lval_internalvar_component;
else
VALUE_LVAL (v) = VALUE_LVAL (array);
VALUE_ADDRESS (v) = VALUE_ADDRESS (array);
VALUE_REGNUM (v) = VALUE_REGNUM (array);
VALUE_FRAME_ID (v) = VALUE_FRAME_ID (array);
set_value_offset (v, value_offset (array) + elt_offs);
(in value_subscripted_rvalue), it doesn't seem right to simply
change the if to
if (VALUE_LVAL (array) == lval_memory && value_lazy (array))
If that function were ever called with a lazy register value,
the "else" part would copy from value_contents of that lazy
value, which is actually undefined.
In fact, it would appear that not changing the if at all might
be the correct solution anyway: the new value would then be
marked as lazy register value with offset.
Of course, that would then require that value_fetch_lazy
allows and handles offsets for lazy register values.
I've read through the rest of the patches in this series,
and they look fine to me. I'd be happy to convert any of
the platforms I have access to (s390, ppc, spu, ia64).
Bye,
Ulrich
--
Dr. Ulrich Weigand
GNU Toolchain for Linux on System z and Cell BE
Ulrich.Weigand@de.ibm.com