diff options
author | tromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4> | 1998-08-27 14:51:55 +0000 |
---|---|---|
committer | tromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4> | 1998-08-27 14:51:55 +0000 |
commit | 2022c24b9b35ad206386b1f9136e6c810c5b1d3c (patch) | |
tree | 3d77cb15075a98b5ee87af9c9accc33dd34623e3 /gcc/frame.c | |
parent | d1a63bd60deaa128f986921d7c13d3d6dc96a99a (diff) | |
download | gcc-2022c24b9b35ad206386b1f9136e6c810c5b1d3c.tar.gz |
* 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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@22023 138bc75d-0d04-0410-961f-82ee72b054a4
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 4b62759c1af..b3d30c86f5e 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; |