/* This may also be desirable if it is possible but expensive to */
/* retrieve the call chain. */
#if (defined(__linux__) || defined(__NetBSD__) || defined(__OpenBSD__) \
- || defined(__FreeBSD__) || defined(__DragonFly__) \
+ || defined(__FreeBSD__) || defined(__DragonFly__) || defined(__HAIKU__) \
|| defined(HOST_ANDROID) || defined(__ANDROID__)) \
&& !defined(GC_CAN_SAVE_CALL_STACKS)
# define GC_ADD_CALLER
# define HAIKU
# define mach_type_known
# endif
-# if defined(__HAIKU__) && defined(__amd64__)
+# if defined(__HAIKU__) && (defined(__amd64__) || defined(__x86_64__))
# define X86_64
# define HAIKU
# define mach_type_known
extern "C" {
# endif
# define GETPAGESIZE() (unsigned)B_PAGE_SIZE
- extern int etext[];
-# define DATASTART ((ptr_t)((((word)etext) + 0xfff) & ~0xfff))
+# define HEURISTIC2
+# define SEARCH_FOR_DATA_START
# define DYNAMIC_LOADING
# define MPROTECT_VDB
# endif
# define DEFAULT_VDB
#endif
-#if ((defined(UNIX_LIKE) && (defined(DARWIN) || defined(HURD) \
- || defined(OPENBSD) || defined(ARM32) \
- || defined(MIPS) || defined(AVR32) \
- || defined(OR1K) || defined(NIOS2))) \
+#if ((defined(UNIX_LIKE) && (defined(DARWIN) || defined(HAIKU) \
+ || defined(HURD) || defined(OPENBSD) \
+ || defined(ARM32) \
+ || defined(AVR32) || defined(MIPS) \
+ || defined(NIOS2) || defined(OR1K))) \
|| (defined(LINUX) && !defined(__gnu_linux__)) \
|| (defined(RTEMS) && defined(I386)) || defined(HOST_ANDROID)) \
&& !defined(NO_GETCONTEXT)
# define GET_MEM(bytes) (struct hblk*)switch_get_mem(bytes)
# elif defined(HAIKU)
ptr_t GC_haiku_get_mem(size_t bytes);
-# define GET_MEM(bytes) (struct hblk*)GC_haiku_get_mem(bytes)
+# define GET_MEM(bytes) (struct hblk*)GC_haiku_get_mem(bytes)
# else
ptr_t GC_unix_get_mem(size_t bytes);
# define GET_MEM(bytes) (struct hblk *)GC_unix_get_mem(bytes)
# elif defined(GC_DGUX386_THREADS) || defined(GC_OSF1_THREADS) \
|| defined(GC_AIX_THREADS) || defined(GC_DARWIN_THREADS) \
|| defined(GC_FREEBSD_THREADS) || defined(GC_NETBSD_THREADS) \
- || defined(GC_LINUX_THREADS) || defined(GC_RTEMS_PTHREADS)
+ || defined(GC_LINUX_THREADS) || defined(GC_HAIKU_THREADS) \
+ || defined(GC_RTEMS_PTHREADS)
# define USE_PTHREAD_SPECIFIC
# elif defined(GC_HPUX_THREADS)
# ifdef __GNUC__