From 2396ce1e9da95edf1f1299fd81b12560969dfc22 Mon Sep 17 00:00:00 2001 From: Ivan Maidanski Date: Mon, 26 Feb 2018 09:33:23 +0300 Subject: [PATCH] Fix Haiku/amd64 support (fix of commit 847927f) Issue #97 (bdwgc). * include/gc_config_macros.h [__HAIKU__ && !GC_CAN_SAVE_CALL_STACKS] (GC_ADD_CALLER): Define macro. * include/private/gcconfig.h [__HAIKU__ && __x86_64__] (X86_64, HAIKU, mach_type_known): Likewise. * include/private/gcconfig.h [HAIKU && X86_64] (HEURISTIC2, SEARCH_FOR_DATA_START): Likewise. * include/private/gcconfig.h [UNIX_LIKE && HAIKU] (NO_GETCONTEXT): Likewise. * include/private/thread_local_alloc.h [GC_HAIKU_THREADS] (USE_PTHREAD_SPECIFIC): Likewise. * include/private/gcconfig.h [HAIKU && X86_64] (etext, DATASTART): Do not define. --- include/gc_config_macros.h | 2 +- include/private/gcconfig.h | 17 +++++++++-------- include/private/thread_local_alloc.h | 3 ++- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/include/gc_config_macros.h b/include/gc_config_macros.h index 7e4f9a58..7a58710f 100644 --- a/include/gc_config_macros.h +++ b/include/gc_config_macros.h @@ -333,7 +333,7 @@ /* 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 diff --git a/include/private/gcconfig.h b/include/private/gcconfig.h index 237c3091..bd4867f7 100644 --- a/include/private/gcconfig.h +++ b/include/private/gcconfig.h @@ -335,7 +335,7 @@ # 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 @@ -2817,8 +2817,8 @@ 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 @@ -3279,10 +3279,11 @@ # 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) @@ -3722,7 +3723,7 @@ # 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) diff --git a/include/private/thread_local_alloc.h b/include/private/thread_local_alloc.h index 32bafd82..16fc555e 100644 --- a/include/private/thread_local_alloc.h +++ b/include/private/thread_local_alloc.h @@ -64,7 +64,8 @@ # 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__ -- 2.50.1