]> granicus.if.org Git - gc/commitdiff
Avoid unnecessary GC_find_limit invocation if GC_no_dls
authorZoltan Varga <vargaz@gmail.com>
Mon, 23 Feb 2009 21:26:49 +0000 (21:26 +0000)
committerIvan Maidanski <ivmai@mail.ru>
Tue, 10 Jan 2012 11:02:11 +0000 (15:02 +0400)
(Apply commit f5d47a1 from 'mono_libgc' branch)

* os_dep.c (GC_init_linux_data_start): Avoid the call to
GC_find_limit() if GC_no_dls is TRUE, as it is not needed and
it complicates debugging since it causes a SIGSEGV.
* os_dep.c (GC_register_data_segments): Add assertion for DATASTART.

os_dep.c

index a3f780018e54170799da74a925c41cf2eb879a47..e6651f45ac8ce5164de53aa339b3e87d0243bdc6 100644 (file)
--- a/os_dep.c
+++ b/os_dep.c
@@ -461,6 +461,11 @@ GC_INNER char * GC_get_maps(void)
 
   GC_INNER void GC_init_linux_data_start(void)
   {
+        if (GC_no_dls) {
+                /* Not needed, avoids the SIGSEGV caused by     */
+                /* GC_find_limit which complicates debugging.   */
+                return;
+        }
 
 #   if defined(LINUX) || defined(HURD)
       /* Try the easy approaches first: */
@@ -1945,8 +1950,10 @@ void GC_register_data_segments(void)
         /* hanging from it.  We're on thin ice here ...                 */
         extern caddr_t sbrk(int);
 
+        GC_ASSERT(DATASTART);
         GC_add_roots_inner(DATASTART, (ptr_t)sbrk(0), FALSE);
 #     else
+        GC_ASSERT(DATASTART);
         GC_add_roots_inner(DATASTART, (ptr_t)(DATAEND), FALSE);
 #       if defined(DATASTART2)
           GC_add_roots_inner(DATASTART2, (ptr_t)(DATAEND2), FALSE);