From 3e2a2957a078fb0c887fbc5298b9cfdda236a98d Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Thu, 27 Aug 1998 14:51:55 +0000 Subject: [PATCH] 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 --- gcc/ChangeLog | 10 ++++++++++ gcc/frame.c | 33 ++++++++++++++++++++++++++++++++- gcc/gthr.h | 8 +++++++- 3 files changed, 49 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 81e7ea281e4..d73a8cb0f5b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +Wed Aug 26 17:13:37 1998 Tom Tromey + + * 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 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 . 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; diff --git a/gcc/gthr.h b/gcc/gthr.h index d1028cb58e9..7511e35a7ab 100644 --- a/gcc/gthr.h +++ b/gcc/gthr.h @@ -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: