OSDN Git Service

* config/s390/s390.c (s390_emit_epilogue): Always restore registers
[pf3gnuchains/gcc-fork.git] / gcc / gthr-dce.h
index 761b948..957f227 100644 (file)
@@ -1,23 +1,23 @@
 
 /* Compile this one with gcc.  */
-/* Copyright (C) 1997, 1999, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1997, 1999, 2000, 2001 Free Software Foundation, Inc.
 
-This file is part of GNU CC.
+This file is part of GCC.
 
-GNU CC is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 2, or (at your option) any later
+version.
 
-GNU CC is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
 
 You should have received a copy of the GNU General Public License
-along with GNU CC; see the file COPYING.  If not, write to
-the Free Software Foundation, 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA.  */
+along with GCC; see the file COPYING.  If not, write to the Free
+Software Foundation, 59 Temple Place - Suite 330, Boston, MA
+02111-1307, USA.  */
 
 /* As a special exception, if you link this library with other files,
    some of which are compiled with GCC, to produce an executable,
@@ -26,23 +26,38 @@ Boston, MA 02111-1307, USA.  */
    This exception does not however invalidate any other reasons why
    the executable file might be covered by the GNU General Public License.  */
 
-#ifndef __gthr_dce_h
-#define __gthr_dce_h
+#ifndef GCC_GTHR_DCE_H
+#define GCC_GTHR_DCE_H
 
+/* If _DCE_THREADS is not defined, then we're building the single
+   threaded version of the libraries and do not want to reference
+   anything related to pthreads or dce.  */
+#ifndef _DCE_THREADS
+#include "gthr-single.h"
+#else
 /* DCE threads interface.
    DCE threads are based on POSIX threads draft 4, and many things
-   have changed since then. */
+   have changed since then.  */
 
 #define __GTHREADS 1
 
 #include <pthread.h>
 
+#ifdef __cplusplus
+#define UNUSED(x) x
+#else
+#define UNUSED(x) x __attribute__((unused))
+#endif
+
 typedef pthread_key_t __gthread_key_t;
 typedef pthread_once_t __gthread_once_t;
 typedef pthread_mutex_t __gthread_mutex_t;
 
 #define __GTHREAD_ONCE_INIT pthread_once_init
-/* Howto define __GTHREAD_MUTEX_INIT? */
+
+#define __GTHREAD_MUTEX_INIT_FUNCTION __gthread_mutex_init_function
+
+#define __GTHREAD_MUTEX_INIT_DEFAULT pthread_once_init
 
 #if SUPPORTS_WEAK && GTHREAD_USE_WEAK
 
@@ -53,13 +68,13 @@ typedef pthread_mutex_t __gthread_mutex_t;
 #pragma weak pthread_getspecific
 #pragma weak pthread_setspecific
 #pragma weak pthread_create
-
+#pragma weak pthread_mutex_init
 #pragma weak pthread_mutex_lock
 #pragma weak pthread_mutex_trylock
 #pragma weak pthread_mutex_unlock
 
 #ifdef _LIBOBJC
-/* Objective C. */
+/* Objective C.  */
 #pragma weak pthread_cond_broadcast
 #pragma weak pthread_cond_destroy
 #pragma weak pthread_cond_init
@@ -67,17 +82,15 @@ typedef pthread_mutex_t __gthread_mutex_t;
 #pragma weak pthread_cond_wait
 #pragma weak pthread_exit
 #pragma weak pthread_getunique_np
-#pragma weak pthread_mutex_init
 #pragma weak pthread_mutex_destroy
 #pragma weak pthread_self
 #pragma weak pthread_yield
 #endif
 
-static void *__gthread_active_ptr = &pthread_create;
-
 static inline int
 __gthread_active_p (void)
 {
+  static void *const __gthread_active_ptr = (void *) &pthread_create;
   return __gthread_active_ptr != 0;
 }
 
@@ -101,7 +114,7 @@ static void *thread_local_storage = NULL;
 
 /* Backend initialization functions */
 
