This is the mail archive of the java-patches@gcc.gnu.org mailing list for the Java project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [Gc] bdwgc for RTEMS pthread support


Hi Ivan,

I have modified the patch according to your advice. And the patch is attached.

Thanks,
Jie

2011/8/9 Ivan Maidanski <ivmai@mail.ru>:
> Hi Jie,
>
> 1. Send patches as attachments
> 2. Please add ChangeLog entres.
> 3. Exclude auto-generated files (like configure)
> 4. Fix issues given below:
>
> 08 08 2011, 19:08 Jie Liu <lj8175@gmail.com>:
>> Hi,
>>
>> Here is the patch for bdwgc on RTEMS with pthread support, while no
>> thread support's patch has been merged.
>>
>> Index: configure
>> ===================================================================
>> RCS file: /cvsroot/bdwgc/bdwgc/configure,v
>> retrieving revision 1.72
>> diff -u -r1.72 configure
>> --- configure ? 4 Jul 2011 13:29:55 -0000 ? ? ? 1.72
>> +++ configure ? 5 Aug 2011 06:31:43 -0000
>> @@ -5293,6 +5293,11 @@
>> ? ? ?$as_echo "#define _REENTRANT 1" >>confdefs.h
>>
>> ? ? ?;;
>> + rtems)
>> + ? ?THREADS=posix
>> + ? ?$as_echo "#define GC_RTEMS_PTHREADS 1" >>confdefs.h
>> + ? ?$as_echo "#define THREAD_LOCAL_ALLOC 1" >>confdefs.h
>> + ? ?;;
>> ? decosf1 | irix | mach | os2 | solaris | dce | vxworks)
>> ? ? ?as_fn_error $? "thread package $THREADS not yet supported" "$LINENO" 5
>> ? ? ?;;
>> 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 ? ?5 Aug 2011 06:32:33 -0000
>> @@ -1351,6 +1351,16 @@
>> ?# 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)
>> + ?{
>> + ? ?printf("run in GC_get_stack_base\n");
>
> Remove printf here or ifdef with DEBUG_... and use GC_log_printf instead.
>
>> + ? ?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 ? ? ? ?5 Aug 2011 06:32:36 -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 ? 5 Aug 2011 06:32:40 -0000
>> @@ -52,7 +52,9 @@
>> ?# include <time.h>
>> ?# include <errno.h>
>> ?# include <unistd.h>
>> +#if !defined(GC_RTEMS_PTHREADS)
>> ?# include <sys/mman.h>
>> +#endif
>> ?# include <sys/time.h>
>> ?# include <sys/types.h>
>> ?# include <sys/stat.h>
>> @@ -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;
>
> Is this really needed? see " if (GC_nprocs <= 0)" below.
>
I think it's better to use this. Or there is always "GC_get_nprocs()
returned ..." printing.

>> ?# ? 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 ?5 Aug 2011 06:33:24 -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,10 +118,13 @@
>> ? ? ?/* 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) \
>> +#if (!defined(GC_WIN32_THREADS) || defined(GC_WIN32_PTHREADS) ||
>> defined(GC_RTEMS_PTHREADS)\
>
> Split this line into 2.
>
>> ? ? ? || defined(__CYGWIN32__) || defined(__CYGWIN__)) && defined(GC_THREADS)
>> ? ?/* Posix threads. */
>> ?# define GC_PTHREADS
>> @@ -289,7 +295,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 5 Aug 2011 06:33:27 -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 <dlfcn.h> 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 ?5 Aug 2011 06:33:28 -0000
>> @@ -51,6 +51,10 @@
>> ?# ? ?define USE_PTHREAD_LOCKS
>> ?# ?endif
>>
>> +# ?if defined(GC_RTEMS_PTHREADS) && defined(GC_PTHREADS)
>
> Why do you test GC_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 ?5 Aug 2011 06:33:35 -0000
>> @@ -1380,10 +1380,13 @@
>> ?# ? ? ? include <sys/unistd.h>
>> ? ? ? ? ?extern int etext[];
>> ? ? ? ? ?extern int end[];
>> - ? ? ? ?extern void *InitStackBottom;
>> + ? ? ? ?void *rtems_get_stack_bottom();
>
> Place "void" into ().
>
>> +# ? ? ? 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 ? ? ? ?5 Aug 2011 06:33:36 -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 ? ? ? ?5 Aug 2011 06:34:44 -0000
>> @@ -1462,6 +1462,9 @@
>> ?# ? ifdef MSWIN32
>> ? ? ? ?GC_win32_free_heap();
>> ?# ? endif
>> +# ? ifdef RTEMS
>> + ? ? ?exit(0);
>
> The compiler might issue an "unreachable" warning here: consider changing return type to void and removing "return".
>
>> +# ? endif
>> ? ? ?return(0);
>> ?}
>> ?# endif
>>
>>
>>
>> Thanks,
>> Jie
>

Attachment: bdwgc.patch
Description: Binary data


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]