/* 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 <sys/siginfo.h>
# endif
# 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. */
# 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))
|| 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