X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=gcc%2Fgthr-vxworks.h;h=d4da14ef49295674f6dfc9fd87436223764f5f49;hb=d4fa0ca0a7405b4a025b4d61cd2bf8fcf2b86d26;hp=5ff5234219fcd2f7024225d1d3703103e8746a67;hpb=67ce556b47830dd825524e8370969b814c355216;p=pf3gnuchains%2Fgcc-fork.git diff --git a/gcc/gthr-vxworks.h b/gcc/gthr-vxworks.h index 5ff5234219f..d4da14ef492 100644 --- a/gcc/gthr-vxworks.h +++ b/gcc/gthr-vxworks.h @@ -1,13 +1,13 @@ /* Threads compatibility routines for libgcc2 and libobjc for VxWorks. */ /* Compile this one with gcc. */ -/* Copyright (C) 1997, 1999, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1997, 1999, 2000, 2008, 2009 Free Software Foundation, Inc. Contributed by Mike Stump . This file is part of GCC. 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 +Software Foundation; either version 3, or (at your option) any later version. GCC is distributed in the hope that it will be useful, but WITHOUT ANY @@ -15,17 +15,14 @@ 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 GCC; see the file COPYING. If not, write to the Free -Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA -02110-1301, USA. */ +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. -/* As a special exception, if you link this library with other files, - some of which are compiled with GCC, to produce an executable, - this library does not by itself cause the resulting executable - to be covered by the GNU General Public License. - This exception does not however invalidate any other reasons why - the executable file might be covered by the GNU General Public License. */ +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ #ifndef GCC_GTHR_VXWORKS_H #define GCC_GTHR_VXWORKS_H @@ -36,6 +33,15 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA #include "gthr-posix.h" #else +#ifdef __cplusplus +#define UNUSED(x) +#else +#define UNUSED(x) x __attribute__((unused)) +#endif + +#ifdef __cplusplus +extern "C" { +#endif #define __GTHREADS 1 #define __gthread_active_p() 1 @@ -57,6 +63,12 @@ __gthread_mutex_init_function (__gthread_mutex_t *mutex) } static inline int +__gthread_mutex_destroy (__gthread_mutex_t * UNUSED(mutex)) +{ + return 0; +} + +static inline int __gthread_mutex_lock (__gthread_mutex_t *mutex) { return semTake (*mutex, WAIT_FOREVER); @@ -103,14 +115,35 @@ __gthread_recursive_mutex_unlock (__gthread_recursive_mutex_t *mutex) typedef struct { +#if !defined(__RTP__) +#if defined(__PPC__) + __attribute ((aligned (__alignof (unsigned)))) +#endif volatile unsigned char busy; +#endif volatile unsigned char done; +#if !defined(__RTP__) && defined(__PPC__) + /* PPC's test-and-set implementation requires a 4 byte aligned + object, of which it only sets the first byte. We use padding + here, in order to maintain some amount of backwards + compatibility. Without this padding, gthread_once objects worked + by accident because they happen to be static objects and the ppc + port automatically increased their alignment to 4 bytes. */ + unsigned char pad1; + unsigned char pad2; +#endif } __gthread_once_t; -#define __GTHREAD_ONCE_INIT { 0, 0 } +#if defined (__RTP__) +# define __GTHREAD_ONCE_INIT { 0 } +#elif defined (__PPC__) +# define __GTHREAD_ONCE_INIT { 0, 0, 0, 0 } +#else +# define __GTHREAD_ONCE_INIT { 0, 0 } +#endif -extern int __gthread_once (__gthread_once_t *once, void (*func)(void)); +extern int __gthread_once (__gthread_once_t *__once, void (*__func)(void)); /* Thread-specific data requires a great deal of effort, since VxWorks is not really set up for it. See config/vxlib.c for the gory @@ -119,11 +152,17 @@ extern int __gthread_once (__gthread_once_t *once, void (*func)(void)); typedef unsigned int __gthread_key_t; -extern int __gthread_key_create (__gthread_key_t *keyp, void (*dtor)(void *)); -extern int __gthread_key_delete (__gthread_key_t key); +extern int __gthread_key_create (__gthread_key_t *__keyp, void (*__dtor)(void *)); +extern int __gthread_key_delete (__gthread_key_t __key); + +extern void *__gthread_getspecific (__gthread_key_t __key); +extern int __gthread_setspecific (__gthread_key_t __key, void *__ptr); -extern void *__gthread_getspecific (__gthread_key_t key); -extern int __gthread_setspecific (__gthread_key_t key, void *ptr); +#undef UNUSED + +#ifdef __cplusplus +} +#endif #endif /* not _LIBOBJC */