Bernhard Walle wrote:
Hello,
* Dave Anderson <anderson(a)redhat.com> [2007-01-17 15:48]:
>
> gdb-6.1.patch:
>
> else if (*augmentation == 'P')
> {
> /* Skip. */
> - buf += size_of_encoded_value (*buf++);
> + buf += size_of_encoded_value (*buf);
> augmentation++;
> }
>
> This patch makes me a litte nervous. I see that gdb 6.5 does this:
>
> else if (*augmentation == 'P')
> {
> /* Skip. Avoid indirection since we throw away the result. */
> gdb_byte encoding = (*buf++) & ~DW_EH_PE_indirect;
> read_encoded_value (unit, encoding, buf, &bytes_read);
> buf += bytes_read;
> augmentation++;
> }
>
> Are they equivalent?
Of course not. :) After thinking a bit I think the correct fix would
be:
buf += size_of_encoded_value(*buf);
buf++;
Do you aggree?
I can't say with any confidence. I was trying to correlate the difference
between the way it's done in gdb-6.5 vs 6.1, and got lost doing so...
Just curious -- how do you manage to get crash to run through that
code path? (I put an exit() there, but can't seem to get there...)
Attached I have some more fixes for the GDB patch (so this is no
patch
for crash but should be added to gdb-6.1.patch). I saw that there's
some internal memset() with different paramter order in GDB [1], but
that's not taken in the gdb/ subdirectory because if you compile the
whole GDB with -D_FORTIFY_SOURCE=2, you get a linker (and not
compiler) warning. And the linker should know about it.
These are all fine -- they've been addressed similarly in gdb-6.5.
Thanks,
Dave