@@ -79,10 +79,11 @@ #ifdef OF_MORPHOS const ULONG __abox__ = 1; #endif struct ExecBase *SysBase; struct OFLibC libC; +struct Library *ObjFWRTBase; #if defined(OF_AMIGAOS_M68K) __asm__ ( ".text\n" ".globl ___restore_a4\n" @@ -325,13 +326,28 @@ static void * libNull(void) { return NULL; } + +static void __saveds +OFInitPart2(uintptr_t *iter0, struct Library *RTBase) +{ + uintptr_t *iter; + + ObjFWRTBase = RTBase; + + for (iter = iter0; *iter != 0; iter++); + + while (iter > iter0) { + void (*ctor)(void) = (void (*)(void))*--iter; + ctor(); + } +} bool -OFInit(unsigned int version, struct OFLibC *libC_) +OFInit(unsigned int version, struct OFLibC *libC_, struct Library *RTBase) { #ifdef OF_AMIGAOS_M68K OF_M68K_ARG(struct ObjFWBase *, base, a6) #else register struct ObjFWBase *r12 __asm__("r12"); @@ -338,11 +354,11 @@ struct ObjFWBase *base = r12; #endif #ifdef OF_MORPHOS void *frame; #endif - uintptr_t *iter, *iter0; + uintptr_t *iter0; if (version > 1) return false; if (base->initialized) @@ -366,16 +382,11 @@ ); libC.__register_frame(frame); #endif - for (iter = iter0; *iter != 0; iter++); - - while (iter > iter0) { - void (*ctor)(void) = (void (*)(void))*--iter; - ctor(); - } + OFInitPart2(iter0, RTBase); base->initialized = true; return true; }