More changes needed.
libgcc/config.host:
Code:
*-*-rdos*)
extra_parts="crtbegin.o crtend.o"
;;
...
i[34567]86-*-rdos*)
tmake_file="$tmake_file i386/t-crtstuff t-crtstuff-pic t-libgcc-pic"
;;
x86_64-*-rdos*)
tmake_file="$tmake_file i386/t-crtstuff t-crtstuff-pic t-libgcc-pic"
;;
The target specific file (under gcc/config/i386/rdos.h)
Code:
/* RDOS uses .exe suffix */
#undef TARGET_EXECUTABLE_SUFFIX
#define TARGET_EXECUTABLE_SUFFIX ".exe"
#define TARGET_OS_CPP_BUILTINS() \
do \
{ \
builtin_define ("__RDOS__"); \
builtin_assert ("system=rdos"); \
} \
while (0)
/* RDOS headers are C++-aware (and often use C++). */
#define NO_IMPLICIT_EXTERN_C
The RDOS thread-interface (probably under libgcc/config/gthr-rdos.h)
Code:
#ifndef GCC_GTHR_RDOS_H
#define GCC_GTHR_RDOS_H
/* RDOS threads specific definitions.
calls functions in rdos.s module */
#define __GTHREADS 1
#ifdef __cplusplus
extern "C" {
#endif
extern int __rdos_thread_once_init (void);
extern int __rdos_thread_once (int handle, void (*func) (void));
extern int __rdos_thread_key_create (int handle, void (*dtor) (void *));
extern int __rdos_thread_key_delete (int handle);
extern void * __rdos_thread_getspecific (int handle);
extern int __rdos_thread_setspecific (int handle, const void *ptr);
extern int __rdos_thread_mutex_init (void);
extern int __rdos_thread_mutex_lock (int handle);
extern int __rdos_thread_mutex_trylock (int handle);
extern int __rdos_thread_mutex_unlock (int handle);
#define __gthread_key_t int
#define __gthread_once_t int
#define __gthread_mutex_t int
#define __gthread_recursive_mutex_t int
#define __GTHREAD_ONCE_INIT 0
#define __GTHREAD_MUTEX_INIT_FUNCTION __gthread_mutex_init_function
#define __GTHREAD_RECURSIVE_MUTEX_INIT_FUNCTION __gthread_mutex_init_function
static inline int
__gthread_active_p (void)
{
return 1;
}
static inline int
__gthread_once (__gthread_once_t *once, void (*func) (void))
{
return __rdos_thread_once (*(int *)once, func);
}
static inline int
__gthread_key_create (__gthread_key_t *key, void (*dtor) (void *))
{
return __rdos_thread_key_create (*(int *)key, dtor);
}
static inline int
__gthread_key_delete (__gthread_key_t key)
{
return __rdos_thread_key_delete ((int)key);
}
static inline void *
__gthread_getspecific (__gthread_key_t key)
{
return __rdos_thread_getspecific ((int)key);
}
static inline int
__gthread_setspecific (__gthread_key_t key, const void *ptr)
{
return __rdos_thread_setspecific ((int)key, ptr);
}
static inline int
__gthread_mutex_lock (__gthread_mutex_t *mutex)
{
return __rdos_thread_mutex_lock (*(int *)mutex);
}
static inline int
__gthread_mutex_trylock (__gthread_mutex_t *mutex)
{
return __rdos_thread_mutex_trylock (*(int *)mutex);
}
static inline int
__gthread_mutex_unlock (__gthread_mutex_t *mutex)
{
return __rdos_thread_mutex_unlock (*(int *)mutex);
}
static inline void
__gthread_mutex_init_function (__gthread_mutex_t *mutex)
{
*mutex = __rdos_thread_mutex_init ();
}
static inline int
__gthread_recursive_mutex_lock (__gthread_recursive_mutex_t *mutex)
{
return __rdos_thread_mutex_lock (*(int *)mutex);
}
static inline int
__gthread_recursive_mutex_trylock (__gthread_recursive_mutex_t *mutex)
{
return __rdos_thread_mutex_trylock (*(int *)mutex);
}
static inline int
__gthread_recursive_mutex_unlock (__gthread_recursive_mutex_t *mutex)
{
return __rdos_thread_mutex_unlock (*(int *)mutex);
}
#ifdef __cplusplus
}
#endif
#endif /* ! GCC_GTHR_RDOS_H */