Index: ChangeLog =================================================================== RCS file: /cvsroot/bdwgc/bdwgc/ChangeLog,v retrieving revision 1.540 diff -u -r1.540 ChangeLog --- ChangeLog 14 Jul 2011 13:43:13 -0000 1.540 +++ ChangeLog 9 Aug 2011 15:26:09 -0000 @@ -1,3 +1,25 @@ +2011-08-09 Jie Liu + + * configure.ac: Add GC_RTEMS_PTHREADS AH_TEMPLATE and configure + for rtems. + * os_dep.c: Add GC_get_stack_base if GC_RTEMS_PTHREADS for rtems. + * pthread_stop_world.c (GC_stop_init): Add ifdef SA_RESTART. + * pthread_stop_world.c (GC_stop_init): Use sigprocmask for rtems + when defined GC_RTEMS_PTHREADS. + * pthread_support.c: Exclued sys/mman.h for rtems. + * pthread_support.c (GC_thr_init): Set default GC_nprocs for + rtems. + * include/gc_config_macros.h: Define GC_RTEMS_PTHREADS for rtems + pthread and define GC_NO_DLOPEN for rtems. + * include/private/gc_locks.h: Define USE_PTHREAD_LOCKS for rtems. + * include/private/gcconfig.h: Use rtems_get_stack_bottom(void) + for InitStackBottom; and use SIGUSR1 for SIG_SUSPEND, SIGUSR2 + for SIG_THR_RESTART on rtems. + * include/private/thread_local_alloc.h: Use USE_PTHREAD_SPECIFIC + for rtems. + * tests/test.c (Init): Use exit(0) for rtems while return(0) for + others. + 2011-07-14 Ivan Maidanski * new_hblk.c (GC_build_fl): Adjust "h" local variable cast type Index: configure.ac =================================================================== RCS file: /cvsroot/bdwgc/bdwgc/configure.ac,v retrieving revision 1.69 diff -u -r1.69 configure.ac --- configure.ac 4 Jul 2011 13:29:55 -0000 1.69 +++ configure.ac 9 Aug 2011 15:27:06 -0000 @@ -93,6 +93,7 @@ AH_TEMPLATE([GC_SOLARIS_THREADS], [Define to support Solaris pthreads.]) AH_TEMPLATE([GC_WIN32_THREADS], [Define to support Win32 threads.]) AH_TEMPLATE([GC_WIN32_PTHREADS], [Define to support win32-pthreads.]) +AH_TEMPLATE([GC_RTEMS_PTHREADS], [Define to support rtems-pthreads.]) dnl System header feature requests. AH_TEMPLATE([_POSIX_C_SOURCE], [The POSIX feature macro.]) @@ -280,6 +281,11 @@ AC_DEFINE(GC_AIX_THREADS) AC_DEFINE(_REENTRANT) ;; + rtems) + THREADS=posix + AC_DEFINE(GC_RTEMS_PTHREADS) + AC_DEFINE(THREAD_LOCAL_ALLOC) + ;; decosf1 | irix | mach | os2 | solaris | dce | vxworks) AC_MSG_ERROR(thread package $THREADS not yet supported) ;; Index: os_dep.c =================================================================== RCS file: /cvsroot/bdwgc/bdwgc/os_dep.c,v retrieving revision 1.125 diff -u -r1.125 os_dep.c --- os_dep.c 5 Jul 2011 17:53:24 -0000 1.125 +++ os_dep.c 9 Aug 2011 15:27:37 -0000 @@ -1351,6 +1351,15 @@ # define HAVE_GET_STACK_BASE #endif /* GC_SOLARIS_THREADS */ +#ifdef GC_RTEMS_PTHREADS + GC_API int GC_CALL GC_get_stack_base(struct GC_stack_base *sb) + { + sb->mem_base = rtems_get_stack_bottom(); + return GC_SUCCESS; + } +# define HAVE_GET_STACK_BASE +#endif /* GC_RTEMS_PTHREADS */ + #ifndef HAVE_GET_STACK_BASE /* Retrieve stack base. */ /* Using the GC_find_limit version is risky. */ Index: pthread_stop_world.c =================================================================== RCS file: /cvsroot/bdwgc/bdwgc/pthread_stop_world.c,v retrieving revision 1.40 diff -u -r1.40 pthread_stop_world.c --- pthread_stop_world.c 16 May 2011 13:12:14 -0000 1.40 +++ pthread_stop_world.c 9 Aug 2011 15:27:38 -0000 @@ -816,7 +816,11 @@ ABORT("sem_init failed"); # endif +# ifdef SA_RESTART act.sa_flags = SA_RESTART +# else + act.sa_flags = 0 +# endif # ifdef SA_SIGINFO | SA_SIGINFO # endif @@ -824,6 +828,11 @@ if (sigfillset(&act.sa_mask) != 0) { ABORT("sigfillset() failed"); } +# ifdef GC_RTEMS_PTHREADS + if(sigprocmask(SIG_UNBLOCK,&act.sa_mask,NULL) !=0) { + ABORT("rtems sigprocmask() failed\n"); + } +# endif GC_remove_allowed_signals(&act.sa_mask); /* SIG_THR_RESTART is set in the resulting mask. */ /* It is unmasked by the handler when necessary. */ Index: pthread_support.c =================================================================== RCS file: /cvsroot/bdwgc/bdwgc/pthread_support.c,v retrieving revision 1.101 diff -u -r1.101 pthread_support.c --- pthread_support.c 5 Jul 2011 17:53:24 -0000 1.101 +++ pthread_support.c 9 Aug 2011 15:27:40 -0000 @@ -52,7 +52,9 @@ # include # include # include +#if !defined(GC_RTEMS_PTHREADS) # include +#endif # include # include # include @@ -953,6 +955,8 @@ GC_nprocs = get_ncpu(); # elif defined(GC_LINUX_THREADS) || defined(GC_DGUX386_THREADS) GC_nprocs = GC_get_nprocs(); +# elif defined(GC_RTEMS_PTHREADS) + if (GC_nprocs <= 0) GC_nprocs = 1; # endif } if (GC_nprocs <= 0) { Index: include/gc_config_macros.h =================================================================== RCS file: /cvsroot/bdwgc/bdwgc/include/gc_config_macros.h,v retrieving revision 1.25 diff -u -r1.25 gc_config_macros.h --- include/gc_config_macros.h 24 Apr 2011 13:09:21 -0000 1.25 +++ include/gc_config_macros.h 9 Aug 2011 15:28:13 -0000 @@ -50,6 +50,9 @@ #if defined(WIN32_THREADS) # define GC_WIN32_THREADS #endif +#if defined(RTEMS_THREADS) +# define GC_RTEMS_PTHREADS +#endif #if defined(USE_LD_WRAP) # define GC_USE_LD_WRAP #endif @@ -65,7 +68,7 @@ || defined(GC_IRIX_THREADS) || defined(GC_LINUX_THREADS) \ || defined(GC_NETBSD_THREADS) || defined(GC_OPENBSD_THREADS) \ || defined(GC_OSF1_THREADS) || defined(GC_SOLARIS_THREADS) \ - || defined(GC_WIN32_THREADS) + || defined(GC_WIN32_THREADS) || defined(GC_RTEMS_PTHREADS) # ifndef GC_THREADS # define GC_THREADS # endif @@ -115,11 +118,15 @@ /* Either posix or native Win32 threads. */ # define GC_WIN32_THREADS # endif +# if defined(__rtems__) && (defined(i386) || defined(__i386__)) +# define GC_RTEMS_PTHREADS +# endif #endif /* GC_THREADS */ #undef GC_PTHREADS #if (!defined(GC_WIN32_THREADS) || defined(GC_WIN32_PTHREADS) \ - || defined(__CYGWIN32__) || defined(__CYGWIN__)) && defined(GC_THREADS) + || defined(GC_RTEMS_PTHREADS) || defined(__CYGWIN32__) \ + || defined(__CYGWIN__)) && defined(GC_THREADS) /* Posix threads. */ # define GC_PTHREADS #endif @@ -289,7 +296,8 @@ #ifdef GC_PTHREADS # if (defined(GC_DARWIN_THREADS) || defined(GC_WIN32_PTHREADS) \ - || defined(__native_client__)) && !defined(GC_NO_DLOPEN) + || defined(__native_client__) || defined(GC_RTEMS_PTHREADS)) \ + && !defined(GC_NO_DLOPEN) /* Either there is no dlopen() or we do not need to intercept it. */ # define GC_NO_DLOPEN # endif Index: include/private/config.h.in =================================================================== RCS file: /cvsroot/bdwgc/bdwgc/include/private/config.h.in,v retrieving revision 1.9 diff -u -r1.9 config.h.in --- include/private/config.h.in 4 Jul 2011 13:29:55 -0000 1.9 +++ include/private/config.h.in 9 Aug 2011 15:28:18 -0000 @@ -87,6 +87,9 @@ /* Define to support Win32 threads. */ #undef GC_WIN32_THREADS +/* Define to support RTEMS pthreads. */ +#undef GC_RTEMS_PTHREADS + /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H Index: include/private/gc_locks.h =================================================================== RCS file: /cvsroot/bdwgc/bdwgc/include/private/gc_locks.h,v retrieving revision 1.26 diff -u -r1.26 gc_locks.h --- include/private/gc_locks.h 4 Jul 2011 13:29:55 -0000 1.26 +++ include/private/gc_locks.h 9 Aug 2011 15:28:19 -0000 @@ -51,6 +51,10 @@ # define USE_PTHREAD_LOCKS # endif +# if defined(GC_RTEMS_PTHREADS) +# define USE_PTHREAD_LOCKS +# endif + # if defined(GC_WIN32_THREADS) && !defined(USE_PTHREAD_LOCKS) # ifndef WIN32_LEAN_AND_MEAN # define WIN32_LEAN_AND_MEAN 1 Index: include/private/gcconfig.h =================================================================== RCS file: /cvsroot/bdwgc/bdwgc/include/private/gcconfig.h,v retrieving revision 1.95 diff -u -r1.95 gcconfig.h --- include/private/gcconfig.h 4 Jul 2011 14:56:16 -0000 1.95 +++ include/private/gcconfig.h 9 Aug 2011 15:28:35 -0000 @@ -1380,10 +1380,13 @@ # include extern int etext[]; extern int end[]; - extern void *InitStackBottom; + void *rtems_get_stack_bottom(void); +# define InitStackBottom rtems_get_stack_bottom() # define DATASTART ((ptr_t)etext) # define DATAEND ((ptr_t)end) # define STACKBOTTOM ((ptr_t)InitStackBottom) +# define SIG_SUSPEND SIGUSR1 +# define SIG_THR_RESTART SIGUSR2 # endif # ifdef DOS4GW # define OS_TYPE "DOS4GW" Index: include/private/thread_local_alloc.h =================================================================== RCS file: /cvsroot/bdwgc/bdwgc/include/private/thread_local_alloc.h,v retrieving revision 1.22 diff -u -r1.22 thread_local_alloc.h --- include/private/thread_local_alloc.h 13 May 2011 14:40:31 -0000 1.22 +++ include/private/thread_local_alloc.h 9 Aug 2011 15:28:35 -0000 @@ -47,7 +47,7 @@ # define USE_COMPILER_TLS # elif defined(GC_DGUX386_THREADS) || defined(GC_OSF1_THREADS) \ || defined(GC_DARWIN_THREADS) || defined(GC_AIX_THREADS) \ - || defined(GC_NETBSD_THREADS) + || defined(GC_NETBSD_THREADS) || defined(GC_RTEMS_PTHREADS) # define USE_PTHREAD_SPECIFIC # elif defined(GC_HPUX_THREADS) # ifdef __GNUC__ Index: tests/test.c =================================================================== RCS file: /cvsroot/bdwgc/bdwgc/tests/test.c,v retrieving revision 1.63 diff -u -r1.63 test.c --- tests/test.c 14 Jul 2011 13:43:13 -0000 1.63 +++ tests/test.c 9 Aug 2011 15:34:44 -0000 @@ -1462,7 +1462,11 @@ # ifdef MSWIN32 GC_win32_free_heap(); # endif - return(0); +# ifdef RTEMS + exit(0); +# else + return(0); +# endif } # endif