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 | |
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
-rw-r--r-- | gcc/ChangeLog | 10 | ||||
-rw-r--r-- | gcc/frame.c | 33 | ||||
-rw-r--r-- | gcc/gthr.h | 8 |
3 files changed, 49 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 81e7ea2..d73a8cb 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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. 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; @@ -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: |