Fix visibility of GC_push_all/conditional, GC_push_other_roots symbols
authorIvan Maidanski <ivmai@mail.ru>
Sat, 2 Jun 2012 08:33:03 +0000 (12:33 +0400)
committerIvan Maidanski <ivmai@mail.ru>
Sat, 2 Jun 2012 09:34:56 +0000 (13:34 +0400)
* include/private/gc_priv.h (GC_push_all, GC_push_other_roots):
Declare as GC_API_PRIV (instead of GC_INNER) to make the symbol
externally visible to some well-known 3rd-party software (e.g., ECL).
* include/private/gc_priv.h (GC_push_conditional): Declare as
GC_API_PRIV (only if GC_DISABLE_INCREMENTAL is undefined).
* mark.c (GC_push_all, GC_push_conditional): Remove GC_INNER (to match
the declaration).
* os_dep.c (GC_push_other_roots): Likewise.

include/private/gc_priv.h
mark.c
os_dep.c

index 5cfb543..2ce574b 100644 (file)
@@ -1509,11 +1509,11 @@ GC_INNER void GC_initiate_gc(void);
 GC_INNER GC_bool GC_collection_in_progress(void);
                         /* Collection is in progress, or was abandoned. */
 
-GC_INNER void GC_push_all(ptr_t bottom, ptr_t top);
+GC_API_PRIV void GC_push_all(ptr_t bottom, ptr_t top);
                                 /* Push everything in a range           */
                                 /* onto mark stack.                     */
 #ifndef GC_DISABLE_INCREMENTAL
-  GC_INNER void GC_push_conditional(ptr_t b, ptr_t t, GC_bool all);
+  GC_API_PRIV void GC_push_conditional(ptr_t b, ptr_t t, GC_bool all);
 #else
 # define GC_push_conditional(b, t, all) GC_push_all(b, t)
 #endif
@@ -1537,13 +1537,15 @@ GC_INNER void GC_push_all_eager(ptr_t b, ptr_t t);
 GC_INNER void GC_push_roots(GC_bool all, ptr_t cold_gc_frame);
                                         /* Push all or dirty roots.     */
 
-GC_EXTERN void (*GC_push_other_roots)(void);
+GC_API_PRIV void (*GC_push_other_roots)(void);
                         /* Push system or application specific roots    */
                         /* onto the mark stack.  In some environments   */
                         /* (e.g. threads environments) this is          */
                         /* predefined to be non-zero.  A client         */
                         /* supplied replacement should also call the    */
-                        /* original function.                           */
+                        /* original function.  Remains externally       */
+                        /* visible as used by some well-known 3rd-party */
+                        /* software (e.g., ECL) currently.              */
 
 #ifdef THREADS
   void GC_push_thread_structures(void);
diff --git a/mark.c b/mark.c
index 8786e56..1c6996d 100644 (file)
--- a/mark.c
+++ b/mark.c
@@ -1261,7 +1261,7 @@ GC_INNER void GC_mark_init(void)
  * Should only be used if there is no possibility of mark stack
  * overflow.
  */
-GC_INNER void GC_push_all(ptr_t bottom, ptr_t top)
+void GC_push_all(ptr_t bottom, ptr_t top)
 {
     register word length;
 
@@ -1334,7 +1334,7 @@ GC_INNER void GC_push_all(ptr_t bottom, ptr_t top)
     }
   }
 
-  GC_INNER void GC_push_conditional(ptr_t bottom, ptr_t top, GC_bool all)
+  void GC_push_conditional(ptr_t bottom, ptr_t top, GC_bool all)
   {
     if (!all) {
       GC_push_selected(bottom, top, GC_page_was_dirty);
index 7a55872..57cf8ed 100644 (file)
--- a/os_dep.c
+++ b/os_dep.c
@@ -2560,7 +2560,7 @@ GC_INNER void GC_unmap_gap(ptr_t start1, size_t bytes1, ptr_t start2,
 /* environment, this is also responsible for marking from       */
 /* thread stacks.                                               */
 #ifndef THREADS
-  GC_INNER void (*GC_push_other_roots)(void) = 0;
+  void (*GC_push_other_roots)(void) = 0;
 #else /* THREADS */
 
 # ifdef PCR
@@ -2624,7 +2624,7 @@ STATIC void GC_default_push_other_roots(void)
     }
 # endif /* SN_TARGET_PS3 */
 
-  GC_INNER void (*GC_push_other_roots)(void) = GC_default_push_other_roots;
+  void (*GC_push_other_roots)(void) = GC_default_push_other_roots;
 #endif /* THREADS */
 
 /*