aboutsummaryrefslogtreecommitdiff
path: root/boehm-gc/misc.c
diff options
context:
space:
mode:
authorHans Boehm <Hans_Boehm@hp.com>2003-03-03 19:34:11 +0000
committerHans Boehm <hboehm@gcc.gnu.org>2003-03-03 19:34:11 +0000
commitebcc6a7ec08a1e7cc2cf1d2a06daebbb904bde25 (patch)
tree0e084fa019f219c6affbd96447044ea359920119 /boehm-gc/misc.c
parentb22b239e5a587d473731560ea5d05cba42bdd4a7 (diff)
downloadgcc-ebcc6a7ec08a1e7cc2cf1d2a06daebbb904bde25.zip
gcc-ebcc6a7ec08a1e7cc2cf1d2a06daebbb904bde25.tar.gz
gcc-ebcc6a7ec08a1e7cc2cf1d2a06daebbb904bde25.tar.bz2
mark_rts.c (GC_cond_register_dynamic_libraries): add.
2003-03-03 Hans Boehm <Hans.Boehm@hp.com> * mark_rts.c (GC_cond_register_dynamic_libraries): add. (GC_push_roots): explicitly mark free list headers, register dynamic libraries only if !REGISTER_LIBRARIES_EARLY. * alloc.c (GC_stopped_mark): Conditionally call GC_cond_register_dynamic_libraries(). (GC_collect_a_little_inner, GC_try_to_collect_inner): Check GC_dont_gc. * dyn_load.c (GC_register_main_static_data): define. (GC_register_dyn_libraries (Linux /proc, Linux ELF versions)): no longer skip main data. * misc.c (GC_REGISTER_MAIN_STATIC_DATA): define. (GC_init_inner): Make main data registration conditional. * include/private/gc_priv.h (GC_register_main_static_data): declare. * include/private/gcconfig.h (REGISTER_LIBRARIES_EARLY): define for LINUX. From-SVN: r63727
Diffstat (limited to 'boehm-gc/misc.c')
-rw-r--r--boehm-gc/misc.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/boehm-gc/misc.c b/boehm-gc/misc.c
index f607973..891cdc7 100644
--- a/boehm-gc/misc.c
+++ b/boehm-gc/misc.c
@@ -75,6 +75,14 @@
#undef STACKBASE
#endif
+/* Dont unnecessarily call GC_register_main_static_data() in case */
+/* dyn_load.c isn't linked in. */
+#ifdef DYNAMIC_LOADING
+# define GC_REGISTER_MAIN_STATIC_DATA() GC_register_main_static_data()
+#else
+# define GC_REGISTER_MAIN_STATIC_DATA() TRUE
+#endif
+
GC_FAR struct _GC_arrays GC_arrays /* = { 0 } */;
@@ -572,7 +580,7 @@ void GC_init_inner()
GC_init_win32();
# endif
# if defined(SEARCH_FOR_DATA_START)
- GC_init_linux_data_start();
+ if (GC_REGISTER_MAIN_STATIC_DATA()) GC_init_linux_data_start();
# endif
# if (defined(NETBSD) || defined(OPENBSD)) && defined(__ELF__)
GC_init_netbsd_elf();
@@ -619,7 +627,7 @@ void GC_init_inner()
/* Add initial guess of root sets. Do this first, since sbrk(0) */
/* might be used. */
- GC_register_data_segments();
+ if (GC_REGISTER_MAIN_STATIC_DATA()) GC_register_data_segments();
GC_init_headers();
GC_bl_init();
GC_mark_init();