From: Ivan Maidanski Date: Sat, 29 Sep 2012 10:07:55 +0000 (+0400) Subject: Port BDWGC to Android/x86 X-Git-Tag: gc7_4_0~203 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=4b7642b1e081f3518e66e8d280aea7b102b68630;p=gc Port BDWGC to Android/x86 * include/private/gc_priv.h (SETJMP, LONGJMP, JMP_BUF): Explicitly define to setjmp/longjmp/jmp_buf (instead of sigsetjmp/siglongjmp/sigjmp_buf), respectively, if GC_NO_SIGSETJMP. * include/private/gcconfig.h (GC_NO_SIGSETJMP): New macro, define for Android/x86. * include/private/gcconfig.h (NO_GETCONTEXT): define for Android/x86 (since getcontext is missing in Android). --- diff --git a/include/private/gc_priv.h b/include/private/gc_priv.h index a7a2bb86..3032582c 100644 --- a/include/private/gc_priv.h +++ b/include/private/gc_priv.h @@ -2309,7 +2309,8 @@ GC_INNER ptr_t GC_store_debug_info(ptr_t p, word sz, const char *str, /* were possible, and a couple of routines to facilitate */ /* catching accesses to bad addresses when that's */ /* possible/needed. */ -#if defined(UNIX_LIKE) || (defined(NEED_FIND_LIMIT) && defined(CYGWIN32)) +#if (defined(UNIX_LIKE) || (defined(NEED_FIND_LIMIT) && defined(CYGWIN32))) \ + && !defined(GC_NO_SIGSETJMP) # if defined(SUNOS5SIGS) && !defined(FREEBSD) && !defined(LINUX) # include # endif @@ -2320,13 +2321,13 @@ GC_INNER ptr_t GC_store_debug_info(ptr_t p, word sz, const char *str, # define JMP_BUF sigjmp_buf #else # ifdef ECOS -# define SETJMP(env) hal_setjmp(env) +# define SETJMP(env) hal_setjmp(env) # else # define SETJMP(env) setjmp(env) # endif # define LONGJMP(env, val) longjmp(env, val) # define JMP_BUF jmp_buf -#endif /* !UNIX_LIKE */ +#endif /* !UNIX_LIKE || GC_NO_SIGSETJMP */ /* Do we need the GC_find_limit machinery to find the end of a */ /* data segment. */ diff --git a/include/private/gcconfig.h b/include/private/gcconfig.h index 98c2df08..5fde4ffd 100644 --- a/include/private/gcconfig.h +++ b/include/private/gcconfig.h @@ -1282,6 +1282,11 @@ # endif extern int _end[]; # define DATAEND (ptr_t)(_end) +# if defined(PLATFORM_ANDROID) && !defined(GC_NO_SIGSETJMP) + /* As of Android NDK r8b, _sigsetjmp is still missing */ + /* for x86 (setjmp is used instead to find data_start). */ +# define GC_NO_SIGSETJMP +# endif # else extern int etext[]; # define DATASTART ((ptr_t)((((word) (etext)) + 0xfff) & ~0xfff)) @@ -2529,7 +2534,8 @@ || defined(OPENBSD) || defined(ARM32) \ || defined(MIPS) || defined(AVR32))) \ || (defined(LINUX) && (defined(SPARC) || defined(M68K))) \ - || (defined(RTEMS) && defined(I386))) && !defined(NO_GETCONTEXT) + || ((defined(RTEMS) || defined(PLATFORM_ANDROID)) && defined(I386))) \ + && !defined(NO_GETCONTEXT) # define NO_GETCONTEXT #endif