]> git.llucax.com Git - software/druntime.git/blobdiff - src/compiler/dmd/memory.d
Fixed the static data area range calculation. Previous behavior was causing only...
[software/druntime.git] / src / compiler / dmd / memory.d
index 5f09d7ed9c2bc05b95800e9b4021ac241d8e14f4..7ea24dd9f10faef57a7aec2bd94050ea34505983 100644 (file)
@@ -37,6 +37,8 @@ private
             extern (C) extern void* __libc_stack_end;
         }
     }
             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 __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 )
     {
 {
     version( Windows )
     {
-        return &_end;
+        gc_addRange( &_xi_a, cast(size_t) &_end - cast(size_t) &_xi_a );
     }
     else version( linux )
     {
     }
     else version( linux )
     {
-        return &_end;
+        gc_addRange( &__data_start, cast(size_t) &_end - cast(size_t) &__data_start );
     }
     else
     {
     }
     else
     {