aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorTeemu Torma <tot@trema.com>1998-03-11 12:07:25 +0000
committerJim Wilson <wilson@gcc.gnu.org>1998-03-11 04:07:25 -0800
commit754d1a92e65d7a8fdfdc36e2b72e8abfdcf70f5b (patch)
tree722397066de1f2780c4301c0a26524b7d9b93805 /gcc
parentffacfc7cb67870796368b9dfa000d0e1f36ab879 (diff)
downloadgcc-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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog10
-rw-r--r--gcc/gthr-solaris.h12
-rw-r--r--gcc/gthr.h3
-rw-r--r--gcc/libgcc2.c6
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;
diff --git a/gcc/gthr.h b/gcc/gthr.h
index 54ad6b0..9c53654 100644
--- a/gcc/gthr.h
+++ b/gcc/gthr.h
@@ -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;