From: Zoltan Varga Date: Mon, 23 Feb 2009 21:26:49 +0000 (+0000) Subject: Avoid unnecessary GC_find_limit invocation if GC_no_dls X-Git-Tag: gc7_3alpha2~235 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=db0da19174f2c9ee4fc90c133190a0e23e464ccf;p=gc Avoid unnecessary GC_find_limit invocation if GC_no_dls (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. --- diff --git a/os_dep.c b/os_dep.c index a3f78001..e6651f45 100644 --- 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);