gthr.h: Document __GTHREAD_MUTEX_INIT_FUNCTION.
authorTom Tromey <tromey@cygnus.com>
Thu, 27 Aug 1998 14:51:55 +0000 (14:51 +0000)
committerTom Tromey <tromey@gcc.gnu.org>
Thu, 27 Aug 1998 14:51:55 +0000 (14:51 +0000)
        * gthr.h: Document __GTHREAD_MUTEX_INIT_FUNCTION.
        * frame.c (init_object_mutex): New function.
        (init_object_mutex_once): Likewise.
        (find_fde): Call it.
        (__register_frame_info): Likewise.
        (__register_frame_info_table): Likewise.
        (__deregister_frame_info): Likewise.

From-SVN: r22023

gcc/ChangeLog
gcc/frame.c
gcc/gthr.h

index 81e7ea281e499e888b65da80807112e4d5d5fc18..d73a8cb0f5b4366762a10501277aa5bbfe5f9f65 100644 (file)
@@ -1,3 +1,13 @@
+Wed Aug 26 17:13:37 1998  Tom Tromey  <tromey@cygnus.com>
+
+       * gthr.h: Document __GTHREAD_MUTEX_INIT_FUNCTION.
+       * frame.c (init_object_mutex): New function.
+       (init_object_mutex_once): Likewise.
+       (find_fde): Call it.
+       (__register_frame_info): Likewise.
+       (__register_frame_info_table): Likewise.
+       (__deregister_frame_info): Likewise.
+
 Thu Aug 27 15:14:18 1998  Jeffrey A Law  (law@cygnus.com)
 
        * haifa-sched.c (sched_analyze_insn): Fix thinko in last change.
index 4b62759c1afd180fc266ab24f108ce07a379ca4d..b3d30c86f5ec90e5f376c175c91188b2ddf39250 100644 (file)
@@ -1,6 +1,6 @@
 /* Subroutines needed for unwinding stack frames for exception handling.  */
 /* Compile this one with gcc.  */
-/* Copyright (C) 1997 Free Software Foundation, Inc.
+/* Copyright (C) 1997, 1998 Free Software Foundation, Inc.
    Contributed by Jason Merrill <jason@cygnus.com>.
 
 This file is part of GNU CC.
@@ -114,6 +114,33 @@ struct frame_state_internal
   struct frame_state s;
   struct frame_state_internal *saved_state;
 };
+\f
+/* This is undefined below if we need it to be an actual function.  */
+#define init_object_mutex_once()
+
+#if __GTHREADS
+#ifdef __GTHREAD_MUTEX_INIT_FUNCTION
+
+/* Helper for init_object_mutex_once.  */
+
+static void
+init_object_mutex (void)
+{
+  __GTHREAD_MUTEX_INIT_FUNCTION (&object_mutex);
+}
+
+/* Call this to arrange to initialize the object mutex.  */
+
+#undef init_object_mutex_once
+static void
+init_object_mutex_once (void)
+{
+  static __gthread_once_t once = __GTHREAD_ONCE_INIT;
+  __gthread_once (&once, init_object_mutex);
+}
+
+#endif /* __GTHREAD_MUTEX_INIT_FUNCTION */
+#endif /* __GTHREADS */
 \f  
 /* Decode the unsigned LEB128 constant at BUF into the variable pointed to
    by R, and return the new value of BUF.  */
@@ -468,6 +495,7 @@ find_fde (void *pc)
   struct object *ob;
   size_t lo, hi;
 
+  init_object_mutex_once ();
   __gthread_mutex_lock (&object_mutex);
 
   for (ob = objects; ob; ob = ob->next)
@@ -685,6 +713,7 @@ __register_frame_info (void *begin, struct object *ob)
   ob->fde_array = 0;
   ob->count = 0;
 
+  init_object_mutex_once ();
   __gthread_mutex_lock (&object_mutex);
 
   ob->next = objects;
@@ -713,6 +742,7 @@ __register_frame_info_table (void *begin, struct object *ob)
   ob->pc_begin = ob->pc_end = 0;
   ob->count = 0;
 
+  init_object_mutex_once ();
   __gthread_mutex_lock (&object_mutex);
 
   ob->next = objects;
@@ -735,6 +765,7 @@ __deregister_frame_info (void *begin)
 {
   struct object **p;
 
+  init_object_mutex_once ();
   __gthread_mutex_lock (&object_mutex);
 
   p = &objects;
index d1028cb58e932b40e8cfde835ed7a08c0c35c5b4..7511e35a7ab7ff71693fc9ea0b20d71f6263c6b8 100644 (file)
@@ -1,6 +1,6 @@
 /* Threads compatibily routines for libgcc2.  */
 /* Compile this one with gcc.  */
-/* Copyright (C) 1997 Free Software Foundation, Inc.
+/* Copyright (C) 1997, 1998 Free Software Foundation, Inc.
 
 This file is part of GNU CC.
 
@@ -48,6 +48,12 @@ Boston, MA 02111-1307, USA.  */
      __GTHREAD_MUTEX_INIT
                to initialize __gthread_mutex_t to get a fast
                non-recursive mutex.
+     __GTHREAD_MUTEX_INIT_FUNCTION
+               some systems can't initalize a mutex without a
+               function call.  On such systems, define this to a
+               function which looks like this:
+                 void __GTHREAD_MUTEX_INIT_FUNCTION (__gthread_mutex_t *)
+               Don't define __GTHREAD_MUTEX_INIT in this case
 
    The threads interface must define the following static functions: