111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* Threads compatibility routines for libgcc2 and libobjc.  */
211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* Compile this one with gcc.  */
311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* Copyright (C) 1997-2014 Free Software Foundation, Inc.
411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
511cd02dfb91661c65134cac258cf5924270e9d2Dan AlbertThis file is part of GCC.
611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
711cd02dfb91661c65134cac258cf5924270e9d2Dan AlbertGCC is free software; you can redistribute it and/or modify it under
811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertthe terms of the GNU General Public License as published by the Free
911cd02dfb91661c65134cac258cf5924270e9d2Dan AlbertSoftware Foundation; either version 3, or (at your option) any later
1011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertversion.
1111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
1211cd02dfb91661c65134cac258cf5924270e9d2Dan AlbertGCC is distributed in the hope that it will be useful, but WITHOUT ANY
1311cd02dfb91661c65134cac258cf5924270e9d2Dan AlbertWARRANTY; without even the implied warranty of MERCHANTABILITY or
1411cd02dfb91661c65134cac258cf5924270e9d2Dan AlbertFITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
1511cd02dfb91661c65134cac258cf5924270e9d2Dan Albertfor more details.
1611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
1711cd02dfb91661c65134cac258cf5924270e9d2Dan AlbertUnder Section 7 of GPL version 3, you are granted additional
1811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertpermissions described in the GCC Runtime Library Exception, version
1911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert3.1, as published by the Free Software Foundation.
2011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
2111cd02dfb91661c65134cac258cf5924270e9d2Dan AlbertYou should have received a copy of the GNU General Public License and
2211cd02dfb91661c65134cac258cf5924270e9d2Dan Alberta copy of the GCC Runtime Library Exception along with this program;
2311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertsee the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
2411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert<http://www.gnu.org/licenses/>.  */
2511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
2611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifndef _GLIBCXX_GCC_GTHR_SINGLE_H
2711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define _GLIBCXX_GCC_GTHR_SINGLE_H
2811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
2911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* Just provide compatibility for mutex handling.  */
3011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
3111cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef int __gthread_key_t;
3211cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef int __gthread_once_t;
3311cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef int __gthread_mutex_t;
3411cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef int __gthread_recursive_mutex_t;
3511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
3611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define __GTHREAD_ONCE_INIT 0
3711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define __GTHREAD_MUTEX_INIT 0
3811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define __GTHREAD_MUTEX_INIT_FUNCTION(mx)
3911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define __GTHREAD_RECURSIVE_MUTEX_INIT 0
4011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
4111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define _GLIBCXX_UNUSED __attribute__((unused))
4211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
4311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifdef _LIBOBJC
4411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
4511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* Thread local storage for a single thread */
4611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstatic void *thread_local_storage = NULL;
4711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
4811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* Backend initialization functions */
4911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
5011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* Initialize the threads subsystem.  */
5111cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstatic inline int
5211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert__gthread_objc_init_thread_system (void)
5311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{
5411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  /* No thread support available */
5511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  return -1;
5611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}
5711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
5811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* Close the threads subsystem.  */
5911cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstatic inline int
6011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert__gthread_objc_close_thread_system (void)
6111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{
6211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  /* No thread support available */
6311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  return -1;
6411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}
6511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
6611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* Backend thread functions */
6711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
6811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* Create a new thread of execution.  */
6911cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstatic inline objc_thread_t
7011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert__gthread_objc_thread_detach (void (* func)(void *), void * arg _GLIBCXX_UNUSED)
7111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{
7211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  /* No thread support available */
7311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  return NULL;
7411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}
7511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
7611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* Set the current thread's priority.  */
7711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstatic inline int
7811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert__gthread_objc_thread_set_priority (int priority _GLIBCXX_UNUSED)
7911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{
8011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  /* No thread support available */
8111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  return -1;
8211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}
8311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
8411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* Return the current thread's priority.  */
8511cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstatic inline int
8611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert__gthread_objc_thread_get_priority (void)
8711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{
8811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  return OBJC_THREAD_INTERACTIVE_PRIORITY;
8911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}
9011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
9111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* Yield our process time to another thread.  */
9211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstatic inline void
9311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert__gthread_objc_thread_yield (void)
9411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{
9511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  return;
9611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}
9711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
9811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* Terminate the current thread.  */
9911cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstatic inline int
10011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert__gthread_objc_thread_exit (void)
10111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{
10211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  /* No thread support available */
10311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  /* Should we really exit the program */
10411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  /* exit (&__objc_thread_exit_status); */
10511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  return -1;
10611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}
10711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
10811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* Returns an integer value which uniquely describes a thread.  */
10911cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstatic inline objc_thread_t
11011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert__gthread_objc_thread_id (void)
11111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{
11211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  /* No thread support, use 1.  */
11311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  return (objc_thread_t) 1;
11411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}
11511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
11611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* Sets the thread's local storage pointer.  */
11711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstatic inline int
11811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert__gthread_objc_thread_set_data (void *value)
11911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{
12011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  thread_local_storage = value;
12111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  return 0;
12211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}
12311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
12411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* Returns the thread's local storage pointer.  */
12511cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstatic inline void *
12611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert__gthread_objc_thread_get_data (void)
12711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{
12811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  return thread_local_storage;
12911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}
13011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
13111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* Backend mutex functions */
13211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
13311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* Allocate a mutex.  */
13411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstatic inline int
13511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert__gthread_objc_mutex_allocate (objc_mutex_t mutex _GLIBCXX_UNUSED)
13611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{
13711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  return 0;
13811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}
13911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
14011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* Deallocate a mutex.  */
14111cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstatic inline int
14211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert__gthread_objc_mutex_deallocate (objc_mutex_t mutex _GLIBCXX_UNUSED)
14311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{
14411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  return 0;
14511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}
14611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
14711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* Grab a lock on a mutex.  */
14811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstatic inline int
14911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert__gthread_objc_mutex_lock (objc_mutex_t mutex _GLIBCXX_UNUSED)
15011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{
15111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  /* There can only be one thread, so we always get the lock */
15211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  return 0;
15311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}
15411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
15511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* Try to grab a lock on a mutex.  */
15611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstatic inline int
15711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert__gthread_objc_mutex_trylock (objc_mutex_t mutex _GLIBCXX_UNUSED)
15811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{
15911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  /* There can only be one thread, so we always get the lock */
16011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  return 0;
16111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}
16211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
16311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* Unlock the mutex */
16411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstatic inline int
16511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert__gthread_objc_mutex_unlock (objc_mutex_t mutex _GLIBCXX_UNUSED)
16611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{
16711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  return 0;
16811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}
16911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
17011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* Backend condition mutex functions */
17111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
17211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* Allocate a condition.  */
17311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstatic inline int
17411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert__gthread_objc_condition_allocate (objc_condition_t condition _GLIBCXX_UNUSED)
17511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{
17611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  return 0;
17711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}
17811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
17911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* Deallocate a condition.  */
18011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstatic inline int
18111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert__gthread_objc_condition_deallocate (objc_condition_t condition _GLIBCXX_UNUSED)
18211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{
18311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  return 0;
18411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}
18511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
18611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* Wait on the condition */
18711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstatic inline int
18811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert__gthread_objc_condition_wait (objc_condition_t condition _GLIBCXX_UNUSED,
18911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert			       objc_mutex_t mutex _GLIBCXX_UNUSED)
19011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{
19111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  return 0;
19211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}
19311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
19411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* Wake up all threads waiting on this condition.  */
19511cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstatic inline int
19611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert__gthread_objc_condition_broadcast (objc_condition_t condition _GLIBCXX_UNUSED)
19711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{
19811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  return 0;
19911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}
20011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
20111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* Wake up one thread waiting on this condition.  */
20211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstatic inline int
20311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert__gthread_objc_condition_signal (objc_condition_t condition _GLIBCXX_UNUSED)
20411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{
20511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  return 0;
20611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}
20711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
20811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#else /* _LIBOBJC */
20911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
21011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstatic inline int
21111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert__gthread_active_p (void)
21211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{
21311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  return 0;
21411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}
21511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
21611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstatic inline int
21711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert__gthread_once (__gthread_once_t *__once _GLIBCXX_UNUSED, void (*__func) (void) _GLIBCXX_UNUSED)
21811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{
21911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  return 0;
22011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}
22111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
22211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstatic inline int _GLIBCXX_UNUSED
22311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert__gthread_key_create (__gthread_key_t *__key _GLIBCXX_UNUSED, void (*__func) (void *) _GLIBCXX_UNUSED)
22411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{
22511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  return 0;
22611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}
22711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
22811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstatic int _GLIBCXX_UNUSED
22911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert__gthread_key_delete (__gthread_key_t __key _GLIBCXX_UNUSED)
23011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{
23111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  return 0;
23211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}
23311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
23411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstatic inline void *
23511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert__gthread_getspecific (__gthread_key_t __key _GLIBCXX_UNUSED)
23611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{
23711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  return 0;
23811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}
23911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
24011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstatic inline int
24111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert__gthread_setspecific (__gthread_key_t __key _GLIBCXX_UNUSED, const void *__v _GLIBCXX_UNUSED)
24211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{
24311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  return 0;
24411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}
24511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
24611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstatic inline int
24711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert__gthread_mutex_destroy (__gthread_mutex_t *__mutex _GLIBCXX_UNUSED)
24811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{
24911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  return 0;
25011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}
25111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
25211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstatic inline int
25311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert__gthread_mutex_lock (__gthread_mutex_t *__mutex _GLIBCXX_UNUSED)
25411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{
25511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  return 0;
25611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}
25711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
25811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstatic inline int
25911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert__gthread_mutex_trylock (__gthread_mutex_t *__mutex _GLIBCXX_UNUSED)
26011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{
26111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  return 0;
26211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}
26311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
26411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstatic inline int
26511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert__gthread_mutex_unlock (__gthread_mutex_t *__mutex _GLIBCXX_UNUSED)
26611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{
26711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  return 0;
26811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}
26911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
27011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstatic inline int
27111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert__gthread_recursive_mutex_lock (__gthread_recursive_mutex_t *__mutex)
27211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{
27311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  return __gthread_mutex_lock (__mutex);
27411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}
27511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
27611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstatic inline int
27711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert__gthread_recursive_mutex_trylock (__gthread_recursive_mutex_t *__mutex)
27811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{
27911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  return __gthread_mutex_trylock (__mutex);
28011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}
28111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
28211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstatic inline int
28311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert__gthread_recursive_mutex_unlock (__gthread_recursive_mutex_t *__mutex)
28411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{
28511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  return __gthread_mutex_unlock (__mutex);
28611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}
28711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
28811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstatic inline int
28911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert__gthread_recursive_mutex_destroy (__gthread_recursive_mutex_t *__mutex)
29011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{
29111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  return __gthread_mutex_destroy (__mutex);
29211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}
29311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
29411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif /* _LIBOBJC */
29511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
29611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#undef _GLIBCXX_UNUSED
29711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
29811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif /* ! _GLIBCXX_GCC_GTHR_SINGLE_H */
299