http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52583

--- Comment #21 from Ian Lance Taylor <ian at airs dot com> 2012-04-25 14:56:56 
UTC ---
I no longer see any failures on i386 Solaris.  I see a few failures on x86_64
Solaris.  They are all crashing in x86_64_fallback_frame_state when trying to
unwind through a signal handler.  The x86_64_fallback_frame_state function
assumes, quite reasonably, that context->pc is a valid memory address. 
Unfortunately, many Go stacks begin with a stack passed to makecontext.  The
implementation of makecontext in the Solaris libc does not seem to have
appropriate unwind information.  Ideally it should specifically set the return
address unwind column to be undefined, as described by DWARF.  Right now, an
attempt to unwind the stack frame up to the point of makecontext will sometimes
produce an invalid value for the PC of the (nonexistent) frame that called
makecontext.  And that leads to the crash.

I think the only fixes are for Solaris to correct makecontext so that it sets
up proper unwind information, or for libgo to implement a version of
makecontext specific for its purposes.  The latter will not happen for 4.7.

Reply via email to