_Unwind_FindEnclosingFunction vs darwin

Jack Howarth howarth@bromo.med.uc.edu
Sat Dec 19 13:47:00 GMT 2009


On Sat, Dec 19, 2009 at 10:50:53AM +0000, Andrew Haley wrote:
> Jack Howarth wrote:
> > On Fri, Dec 18, 2009 at 03:01:08PM +0000, Andrew Haley wrote:
> >> _Unwind_Find_FDE is a standard function.  Does Darwin support that?
> >>
> > 
> > Andrew,
> >     I believe we do have _Unwind_Find_FDE on darwin10 but it
> > is only functional if compact unwind information isn't used.
> > This is currently the case in gcc trunk since I disabled
> > the darwin10 linker's default of using compact unwind info
> > to avoid issues with the new epilog unwind info on the
> > darwin10 linker.
> >      Shouldn't we be able to add something like...
> > 
> >  void *
> >  darwin10_Unwind_FindEnclosingFunction (void *pc)
> >  {
> >    struct dwarf_eh_bases bases;
> >    const struct dwarf_fde *fde = _Unwind_Find_FDE (pc-1, &bases);
> >    if (fde)
> >      return bases.func;
> >    else
> >      return NULL;
> >  }
> > 
> > and use...
> > 
> > #undefine _Unwind_FindEnclosingFunction(PC) 
> > #define _Unwind_FindEnclosingFunction(PC) darwin10_Unwind_FindEnclosingFunction(PC)
> > 
> > to avoid the system _Unwind_FindEnclosingFunction() on darwin10?
> 
> Sure.
> 
> > I assume that darwin10_Unwind_FindEnclosingFunction code would have to go into
> > libjava/darwin.cc. However, I am unclear where to place...
> > 
> > #undefine _Unwind_FindEnclosingFunction(PC) 
> > #define _Unwind_FindEnclosingFunction(PC) darwin10_Unwind_FindEnclosingFunction(PC)
> 
> It can either go in include/config.h if it's autoconf'd or perhaps in
> one of the libgcj include files.
> 
> The easiest thing would be to add
> 
> #ifdef USING_DARWIN_CRT
> #undefine _Unwind_FindEnclosingFunction(PC)
> #define _Unwind_FindEnclosingFunction(PC) darwin10_Unwind_FindEnclosingFunction(PC)
> #endif
> 
> to include/posix.h.
> 
> Please make sure that darwin10_Unwind_FindEnclosingFunction is not exported from
> anywhere.  I'd just declare it static inline in include/posix.h.
> 
> Andrew.

Andrew,
   The bigger question is were do we put the actual code for darwin10_Unwind_FindEnclosingFunction()
such that libgcj can access it. We do have access to libgcc_ext now in gcc 4.5 for extra symbols
but I am unclear if a given target can add its own symbols to libgcc_s.
              Jack



More information about the Java mailing list