1*d19d7d58SLionel Sambuc /* This file is automatically generated. DO NOT EDIT! */ 2*d19d7d58SLionel Sambuc /* Generated from: NetBSD: mknative-gcc,v 1.66 2012/01/10 12:27:54 skrll Exp */ 3*d19d7d58SLionel Sambuc /* Generated from: NetBSD: mknative.common,v 1.9 2007/02/05 18:26:01 apb Exp */ 4*d19d7d58SLionel Sambuc 5*d19d7d58SLionel Sambuc /* Threads compatibility routines for libgcc2 and libobjc. */ 6*d19d7d58SLionel Sambuc /* Compile this one with gcc. */ 7*d19d7d58SLionel Sambuc /* Copyright (C) 1997, 1999, 2000, 2004, 2008, 2009 8*d19d7d58SLionel Sambuc Free Software Foundation, Inc. 9*d19d7d58SLionel Sambuc 10*d19d7d58SLionel Sambuc This file is part of GCC. 11*d19d7d58SLionel Sambuc 12*d19d7d58SLionel Sambuc GCC is free software; you can redistribute it and/or modify it under 13*d19d7d58SLionel Sambuc the terms of the GNU General Public License as published by the Free 14*d19d7d58SLionel Sambuc Software Foundation; either version 3, or (at your option) any later 15*d19d7d58SLionel Sambuc version. 16*d19d7d58SLionel Sambuc 17*d19d7d58SLionel Sambuc GCC is distributed in the hope that it will be useful, but WITHOUT ANY 18*d19d7d58SLionel Sambuc WARRANTY; without even the implied warranty of MERCHANTABILITY or 19*d19d7d58SLionel Sambuc FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 20*d19d7d58SLionel Sambuc for more details. 21*d19d7d58SLionel Sambuc 22*d19d7d58SLionel Sambuc Under Section 7 of GPL version 3, you are granted additional 23*d19d7d58SLionel Sambuc permissions described in the GCC Runtime Library Exception, version 24*d19d7d58SLionel Sambuc 3.1, as published by the Free Software Foundation. 25*d19d7d58SLionel Sambuc 26*d19d7d58SLionel Sambuc You should have received a copy of the GNU General Public License and 27*d19d7d58SLionel Sambuc a copy of the GCC Runtime Library Exception along with this program; 28*d19d7d58SLionel Sambuc see the files COPYING3 and COPYING.RUNTIME respectively. If not, see 29*d19d7d58SLionel Sambuc <http://www.gnu.org/licenses/>. */ 30*d19d7d58SLionel Sambuc 31*d19d7d58SLionel Sambuc #ifndef _GLIBCXX_GCC_GTHR_SINGLE_H 32*d19d7d58SLionel Sambuc #define _GLIBCXX_GCC_GTHR_SINGLE_H 33*d19d7d58SLionel Sambuc 34*d19d7d58SLionel Sambuc /* Just provide compatibility for mutex handling. */ 35*d19d7d58SLionel Sambuc 36*d19d7d58SLionel Sambuc typedef int __gthread_key_t; 37*d19d7d58SLionel Sambuc typedef int __gthread_once_t; 38*d19d7d58SLionel Sambuc typedef int __gthread_mutex_t; 39*d19d7d58SLionel Sambuc typedef int __gthread_recursive_mutex_t; 40*d19d7d58SLionel Sambuc 41*d19d7d58SLionel Sambuc #define __GTHREAD_ONCE_INIT 0 42*d19d7d58SLionel Sambuc #define __GTHREAD_MUTEX_INIT 0 43*d19d7d58SLionel Sambuc #define __GTHREAD_RECURSIVE_MUTEX_INIT 0 44*d19d7d58SLionel Sambuc 45*d19d7d58SLionel Sambuc #define _GLIBCXX_UNUSED __attribute__((unused)) 46*d19d7d58SLionel Sambuc 47*d19d7d58SLionel Sambuc #ifdef _LIBOBJC 48*d19d7d58SLionel Sambuc 49*d19d7d58SLionel Sambuc /* Thread local storage for a single thread */ 50*d19d7d58SLionel Sambuc static void *thread_local_storage = NULL; 51*d19d7d58SLionel Sambuc 52*d19d7d58SLionel Sambuc /* Backend initialization functions */ 53*d19d7d58SLionel Sambuc 54*d19d7d58SLionel Sambuc /* Initialize the threads subsystem. */ 55*d19d7d58SLionel Sambuc static inline int 56*d19d7d58SLionel Sambuc __gthread_objc_init_thread_system (void) 57*d19d7d58SLionel Sambuc { 58*d19d7d58SLionel Sambuc /* No thread support available */ 59*d19d7d58SLionel Sambuc return -1; 60*d19d7d58SLionel Sambuc } 61*d19d7d58SLionel Sambuc 62*d19d7d58SLionel Sambuc /* Close the threads subsystem. */ 63*d19d7d58SLionel Sambuc static inline int 64*d19d7d58SLionel Sambuc __gthread_objc_close_thread_system (void) 65*d19d7d58SLionel Sambuc { 66*d19d7d58SLionel Sambuc /* No thread support available */ 67*d19d7d58SLionel Sambuc return -1; 68*d19d7d58SLionel Sambuc } 69*d19d7d58SLionel Sambuc 70*d19d7d58SLionel Sambuc /* Backend thread functions */ 71*d19d7d58SLionel Sambuc 72*d19d7d58SLionel Sambuc /* Create a new thread of execution. */ 73*d19d7d58SLionel Sambuc static inline objc_thread_t 74*d19d7d58SLionel Sambuc __gthread_objc_thread_detach (void (* func)(void *), void * arg _GLIBCXX_UNUSED) 75*d19d7d58SLionel Sambuc { 76*d19d7d58SLionel Sambuc /* No thread support available */ 77*d19d7d58SLionel Sambuc return NULL; 78*d19d7d58SLionel Sambuc } 79*d19d7d58SLionel Sambuc 80*d19d7d58SLionel Sambuc /* Set the current thread's priority. */ 81*d19d7d58SLionel Sambuc static inline int 82*d19d7d58SLionel Sambuc __gthread_objc_thread_set_priority (int priority _GLIBCXX_UNUSED) 83*d19d7d58SLionel Sambuc { 84*d19d7d58SLionel Sambuc /* No thread support available */ 85*d19d7d58SLionel Sambuc return -1; 86*d19d7d58SLionel Sambuc } 87*d19d7d58SLionel Sambuc 88*d19d7d58SLionel Sambuc /* Return the current thread's priority. */ 89*d19d7d58SLionel Sambuc static inline int 90*d19d7d58SLionel Sambuc __gthread_objc_thread_get_priority (void) 91*d19d7d58SLionel Sambuc { 92*d19d7d58SLionel Sambuc return OBJC_THREAD_INTERACTIVE_PRIORITY; 93*d19d7d58SLionel Sambuc } 94*d19d7d58SLionel Sambuc 95*d19d7d58SLionel Sambuc /* Yield our process time to another thread. */ 96*d19d7d58SLionel Sambuc static inline void 97*d19d7d58SLionel Sambuc __gthread_objc_thread_yield (void) 98*d19d7d58SLionel Sambuc { 99*d19d7d58SLionel Sambuc return; 100*d19d7d58SLionel Sambuc } 101*d19d7d58SLionel Sambuc 102*d19d7d58SLionel Sambuc /* Terminate the current thread. */ 103*d19d7d58SLionel Sambuc static inline int 104*d19d7d58SLionel Sambuc __gthread_objc_thread_exit (void) 105*d19d7d58SLionel Sambuc { 106*d19d7d58SLionel Sambuc /* No thread support available */ 107*d19d7d58SLionel Sambuc /* Should we really exit the program */ 108*d19d7d58SLionel Sambuc /* exit (&__objc_thread_exit_status); */ 109*d19d7d58SLionel Sambuc return -1; 110*d19d7d58SLionel Sambuc } 111*d19d7d58SLionel Sambuc 112*d19d7d58SLionel Sambuc /* Returns an integer value which uniquely describes a thread. */ 113*d19d7d58SLionel Sambuc static inline objc_thread_t 114*d19d7d58SLionel Sambuc __gthread_objc_thread_id (void) 115*d19d7d58SLionel Sambuc { 116*d19d7d58SLionel Sambuc /* No thread support, use 1. */ 117*d19d7d58SLionel Sambuc return (objc_thread_t) 1; 118*d19d7d58SLionel Sambuc } 119*d19d7d58SLionel Sambuc 120*d19d7d58SLionel Sambuc /* Sets the thread's local storage pointer. */ 121*d19d7d58SLionel Sambuc static inline int 122*d19d7d58SLionel Sambuc __gthread_objc_thread_set_data (void *value) 123*d19d7d58SLionel Sambuc { 124*d19d7d58SLionel Sambuc thread_local_storage = value; 125*d19d7d58SLionel Sambuc return 0; 126*d19d7d58SLionel Sambuc } 127*d19d7d58SLionel Sambuc 128*d19d7d58SLionel Sambuc /* Returns the thread's local storage pointer. */ 129*d19d7d58SLionel Sambuc static inline void * 130*d19d7d58SLionel Sambuc __gthread_objc_thread_get_data (void) 131*d19d7d58SLionel Sambuc { 132*d19d7d58SLionel Sambuc return thread_local_storage; 133*d19d7d58SLionel Sambuc } 134*d19d7d58SLionel Sambuc 135*d19d7d58SLionel Sambuc /* Backend mutex functions */ 136*d19d7d58SLionel Sambuc 137*d19d7d58SLionel Sambuc /* Allocate a mutex. */ 138*d19d7d58SLionel Sambuc static inline int 139*d19d7d58SLionel Sambuc __gthread_objc_mutex_allocate (objc_mutex_t mutex _GLIBCXX_UNUSED) 140*d19d7d58SLionel Sambuc { 141*d19d7d58SLionel Sambuc return 0; 142*d19d7d58SLionel Sambuc } 143*d19d7d58SLionel Sambuc 144*d19d7d58SLionel Sambuc /* Deallocate a mutex. */ 145*d19d7d58SLionel Sambuc static inline int 146*d19d7d58SLionel Sambuc __gthread_objc_mutex_deallocate (objc_mutex_t mutex _GLIBCXX_UNUSED) 147*d19d7d58SLionel Sambuc { 148*d19d7d58SLionel Sambuc return 0; 149*d19d7d58SLionel Sambuc } 150*d19d7d58SLionel Sambuc 151*d19d7d58SLionel Sambuc /* Grab a lock on a mutex. */ 152*d19d7d58SLionel Sambuc static inline int 153*d19d7d58SLionel Sambuc __gthread_objc_mutex_lock (objc_mutex_t mutex _GLIBCXX_UNUSED) 154*d19d7d58SLionel Sambuc { 155*d19d7d58SLionel Sambuc /* There can only be one thread, so we always get the lock */ 156*d19d7d58SLionel Sambuc return 0; 157*d19d7d58SLionel Sambuc } 158*d19d7d58SLionel Sambuc 159*d19d7d58SLionel Sambuc /* Try to grab a lock on a mutex. */ 160*d19d7d58SLionel Sambuc static inline int 161*d19d7d58SLionel Sambuc __gthread_objc_mutex_trylock (objc_mutex_t mutex _GLIBCXX_UNUSED) 162*d19d7d58SLionel Sambuc { 163*d19d7d58SLionel Sambuc /* There can only be one thread, so we always get the lock */ 164*d19d7d58SLionel Sambuc return 0; 165*d19d7d58SLionel Sambuc } 166*d19d7d58SLionel Sambuc 167*d19d7d58SLionel Sambuc /* Unlock the mutex */ 168*d19d7d58SLionel Sambuc static inline int 169*d19d7d58SLionel Sambuc __gthread_objc_mutex_unlock (objc_mutex_t mutex _GLIBCXX_UNUSED) 170*d19d7d58SLionel Sambuc { 171*d19d7d58SLionel Sambuc return 0; 172*d19d7d58SLionel Sambuc } 173*d19d7d58SLionel Sambuc 174*d19d7d58SLionel Sambuc /* Backend condition mutex functions */ 175*d19d7d58SLionel Sambuc 176*d19d7d58SLionel Sambuc /* Allocate a condition. */ 177*d19d7d58SLionel Sambuc static inline int 178*d19d7d58SLionel Sambuc __gthread_objc_condition_allocate (objc_condition_t condition _GLIBCXX_UNUSED) 179*d19d7d58SLionel Sambuc { 180*d19d7d58SLionel Sambuc return 0; 181*d19d7d58SLionel Sambuc } 182*d19d7d58SLionel Sambuc 183*d19d7d58SLionel Sambuc /* Deallocate a condition. */ 184*d19d7d58SLionel Sambuc static inline int 185*d19d7d58SLionel Sambuc __gthread_objc_condition_deallocate (objc_condition_t condition _GLIBCXX_UNUSED) 186*d19d7d58SLionel Sambuc { 187*d19d7d58SLionel Sambuc return 0; 188*d19d7d58SLionel Sambuc } 189*d19d7d58SLionel Sambuc 190*d19d7d58SLionel Sambuc /* Wait on the condition */ 191*d19d7d58SLionel Sambuc static inline int 192*d19d7d58SLionel Sambuc __gthread_objc_condition_wait (objc_condition_t condition _GLIBCXX_UNUSED, 193*d19d7d58SLionel Sambuc objc_mutex_t mutex _GLIBCXX_UNUSED) 194*d19d7d58SLionel Sambuc { 195*d19d7d58SLionel Sambuc return 0; 196*d19d7d58SLionel Sambuc } 197*d19d7d58SLionel Sambuc 198*d19d7d58SLionel Sambuc /* Wake up all threads waiting on this condition. */ 199*d19d7d58SLionel Sambuc static inline int 200*d19d7d58SLionel Sambuc __gthread_objc_condition_broadcast (objc_condition_t condition _GLIBCXX_UNUSED) 201*d19d7d58SLionel Sambuc { 202*d19d7d58SLionel Sambuc return 0; 203*d19d7d58SLionel Sambuc } 204*d19d7d58SLionel Sambuc 205*d19d7d58SLionel Sambuc /* Wake up one thread waiting on this condition. */ 206*d19d7d58SLionel Sambuc static inline int 207*d19d7d58SLionel Sambuc __gthread_objc_condition_signal (objc_condition_t condition _GLIBCXX_UNUSED) 208*d19d7d58SLionel Sambuc { 209*d19d7d58SLionel Sambuc return 0; 210*d19d7d58SLionel Sambuc } 211*d19d7d58SLionel Sambuc 212*d19d7d58SLionel Sambuc #else /* _LIBOBJC */ 213*d19d7d58SLionel Sambuc 214*d19d7d58SLionel Sambuc static inline int 215*d19d7d58SLionel Sambuc __gthread_active_p (void) 216*d19d7d58SLionel Sambuc { 217*d19d7d58SLionel Sambuc return 0; 218*d19d7d58SLionel Sambuc } 219*d19d7d58SLionel Sambuc 220*d19d7d58SLionel Sambuc static inline int 221*d19d7d58SLionel Sambuc __gthread_once (__gthread_once_t *__once _GLIBCXX_UNUSED, void (*__func) (void) _GLIBCXX_UNUSED) 222*d19d7d58SLionel Sambuc { 223*d19d7d58SLionel Sambuc return 0; 224*d19d7d58SLionel Sambuc } 225*d19d7d58SLionel Sambuc 226*d19d7d58SLionel Sambuc static inline int _GLIBCXX_UNUSED 227*d19d7d58SLionel Sambuc __gthread_key_create (__gthread_key_t *__key _GLIBCXX_UNUSED, void (*__func) (void *) _GLIBCXX_UNUSED) 228*d19d7d58SLionel Sambuc { 229*d19d7d58SLionel Sambuc return 0; 230*d19d7d58SLionel Sambuc } 231*d19d7d58SLionel Sambuc 232*d19d7d58SLionel Sambuc static int _GLIBCXX_UNUSED 233*d19d7d58SLionel Sambuc __gthread_key_delete (__gthread_key_t __key _GLIBCXX_UNUSED) 234*d19d7d58SLionel Sambuc { 235*d19d7d58SLionel Sambuc return 0; 236*d19d7d58SLionel Sambuc } 237*d19d7d58SLionel Sambuc 238*d19d7d58SLionel Sambuc static inline void * 239*d19d7d58SLionel Sambuc __gthread_getspecific (__gthread_key_t __key _GLIBCXX_UNUSED) 240*d19d7d58SLionel Sambuc { 241*d19d7d58SLionel Sambuc return 0; 242*d19d7d58SLionel Sambuc } 243*d19d7d58SLionel Sambuc 244*d19d7d58SLionel Sambuc static inline int 245*d19d7d58SLionel Sambuc __gthread_setspecific (__gthread_key_t __key _GLIBCXX_UNUSED, const void *__v _GLIBCXX_UNUSED) 246*d19d7d58SLionel Sambuc { 247*d19d7d58SLionel Sambuc return 0; 248*d19d7d58SLionel Sambuc } 249*d19d7d58SLionel Sambuc 250*d19d7d58SLionel Sambuc static inline int 251*d19d7d58SLionel Sambuc __gthread_mutex_destroy (__gthread_mutex_t *__mutex _GLIBCXX_UNUSED) 252*d19d7d58SLionel Sambuc { 253*d19d7d58SLionel Sambuc return 0; 254*d19d7d58SLionel Sambuc } 255*d19d7d58SLionel Sambuc 256*d19d7d58SLionel Sambuc static inline int 257*d19d7d58SLionel Sambuc __gthread_mutex_lock (__gthread_mutex_t *__mutex _GLIBCXX_UNUSED) 258*d19d7d58SLionel Sambuc { 259*d19d7d58SLionel Sambuc return 0; 260*d19d7d58SLionel Sambuc } 261*d19d7d58SLionel Sambuc 262*d19d7d58SLionel Sambuc static inline int 263*d19d7d58SLionel Sambuc __gthread_mutex_trylock (__gthread_mutex_t *__mutex _GLIBCXX_UNUSED) 264*d19d7d58SLionel Sambuc { 265*d19d7d58SLionel Sambuc return 0; 266*d19d7d58SLionel Sambuc } 267*d19d7d58SLionel Sambuc 268*d19d7d58SLionel Sambuc static inline int 269*d19d7d58SLionel Sambuc __gthread_mutex_unlock (__gthread_mutex_t *__mutex _GLIBCXX_UNUSED) 270*d19d7d58SLionel Sambuc { 271*d19d7d58SLionel Sambuc return 0; 272*d19d7d58SLionel Sambuc } 273*d19d7d58SLionel Sambuc 274*d19d7d58SLionel Sambuc static inline int 275*d19d7d58SLionel Sambuc __gthread_recursive_mutex_lock (__gthread_recursive_mutex_t *__mutex) 276*d19d7d58SLionel Sambuc { 277*d19d7d58SLionel Sambuc return __gthread_mutex_lock (__mutex); 278*d19d7d58SLionel Sambuc } 279*d19d7d58SLionel Sambuc 280*d19d7d58SLionel Sambuc static inline int 281*d19d7d58SLionel Sambuc __gthread_recursive_mutex_trylock (__gthread_recursive_mutex_t *__mutex) 282*d19d7d58SLionel Sambuc { 283*d19d7d58SLionel Sambuc return __gthread_mutex_trylock (__mutex); 284*d19d7d58SLionel Sambuc } 285*d19d7d58SLionel Sambuc 286*d19d7d58SLionel Sambuc static inline int 287*d19d7d58SLionel Sambuc __gthread_recursive_mutex_unlock (__gthread_recursive_mutex_t *__mutex) 288*d19d7d58SLionel Sambuc { 289*d19d7d58SLionel Sambuc return __gthread_mutex_unlock (__mutex); 290*d19d7d58SLionel Sambuc } 291*d19d7d58SLionel Sambuc 292*d19d7d58SLionel Sambuc #endif /* _LIBOBJC */ 293*d19d7d58SLionel Sambuc 294*d19d7d58SLionel Sambuc #undef _GLIBCXX_UNUSED 295*d19d7d58SLionel Sambuc 296*d19d7d58SLionel Sambuc #endif /* ! _GLIBCXX_GCC_GTHR_SINGLE_H */ 297