extern (C) extern void* __libc_stack_end;
}
}
+ extern (C) void gc_addRange( void* p, size_t sz );
+ extern (C) void gc_removeRange( void *p );
}
alias __data_start Data_Start;
alias _end Data_End;
}
-
- alias void delegate( void*, void* ) scanFn;
-}
-
-
-/**
- *
- */
-extern (C) void rt_scanStaticData( scanFn scan )
-{
- scan(rt_staticDataBottom(), rt_staticDataTop());
}
-/**
- *
- */
-extern (C) void* rt_staticDataBottom()
-{
- version( Windows )
- {
- return &_xi_a;
- }
- else version( linux )
- {
- return &__data_start;
- }
- else
- {
- static assert( false, "Operating system not supported." );
- }
-}
-/**
- *
- */
-extern (C) void* rt_staticDataTop()
+void initStaticDataGC()
{
version( Windows )
{
- return &_end;
+ gc_addRange( &_xi_a, cast(size_t) &_end - cast(size_t) &_xi_a );
}
else version( linux )
{
- return &_end;
+ gc_addRange( &__data_start, cast(size_t) &_end - cast(size_t) &__data_start );
}
else
{
static assert( false, "Operating system not supported." );
}
}
-
-