-/* Initialize the threads subsystem. */
+/* Initialize the threads subsystem.  */
 static inline int
 __gthread_objc_init_thread_system(void)
 {
@@ -112,7 +125,7 @@ __gthread_objc_init_thread_system(void)
     return -1;
 }
 
-/* Close the threads subsystem. */
+/* Close the threads subsystem.  */
 static inline int
 __gthread_objc_close_thread_system(void)
 {
@@ -124,7 +137,7 @@ __gthread_objc_close_thread_system(void)
 
 /* Backend thread functions */
 
-/* Create a new thread of execution. */
+/* Create a new thread of execution.  */
 static inline objc_thread_t
 __gthread_objc_thread_detach(void (*func)(void *), void *arg)
 {
@@ -139,7 +152,7 @@ __gthread_objc_thread_detach(void (*func)(void *), void *arg)
     {
       /* ??? May not work! (64bit) */
       thread_id = *(objc_thread_t *)&new_thread_handle;
-      pthread_detach(&new_thread_handle); /* Fully detach thread. */
+      pthread_detach(&new_thread_handle); /* Fully detach thread.  */
     }
   else
     thread_id = NULL;
@@ -147,7 +160,7 @@ __gthread_objc_thread_detach(void (*func)(void *), void *arg)
   return thread_id;
 }
 
-/* Set the current thread's priority. */
+/* Set the current thread's priority.  */
 static inline int
 __gthread_objc_thread_set_priority(int priority)
 {
@@ -170,7 +183,7 @@ __gthread_objc_thread_set_priority(int priority)
       break;
     }
     
-  /* Change the priority. */
+  /* Change the priority.  */
   if (pthread_setprio(pthread_self(), sys_priority) >= 0)
     return 0;
   else
@@ -178,7 +191,7 @@ __gthread_objc_thread_set_priority(int priority)
     return -1;
 }
 
-/* Return the current thread's priority. */
+/* Return the current thread's priority.  */
 static inline int
 __gthread_objc_thread_get_priority(void)
 {
@@ -204,7 +217,7 @@ __gthread_objc_thread_get_priority(void)
     return OBJC_THREAD_INTERACTIVE_PRIORITY;
 }
 
-/* Yield our process time to another thread. */
+/* Yield our process time to another thread.  */
 static inline void
 __gthread_objc_thread_yield(void)
 {
@@ -212,7 +225,7 @@ __gthread_objc_thread_yield(void)
     pthread_yield();
 }
 
-/* Terminate the current thread. */
+/* Terminate the current thread.  */
 static inline int
 __gthread_objc_thread_exit(void)
 {
@@ -224,7 +237,7 @@ __gthread_objc_thread_exit(void)
   return -1;
 }
 
-/* Returns an integer value which uniquely describes a thread. */
+/* Returns an integer value which uniquely describes a thread.  */
 static inline objc_thread_t
 __gthread_objc_thread_id(void)
 {
@@ -238,7 +251,7 @@ __gthread_objc_thread_id(void)
     return (objc_thread_t)1;
 }
 
-/* Sets the thread's local storage pointer. */
+/* Sets the thread's local storage pointer.  */
 static inline int
 __gthread_objc_thread_set_data(void *value)
 {
@@ -251,7 +264,7 @@ __gthread_objc_thread_set_data(void *value)
     }
 }
 
