_Unwind_FindEnclosingFunction vs darwin
Andrew Haley
aph@redhat.com
Sat Dec 19 17:26:00 GMT 2009
Jack Howarth wrote:
> 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.
Define it static inline in libjava/include/posix.h..
Andrew.
More information about the Java
mailing list