X-Git-Url: https://git.llucax.com/software/druntime.git/blobdiff_plain/24f79eca36d0f4294eb276ac777b2a27dfb060dd..06df0cbad0c518989750f59ebc17d7eba2a2aec5:/src/compiler/dmd/memory.d?ds=inline diff --git a/src/compiler/dmd/memory.d b/src/compiler/dmd/memory.d index 5f09d7e..7ea24dd 100644 --- a/src/compiler/dmd/memory.d +++ b/src/compiler/dmd/memory.d @@ -37,6 +37,8 @@ private extern (C) extern void* __libc_stack_end; } } + extern (C) void gc_addRange( void* p, size_t sz ); + extern (C) void gc_removeRange( void *p ); } @@ -130,50 +132,18 @@ private 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 {