This is the mail archive of the java@gcc.gnu.org mailing list for the Java 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: [patch] Fix oddity in personality routine


On Tue, Nov 17, 2009 at 02:54:53PM +0000, Andrew Haley wrote:
> Jack Howarth wrote:
> 
> >   In the unwinder walk, are there any particular places where I could
> > get additional debug information in gdb that would be helpful to diagnose this
> > issue?
> 
> Sure.  The trace you provided is very incomplete, and in particular
> I can't see any stepping into _Unwind_RaiseException.
> 
> The main loop looks like this:
> 
>   while (1)
>     {
>       _Unwind_FrameState fs;
> 
>       /* Set up fs to describe the FDE for the caller of cur_context.  The
> 	 first time through the loop, that means __cxa_throw.  */
>       code = uw_frame_state_for (&cur_context, &fs);
> 
>       if (code == _URC_END_OF_STACK)
> 	/* Hit end of stack with no handler found.  */
> 	return _URC_END_OF_STACK;
> 
>       if (code != _URC_NO_REASON)
> 	/* Some error encountered.  Usually the unwinder doesn't
> 	   diagnose these and merely crashes.  */
> 	return _URC_FATAL_PHASE1_ERROR;
> 
>       /* Unwind successful.  Run the personality routine, if any.  */
>       if (fs.personality)
> 	{
> 	  code = (*fs.personality) (1, _UA_SEARCH_PHASE, exc->exception_class,
> 				    exc, &cur_context);
> 	  if (code == _URC_HANDLER_FOUND)
> 	    break;
> 	  else if (code != _URC_CONTINUE_UNWIND)
> 	    return _URC_FATAL_PHASE1_ERROR;
> 	}
> 
>       /* Update cur_context to describe the same frame as fs.  */
>       uw_update_context (&cur_context, &fs);
>     }
> 
> So, for each stack frame, we read the unwinder data and then call the
> appropriate personality routine (in this case, in libgcj.)
> 
> cur_context.ra is the program counter for the current stack frame.
> So,
> 
> (gdb) x cur_context.ra
> 0x7ffff659ca7f <_ZN4java3net14URLClassLoader9findClassEJPNS_4lang5ClassEPNS2_6StringE+255>:	0x41c58949
> 
> tells you which frame is being inspected.  So, you can see where the
> exception handler should be, and you can step into the personality
> routine to see why it's not recognized.
> 
Andrew,
    At which points should I be sampling with 'x cur_context.ra'? Is there a particular
breakpoint that would be useful to set in order to do this? Also, would it help if I
recompiled libgcj with -O0 as well?
                        Jack

> 
> Andrew.


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