diff options
author | Tom Tromey <tromey@cygnus.com> | 1998-08-27 14:51:55 +0000 |
---|---|---|
committer | Tom Tromey <tromey@gcc.gnu.org> | 1998-08-27 14:51:55 +0000 |
commit | 3e2a2957a078fb0c887fbc5298b9cfdda236a98d (patch) | |
tree | 3d77cb15075a98b5ee87af9c9accc33dd34623e3 /gcc/frame.c | |
parent | 54c3cf4bb924467d56d7d724cf08ef0fad425414 (diff) | |
download | gcc-3e2a2957a078fb0c887fbc5298b9cfdda236a98d.zip gcc-3e2a2957a078fb0c887fbc5298b9cfdda236a98d.tar.gz gcc-3e2a2957a078fb0c887fbc5298b9cfdda236a98d.tar.bz2 |
gthr.h: Document __GTHREAD_MUTEX_INIT_FUNCTION.
* 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
Diffstat (limited to 'gcc/frame.c')
-rw-r--r-- | gcc/frame.c | 33 |
1 files changed, 32 insertions, 1 deletions
diff --git a/gcc/frame.c b/gcc/frame.c index 4b62759..b3d30c8 100644 --- a/gcc/frame.c +++ b/gcc/frame.c @@ -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; }; + +/* 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 */ /* 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; |