enable static libgcj on darwin
Andrew Pinski
pinskia@gmail.com
Wed Dec 27 16:13:00 GMT 2006
On 12/27/06, Adam Megacz <megacz@cs.berkeley.edu> wrote:
>
> Andrew Pinski <pinskia@physics.uc.edu> writes:
> >> Since darwin doesn't have a crtbegin.o/crtend.o (gcc only supports
> >> this for COFF and ELF), the jcr section doesn't really work. Until
> >> there is support for Mach-O in crtbegin/end, we need to fall back to
> >> alternative methods of getting classes registered.
>
> > This is wrong. Darwin does have support for JCR sections.
>
> It has JCR sections. What it does not have is all the other stuff
> needed to make them useful. See gcc/crtstuff.c, which is COFF/ELF-only.
>
> > See libjava/darwin.cc which is used to support for JCR sections.
>
> That is only a tiny portion of the functionality needed to make JCR
> sections work properly. The rest is missing.
Like? Look again,
crtstuff does:
if (__JCR_LIST__[0])
{
void (*register_classes) (void *) = _Jv_RegisterClasses;
__asm ("" : "+r" (register_classes));
if (register_classes)
register_classes (__JCR_LIST__);
}
#ifdef JCR_SECTION_NAME
if (__JCR_LIST__[0])
{
void (*register_classes) (void *) = _Jv_RegisterClasses;
__asm ("" : "+r" (register_classes));
if (register_classes)
register_classes (__JCR_LIST__);
}
#endif
While libjava/darwin.cc does:
/* As far as I can tell, you're only supposed to load shared
libraries while having a lock on java.lang.Class. So there's
no need to synchronize on anything here. (I'm not sure how exactly
you can ensure this given lazy library loading. FIXME.) */
_Jv_RegisterClasses_Counted ((const jclass *) (fde + slide),
sz / sizeof (jclass *));
So what rest is missing? You still have not said what is really missing?
darwin_java_register_dyld_add_image_hook is invoke every time a
dynamic library is loaded (or really added). So I don't see what the
problem is still.
-- Pinski
More information about the Java-patches
mailing list