This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC 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: DWARF-2 unwinder versus MIPS n32


Daniel Jacobowitz wrote:
I'm trying to track down why unwinding through a signal frame crashes
on MIPS n32.  David, I'm pretty sure you introduced the crash here:

2006-11-20 David Daney <ddaney@avtrex.com>

        * config/mips/linux-unwind.h (mips_fallback_frame_state): Adjust
        PC to point to following instruction.


I don't doubt that there are problems here. I was going to clean up the compiler warnings that are now generated in that code, but it looks like more major work is needed.


There's two problems with this patch.  One is that it's just broken
for N64; you're loading the PC as a u_int32_t.  The other is that it
triggers an assertion in the unwinder for n32.

_Unwind_SetGRValue does this:

258       gcc_assert (dwarf_reg_size_table[index] == sizeof (_Unwind_Ptr));
259
260       context->by_value[index] = 1;
261       context->reg[index] = (void *) (_Unwind_Internal_Ptr) val;

context->reg[index] is a void *.  On N32, general registers are 64-bit
but pointers are 32-bit.  So if we get here, the assertion is almost
sure to trigger.  REG_SAVED_VAL_OFFSET brings us here.  Does anyone
see a way to fix this that doesn't involve making context->reg big
enough - and is _Unwind_Word always at least as large as _Unwind_Ptr
(i.e. mode(word) always at least as large as mode(pointer))?


The main problem I have is that when I wrote the original MD_FALLBACK_FRAME_STATE_FOR I only had a mipsel-linux machine for testing. You added support for big-endian, but that it ever worked for n32 and n64 is pure luck.


I continue to have the limitation of only being able to test on mipsel-linux, so it is unlikely that I will be able to help here.

I have never tried running the qemu linux systems. Do you know if it currently supports 64bit? If so I will fix it, otherwise all I can do is wait for 64bit hardware to magically appear on my door step.

David Daney


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