diff -crN gcc-3.2.3.org/gcc/configure gcc-3.2.3/gcc/configure *** gcc-3.2.3.org/gcc/configure Tue Feb 4 09:17:46 2003 --- gcc-3.2.3/gcc/configure Tue Nov 4 10:56:50 2003 *************** *** 938,944 **** target_thread_file='' ;; xdecosf1 | xirix | xmach | xos2 | xposix | xpthreads | xsingle | \ ! xsolaris | xwin32 | xdce | xrtems| xvxworks | xaix) target_thread_file=$enable_threads_flag ;; *) --- 938,944 ---- target_thread_file='' ;; xdecosf1 | xirix | xmach | xos2 | xposix | xpthreads | xsingle | \ ! xsolaris | xwin32 | xdce | xrtems| xvxworks | xaix | xtoppers) target_thread_file=$enable_threads_flag ;; *) diff -crN gcc-3.2.3.org/gcc/configure.in gcc-3.2.3/gcc/configure.in *** gcc-3.2.3.org/gcc/configure.in Tue Feb 4 09:17:40 2003 --- gcc-3.2.3/gcc/configure.in Tue Nov 4 10:57:01 2003 *************** *** 300,306 **** target_thread_file='' ;; xdecosf1 | xirix | xmach | xos2 | xposix | xpthreads | xsingle | \ ! xsolaris | xwin32 | xdce | xrtems| xvxworks | xaix) target_thread_file=$enable_threads_flag ;; *) --- 300,306 ---- target_thread_file='' ;; xdecosf1 | xirix | xmach | xos2 | xposix | xpthreads | xsingle | \ ! xsolaris | xwin32 | xdce | xrtems| xvxworks | xaix | xtoppers) target_thread_file=$enable_threads_flag ;; *) diff -crN gcc-3.2.3.org/gcc/gthr-toppers.h gcc-3.2.3/gcc/gthr-toppers.h *** gcc-3.2.3.org/gcc/gthr-toppers.h Thu Jan 1 09:00:00 1970 --- gcc-3.2.3/gcc/gthr-toppers.h Wed Oct 29 12:20:09 2003 *************** *** 0 **** --- 1,303 ---- + /* Threads compatibility routines for libgcc2 and libobjc for TOPPERS kernel */ + /* Compile this one with gcc. */ + /* Copyright (C) 1997, 1999, 2000, 2002 Free Software Foundation, Inc. + Copyright (C) 2003 TAKAGI Nobuhisa + + 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 + version. + + 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 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, + 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. */ + + #ifndef GCC_GTHR_TOPPERS_H + #define GCC_GTHR_TOPPERS_H + + #ifdef _LIBOBJC + + /* Thread local storage for a single thread */ + static void *thread_local_storage = NULL; + + /* Backend initialization functions */ + + /* Initialize the threads subsystem. */ + int + __gthread_objc_init_thread_system(void) + { + /* No thread support available */ + return -1; + } + + /* Close the threads subsystem. */ + int + __gthread_objc_close_thread_system(void) + { + /* No thread support available */ + return -1; + } + + /* Backend thread functions */ + + /* Create a new thread of execution. */ + objc_thread_t + __gthread_objc_thread_detach(void (*_func)(void *arg), void *arg) + { + /* No thread support available */ + return NULL; + } + + /* Set the current thread's priority. */ + int + __gthread_objc_thread_set_priority(int priority) + { + /* No thread support available */ + return -1; + } + + /* Return the current thread's priority. */ + int + __gthread_objc_thread_get_priority(void) + { + return OBJC_THREAD_INTERACTIVE_PRIORITY; + } + + /* Yield our process time to another thread. */ + void + __gthread_objc_thread_yield(void) + { + return; + } + + /* Terminate the current thread. */ + int + __gthread_objc_thread_exit(void) + { + /* No thread support available */ + /* Should we really exit the program */ + /* exit(&__objc_thread_exit_status); */ + return -1; + } + + /* Returns an integer value which uniquely describes a thread. */ + objc_thread_t + __gthread_objc_thread_id(void) + { + /* No thread support, use 1. */ + return (objc_thread_t)1; + } + + /* Sets the thread's local storage pointer. */ + int + __gthread_objc_thread_set_data(void *value) + { + thread_local_storage = value; + return 0; + } + + /* Returns the thread's local storage pointer. */ + void * + __gthread_objc_thread_get_data(void) + { + return thread_local_storage; + } + + /* Backend mutex functions */ + + /* Allocate a mutex. */ + int + __gthread_objc_mutex_allocate(objc_mutex_t mutex) + { + return 0; + } + + /* Deallocate a mutex. */ + int + __gthread_objc_mutex_deallocate(objc_mutex_t mutex) + { + return 0; + } + + /* Grab a lock on a mutex. */ + int + __gthread_objc_mutex_lock(objc_mutex_t mutex) + { + /* There can only be one thread, so we always get the lock */ + return 0; + } + + /* Try to grab a lock on a mutex. */ + int + __gthread_objc_mutex_trylock(objc_mutex_t mutex) + { + /* There can only be one thread, so we always get the lock */ + return 0; + } + + /* Unlock the mutex */ + int + __gthread_objc_mutex_unlock(objc_mutex_t mutex) + { + return 0; + } + + /* Backend condition mutex functions */ + + /* Allocate a condition. */ + int + __gthread_objc_condition_allocate(objc_condition_t condition) + { + return 0; + } + + /* Deallocate a condition. */ + int + __gthread_objc_condition_deallocate(objc_condition_t condition) + { + return 0; + } + + /* Wait on the condition */ + int + __gthread_objc_condition_wait(objc_condition_t condition, objc_mutex_t mutex) + { + return 0; + } + + /* Wake up all threads waiting on this condition. */ + int + __gthread_objc_condition_broadcast(objc_condition_t condition) + { + return 0; + } + + /* Wake up one thread waiting on this condition. */ + int + __gthread_objc_condition_signal(objc_condition_t condition) + { + return 0; + } + + #else /* _LIBOBJC */ + + #ifdef __cplusplus + extern "C" { + #endif + + #define __GTHREADS 1 + + #ifdef __cplusplus + #define __throw() throw() + #else + #define __throw() + #endif + + typedef int _toppers_cxxrt_sync_t; + typedef volatile char _toppers_cxxrt_once_t; + struct _toppers_cxxrt_tls + { + void **_data; + void (*_dtor)(void*); + }; + + extern int _toppers_cxxrt_once (_toppers_cxxrt_once_t *, void (*) (void)) __throw(); + extern int _toppers_cxxrt_key_create (struct _toppers_cxxrt_tls **, void (*) (void*)) __throw(); + extern int _toppers_cxxrt_key_delete (struct _toppers_cxxrt_tls *) __throw(); + extern int _toppers_cxxrt_lock (_toppers_cxxrt_sync_t *) __throw(); + extern int _toppers_cxxrt_trylock (_toppers_cxxrt_sync_t *) __throw(); + extern int _toppers_cxxrt_unlock (_toppers_cxxrt_sync_t *) __throw(); + extern int _toppers_cxxrt_get_tskid (void) __throw(); + + typedef struct _toppers_cxxrt_tls * __gthread_key_t; + typedef _toppers_cxxrt_sync_t __gthread_mutex_t; + typedef _toppers_cxxrt_once_t __gthread_once_t; + + #define __GTHREAD_MUTEX_INIT 0 + #define __GTHREAD_ONCE_INIT 0 + + static inline int + __gthread_active_p (void) + { + return 1; + } + + static inline int + __gthread_once (__gthread_once_t *_once, void (*_func) (void)) + { + return _toppers_cxxrt_once (_once, _func); + } + + /* This only works for the code in libgcc2.c. */ + + static inline int + __gthread_key_create (__gthread_key_t *_key, void (*_dtor) (void *)) + { + return _toppers_cxxrt_key_create (_key, _dtor); + } + + static inline int + __gthread_setspecific(__gthread_key_t _key, const void *_ptr) + { + _key->_data[_toppers_cxxrt_get_tskid()] = (void*)_ptr; + return 0; + } + + static inline int + __gthread_key_dtor (__gthread_key_t _key, void *_ptr) + { + return 0; + } + + static inline int + __gthread_key_delete (__gthread_key_t _key) + { + return _toppers_cxxrt_key_delete (_key); + } + + static inline void * + __gthread_getspecific (__gthread_key_t _key) + { + return _key->_data[_toppers_cxxrt_get_tskid()]; + } + + static inline int + __gthread_mutex_lock (__gthread_mutex_t *_mutex) + { + return _toppers_cxxrt_lock (_mutex); + } + + static inline int + __gthread_mutex_trylock (__gthread_mutex_t *_mutex) + { + return _toppers_cxxrt_trylock (_mutex); + } + + static inline int + __gthread_mutex_unlock (__gthread_mutex_t *_mutex) + { + return _toppers_cxxrt_unlock (_mutex); + } + + #ifdef __cplusplus + } + #endif + + #endif /* _LIBOBJC */ + + #endif /* ! GCC_GTHR_TOPPERS_H */ diff -crN gcc-3.2.3.org/gcc/version.c gcc-3.2.3/gcc/version.c *** gcc-3.2.3.org/gcc/version.c Tue Apr 22 15:16:02 2003 --- gcc-3.2.3/gcc/version.c Tue Nov 4 10:58:04 2003 *************** *** 1,4 **** #include "ansidecl.h" #include "version.h" ! const char *const version_string = "3.2.3"; --- 1,4 ---- #include "ansidecl.h" #include "version.h" ! const char *const version_string = "3.2.3 (TOPPERS special)";