-/* Returns the thread's local storage pointer. */
+/* Returns the thread's local storage pointer.  */
 static inline void *
 __gthread_objc_thread_get_data(void)
 {
@@ -270,7 +283,7 @@ __gthread_objc_thread_get_data(void)
 
 /* Backend mutex functions */
 
-/* Allocate a mutex. */
+/* Allocate a mutex.  */
 static inline int
 __gthread_objc_mutex_allocate(objc_mutex_t mutex)
 {
@@ -290,7 +303,7 @@ __gthread_objc_mutex_allocate(objc_mutex_t mutex)
   return 0;
 }
 
-/* Deallocate a mutex. */
+/* Deallocate a mutex.  */
 static inline int
 __gthread_objc_mutex_deallocate(objc_mutex_t mutex)
 {
@@ -306,7 +319,7 @@ __gthread_objc_mutex_deallocate(objc_mutex_t mutex)
   return 0;
 }
 
-/* Grab a lock on a mutex. */
+/* Grab a lock on a mutex.  */
 static inline int
 __gthread_objc_mutex_lock(objc_mutex_t mutex)
 {
@@ -316,7 +329,7 @@ __gthread_objc_mutex_lock(objc_mutex_t mutex)
     return 0;
 }
 
-/* Try to grab a lock on a mutex. */
+/* Try to grab a lock on a mutex.  */
 static inline int
 __gthread_objc_mutex_trylock(objc_mutex_t mutex)
 {
@@ -339,23 +352,23 @@ __gthread_objc_mutex_unlock(objc_mutex_t mutex)
 
 /* Backend condition mutex functions */
 
-/* Allocate a condition. */
+/* Allocate a condition.  */
 static inline int
 __gthread_objc_condition_allocate(objc_condition_t condition)
 {
   if (__gthread_active_p ())
-    /* Unimplemented. */
+    /* Unimplemented.  */
     return -1;
   else
     return 0;
 }
 
-/* Deallocate a condition. */
+/* Deallocate a condition.  */
 static inline int
 __gthread_objc_condition_deallocate(objc_condition_t condition)
 {
   if (__gthread_active_p ())
-    /* Unimplemented. */
+    /* Unimplemented.  */
     return -1;
   else
     return 0;
@@ -366,29 +379,29 @@ static inline int
 __gthread_objc_condition_wait(objc_condition_t condition, objc_mutex_t mutex)
 {
   if (__gthread_active_p ())
-    /* Unimplemented. */
+    /* Unimplemented.  */
     return -1;
   else
     return 0;
 }
 
-/* Wake up all threads waiting on this condition. */
+/* Wake up all threads waiting on this condition.  */
 static inline int
 __gthread_objc_condition_broadcast(objc_condition_t condition)
 {
   if (__gthread_active_p ())
-    /* Unimplemented. */
+    /* Unimplemented.  */
     return -1;
   else
     return 0;
 }
 
-/* Wake up one thread waiting on this condition. */
+/* Wake up one thread waiting on this condition.  */
 static inline int
 __gthread_objc_condition_signal(objc_condition_t condition)
 {
   if (__gthread_active_p ())
-    /* Unimplemented. */
+    /* Unimplemented.  */
     return -1;
   else
     return 0;
@@ -412,16 +425,17 @@ __gthread_key_create (__gthread_key_t *key, void (*dtor) (void *))
 }
 
 static inline int
-__gthread_key_dtor (__gthread_key_t key, void *ptr)
+__gthread_key_dtor (UNUSED (__gthread_key_t key), UNUSED (void *ptr))
 {
-  /* Nothing needed. */
+  /* Nothing needed.  */
   return 0;
 }
 
 static inline int
-__gthread_key_delete (__gthread_key_t key)
+__gthread_key_delete (UNUSED (__gthread_key_t key))
 {
-  return pthread_key_delete (key);
+  /* Operation is not supported.  */
+  return -1;
 }
 
 static inline void *
@@ -440,6 +454,13 @@ __gthread_setspecific (__gthread_key_t key, const void *ptr)
   return pthread_setspecific (key, (void *) ptr);
 }
 
+static inline void
+__gthread_mutex_init_function (__gthread_mutex_t *mutex)
+{
+  if (__gthread_active_p ())
+    pthread_mutex_init (mutex, pthread_mutexattr_default);
+}
+
 static inline int
 __gthread_mutex_lock (__gthread_mutex_t *mutex)
 {
@@ -469,4 +490,7 @@ __gthread_mutex_unlock (__gthread_mutex_t *mutex)
 
 #endif /* _LIBOBJC */
 
-#endif /* not __gthr_dce_h */
+#undef UNUSED
+
+#endif
+#endif /* ! GCC_GTHR_DCE_H */