* Fix for g++/15861
authorFrank Ch. Eigler <fche@redhat.com>
Thu, 15 Jul 2004 17:33:23 +0000 (17:33 +0000)
committerFrank Ch. Eigler <fche@gcc.gnu.org>
Thu, 15 Jul 2004 17:33:23 +0000 (17:33 +0000)
2004-07-15  Frank Ch. Eigler  <fche@redhat.com>

g++/15861
* mf-runtime.c (__mf_init): Make it non-static.  Tolerate
repeated invocation.

From-SVN: r84761

libmudflap/ChangeLog
libmudflap/mf-runtime.c

index 804359a0036d32565abf1fc5ad366283e96c507d..60fbf2edede71f3fb66631524d15aea7aec0ff4c 100644 (file)
@@ -1,3 +1,9 @@
+2004-07-15  Frank Ch. Eigler  <fche@redhat.com>
+
+       g++/15861
+       * mf-runtime.c (__mf_init): Make it non-static.  Tolerate
+       repeated invocation.
+
 2004-07-09  Frank Ch. Eigler  <fche@redhat.com>
 
        Test case for g++/15861
index f1cd0a22db765942c84e7d73649ea06dc22d5466..332b9c2eebf7942398990b65a3454b94ea6d6780 100644 (file)
@@ -206,7 +206,7 @@ static __mf_object_t *__mf_object_cemetary[__MF_TYPE_MAX_CEM+1][__MF_PERSIST_MAX
 /* ------------------------------------------------------------------------ */
 /* Forward function declarations */
 
-static void __mf_init () CTOR;
+void __mf_init () CTOR;
 static void __mf_sigusr1_respond ();
 static unsigned __mf_find_objects (uintptr_t ptr_low, uintptr_t ptr_high, 
                                    __mf_object_t **objs, unsigned max_objs);
@@ -615,11 +615,15 @@ __mf_object_tree (int type)
 }
 
 
-void
+/* not static */void
 __mf_init ()
 {
   char *ov = 0;
 
+  /* Return if initialization has already been done. */
+  if (LIKELY (__mf_starting_p == 0))
+    return;
+
   /* This initial bootstrap phase requires that __mf_starting_p = 1. */
 #ifdef PIC
   __mf_resolve_dynamics ();