Re: _Unwind_FindEnclosingFunction vs darwin

Jack Howarth <[email protected]>
Newsgroups gmane.comp.gcc.java.devel
Message-ID <[email protected]>
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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.