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