diff options
author | Teemu Torma <tot@trema.com> | 1998-03-11 12:07:25 +0000 |
---|---|---|
committer | Jim Wilson <wilson@gcc.gnu.org> | 1998-03-11 04:07:25 -0800 |
commit | 754d1a92e65d7a8fdfdc36e2b72e8abfdcf70f5b (patch) | |
tree | 722397066de1f2780c4301c0a26524b7d9b93805 | |
parent | ffacfc7cb67870796368b9dfa000d0e1f36ab879 (diff) | |
download | gcc-754d1a92e65d7a8fdfdc36e2b72e8abfdcf70f5b.zip gcc-754d1a92e65d7a8fdfdc36e2b72e8abfdcf70f5b.tar.gz gcc-754d1a92e65d7a8fdfdc36e2b72e8abfdcf70f5b.tar.bz2 |
Patch from Teemu Torma to fix Solaris 2.6 EH failures.
* gthr.h: Changed the comment about return values.
* gthr-solaris.h (__gthread_once): Do not use errno; return the
error number instead of -1.
(__gthread_key_create): Any non-zero return value is an error.
* libgcc2.c (eh_context_initialize): Check for non-zero return
value from __gthread_once.
Check that the value of get_eh_context was really changed.
From-SVN: r18480
-rw-r--r-- | gcc/ChangeLog | 10 | ||||
-rw-r--r-- | gcc/gthr-solaris.h | 12 | ||||
-rw-r--r-- | gcc/gthr.h | 3 | ||||
-rw-r--r-- | gcc/libgcc2.c | 6 |
4 files changed, 22 insertions, 9 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6e9438d..cb234fc 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +Wed Mar 11 12:05:20 1998 Teemu Torma <tot@trema.com> + + * gthr.h: Changed the comment about return values. + * gthr-solaris.h (__gthread_once): Do not use errno; return the + error number instead of -1. + (__gthread_key_create): Any non-zero return value is an error. + * libgcc2.c (eh_context_initialize): Check for non-zero return + value from __gthread_once. + Check that the value of get_eh_context was really changed. + Wed Mar 11 18:26:25 1998 J"orn Rennecke <amylaar@cygnus.co.uk> * sh.h (LOOP_ALIGN): Only align when optimizing. diff --git a/gcc/gthr-solaris.h b/gcc/gthr-solaris.h index 465ecec..a6f669c 100644 --- a/gcc/gthr-solaris.h +++ b/gcc/gthr-solaris.h @@ -88,15 +88,13 @@ __gthread_once (__gthread_once_t *once, void (*func) ()) return -1; if (once == 0 || func == 0) - { - errno = EINVAL; - return -1; - } + return EINVAL; if (once->once == 0) { - if (mutex_lock (&once->mutex) != 0) - return -1; + int status = mutex_lock (&once->mutex); + if (status != 0) + return status; if (once->once == 0) { (*func) (); @@ -113,7 +111,7 @@ __gthread_key_create (__gthread_key_t *key, void (*dtor) (void *)) /* Solaris 2.5 contains thr_* routines no-op in libc, so test if we actually got a reasonable key value, and if not, fail. */ *key = -1; - if (thr_keycreate (key, dtor) == -1 || *key == -1) + if (thr_keycreate (key, dtor) != 0 || *key == -1) return -1; else return 0; @@ -65,7 +65,8 @@ Boston, MA 02111-1307, USA. */ int __gthread_mutex_trylock (__gthread_mutex_t *mutex); int __gthread_mutex_unlock (__gthread_mutex_t *mutex); - All functions returning int should return 0 on success, -1 on error. + All functions returning int should return zero on success or the error + number. If the operation is not supported, -1 is returned. Currently supported threads packages are POSIX threads with -D_PTHREADS diff --git a/gcc/libgcc2.c b/gcc/libgcc2.c index e5ad420..f1032a5 100644 --- a/gcc/libgcc2.c +++ b/gcc/libgcc2.c @@ -3132,7 +3132,11 @@ eh_context_initialize () #if __GTHREADS static __gthread_once_t once = __GTHREAD_ONCE_INIT; - if (__gthread_once (&once, eh_threads_initialize) == -1) + /* Make sure that get_eh_context does not point to us anymore. + Some systems have dummy thread routines in their libc that + return a success (Solaris 2.6 for example). */ + if (__gthread_once (&once, eh_threads_initialize) != 0 + || get_eh_context == &eh_context_initialize) { /* Use static version of EH context. */ get_eh_context = &eh_context_static; |