mirror of
https://github.com/yann64/haikuports.git
synced 2026-04-08 21:00:05 +02:00
@@ -18,17 +18,16 @@ COPYRIGHT="1988, 1989 Hans-J. Boehm, Alan J. Demers
|
||||
2011 Ludovic Courtes
|
||||
2018 Petter A. Urkedal"
|
||||
LICENSE="Boehm"
|
||||
REVISION="3"
|
||||
SOURCE_URI="https://github.com/ivmai/bdwgc/releases/download/v$portVersion/gc-$portVersion.tar.gz"
|
||||
CHECKSUM_SHA256="7649020621cb26325e1fb5c8742590d92fb48ce5c259b502faf7d9fb5dabb160"
|
||||
REVISION="1"
|
||||
SOURCE_URI="https://github.com/bdwgc/bdwgc/releases/download/v$portVersion/gc-$portVersion.tar.gz"
|
||||
CHECKSUM_SHA256="42e5194ad06ab6ffb806c83eb99c03462b495d979cda782f3c72c08af833cd4e"
|
||||
SOURCE_DIR="gc-$portVersion"
|
||||
PATCHES="boehm_gc-$portVersion.patchset"
|
||||
|
||||
ARCHITECTURES="all !x86_gcc2"
|
||||
SECONDARY_ARCHITECTURES="x86"
|
||||
|
||||
libcordVersion=1.5.1
|
||||
libgcVersion=1.5.4
|
||||
libgcVersion=1.5.6
|
||||
libcordVersionCompat="$libcordVersion compat >= ${libcordVersion%%.*}"
|
||||
libgcVersionCompat="$libgcVersion compat >= ${libgcVersion%%.*}"
|
||||
portVersionCompat="$portVersion compat >= ${portVersion%%.*}"
|
||||
@@ -1,190 +0,0 @@
|
||||
From 4f79b220fed9787c7dd47c9b589ac1f475b6b4d5 Mon Sep 17 00:00:00 2001
|
||||
From: Augustin Cavalier <waddlesplash@gmail.com>
|
||||
Date: Mon, 25 Nov 2024 16:20:27 -0500
|
||||
Subject: Revive Haiku support.
|
||||
|
||||
|
||||
diff --git a/include/private/gcconfig.h b/include/private/gcconfig.h
|
||||
index c1cf80f..135d237 100644
|
||||
--- a/include/private/gcconfig.h
|
||||
+++ b/include/private/gcconfig.h
|
||||
@@ -964,9 +964,21 @@ EXTERN_C_BEGIN
|
||||
# endif /* FREEBSD */
|
||||
|
||||
# ifdef HAIKU
|
||||
-# define OS_TYPE "HAIKU"
|
||||
-# define DYNAMIC_LOADING
|
||||
-# define MPROTECT_VDB
|
||||
+# define OS_TYPE "HAIKU"
|
||||
+# define DYNAMIC_LOADING
|
||||
+# define USE_GET_STACKBASE_FOR_MAIN
|
||||
+# undef MPROTECT_VDB /* slow */
|
||||
+# ifndef HAVE_PTHREAD_GETATTR_NP
|
||||
+# define HAVE_PTHREAD_GETATTR_NP 1
|
||||
+# endif
|
||||
+# ifndef HAVE_CLOCK_GETTIME
|
||||
+# define HAVE_CLOCK_GETTIME 1
|
||||
+# endif
|
||||
+# ifndef USE_MMAP
|
||||
+# define USE_MMAP 1
|
||||
+# endif
|
||||
+# define USE_MMAP_ANON
|
||||
+# define USE_SPIN_LOCK
|
||||
EXTERN_C_END
|
||||
# include <OS.h>
|
||||
EXTERN_C_BEGIN
|
||||
@@ -1454,8 +1466,7 @@ EXTERN_C_BEGIN
|
||||
# define DATAEND ((ptr_t)_end)
|
||||
# endif
|
||||
# ifdef HAIKU
|
||||
- extern int etext[];
|
||||
-# define DATASTART ((ptr_t)((((word)(etext)) + 0xfff) & ~(word)0xfff))
|
||||
+ /* Nothing specific. */
|
||||
# endif
|
||||
# ifdef SOLARIS
|
||||
# define DATASTART GC_SysVGetDataStart(0x1000, (ptr_t)_etext)
|
||||
@@ -2436,8 +2447,7 @@ EXTERN_C_BEGIN
|
||||
/* Nothing specific. */
|
||||
# endif
|
||||
# ifdef HAIKU
|
||||
-# define HEURISTIC2
|
||||
-# define SEARCH_FOR_DATA_START
|
||||
+/* Nothing specific. */
|
||||
# endif
|
||||
# ifdef SOLARIS
|
||||
# define ELF_CLASS ELFCLASS64
|
||||
@@ -3405,9 +3415,6 @@ EXTERN_C_BEGIN
|
||||
# elif defined(NINTENDO_SWITCH)
|
||||
void *switch_get_mem(size_t bytes);
|
||||
# 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)
|
||||
# elif defined(EMSCRIPTEN_TINY)
|
||||
void *emmalloc_memalign(size_t alignment, size_t size);
|
||||
# define GET_MEM(bytes) (struct hblk*)emmalloc_memalign(GC_page_size, bytes)
|
||||
diff --git a/misc.c b/misc.c
|
||||
index 91cb193..b7a92ef 100644
|
||||
--- a/misc.c
|
||||
+++ b/misc.c
|
||||
@@ -2004,6 +2004,10 @@ GC_API GC_warn_proc GC_CALL GC_get_warn_proc(void)
|
||||
# else
|
||||
__android_log_assert("*" /* cond */, GC_ANDROID_LOG_TAG, "%s\n", msg);
|
||||
# endif
|
||||
+
|
||||
+# if defined(__HAIKU__)
|
||||
+ debugger(msg);
|
||||
+# endif
|
||||
}
|
||||
|
||||
# if !defined(NO_DEBUGGING) && !defined(GC_ANDROID_LOG)
|
||||
diff --git a/os_dep.c b/os_dep.c
|
||||
index e90c772..8fcc713 100644
|
||||
--- a/os_dep.c
|
||||
+++ b/os_dep.c
|
||||
@@ -845,19 +845,6 @@ GC_INNER size_t GC_page_size = 0;
|
||||
}
|
||||
#endif /* !MSWIN32 */
|
||||
|
||||
-#ifdef HAIKU
|
||||
-# include <kernel/OS.h>
|
||||
-
|
||||
- GC_API int GC_CALL GC_get_stack_base(struct GC_stack_base *sb)
|
||||
- {
|
||||
- thread_info th;
|
||||
- get_thread_info(find_thread(NULL),&th);
|
||||
- sb->mem_base = th.stack_end;
|
||||
- return GC_SUCCESS;
|
||||
- }
|
||||
-# define HAVE_GET_STACK_BASE
|
||||
-#endif /* HAIKU */
|
||||
-
|
||||
#ifdef OS2
|
||||
GC_API int GC_CALL GC_get_stack_base(struct GC_stack_base *sb)
|
||||
{
|
||||
@@ -1269,7 +1256,7 @@ GC_INNER size_t GC_page_size = 0;
|
||||
# endif
|
||||
}
|
||||
# define GET_MAIN_STACKBASE_SPECIAL
|
||||
-#elif !defined(AMIGA) && !defined(HAIKU) && !defined(OS2) \
|
||||
+#elif !defined(AMIGA) && !defined(OS2) \
|
||||
&& !defined(MSWIN32) && !defined(MSWINCE) && !defined(CYGWIN32) \
|
||||
&& !defined(GC_OPENBSD_THREADS) \
|
||||
&& (!defined(GC_SOLARIS_THREADS) || defined(_STRICT_STDC))
|
||||
@@ -1338,6 +1325,8 @@ GC_INNER size_t GC_page_size = 0;
|
||||
result = GC_linux_main_stack_base();
|
||||
# elif defined(FREEBSD_STACKBOTTOM)
|
||||
result = GC_freebsd_main_stack_base();
|
||||
+# elif defined(HAIKU)
|
||||
+ ABORT("pthread_attr_getstack failed");
|
||||
# elif defined(HEURISTIC2)
|
||||
{
|
||||
ptr_t sp = GC_approx_sp();
|
||||
@@ -1375,7 +1364,7 @@ GC_INNER size_t GC_page_size = 0;
|
||||
return(result);
|
||||
}
|
||||
# define GET_MAIN_STACKBASE_SPECIAL
|
||||
-#endif /* !AMIGA, !HAIKU, !OPENBSD, !OS2, !Windows */
|
||||
+#endif /* !AMIGA, !OPENBSD, !OS2, !Windows */
|
||||
|
||||
#if (defined(HAVE_PTHREAD_ATTR_GET_NP) || defined(HAVE_PTHREAD_GETATTR_NP)) \
|
||||
&& defined(THREADS) && !defined(HAVE_GET_STACK_BASE)
|
||||
@@ -2117,6 +2106,8 @@ void GC_register_data_segments(void)
|
||||
/* Avoid even referencing DATASTART and DATAEND as they are */
|
||||
/* unnecessary and cause linker errors when bitcode is enabled. */
|
||||
/* GC_register_data_segments() is not called anyway. */
|
||||
+#elif defined(HAIKU)
|
||||
+/* Nothing to do. */
|
||||
# elif !defined(PCR) && !defined(MACOS)
|
||||
# if defined(REDIRECT_MALLOC) && defined(GC_SOLARIS_THREADS)
|
||||
/* As of Solaris 2.3, the Solaris threads implementation */
|
||||
@@ -2578,19 +2569,6 @@ void * os2_alloc(size_t bytes)
|
||||
# undef GC_AMIGA_AM
|
||||
#endif
|
||||
|
||||
-#if defined(HAIKU)
|
||||
-# include <stdlib.h>
|
||||
- ptr_t GC_haiku_get_mem(size_t bytes)
|
||||
- {
|
||||
- void* mem;
|
||||
-
|
||||
- GC_ASSERT(GC_page_size != 0);
|
||||
- if (posix_memalign(&mem, GC_page_size, bytes) == 0)
|
||||
- return mem;
|
||||
- return NULL;
|
||||
- }
|
||||
-#endif /* HAIKU */
|
||||
-
|
||||
#if (defined(USE_MUNMAP) || defined(MPROTECT_VDB)) && !defined(USE_WINALLOC)
|
||||
# define ABORT_ON_REMAP_FAIL(C_msg_prefix, start_addr, len) \
|
||||
ABORT_ARG3(C_msg_prefix " failed", \
|
||||
@@ -2666,7 +2644,7 @@ static void block_unmap_inner(ptr_t start_addr, size_t len)
|
||||
if (len != 0) {
|
||||
# ifdef SN_TARGET_PS3
|
||||
ps3_free_mem(start_addr, len);
|
||||
-# elif defined(AIX) || defined(CYGWIN32) || defined(HAIKU) \
|
||||
+# elif defined(AIX) || defined(CYGWIN32) \
|
||||
|| (defined(LINUX) && !defined(PREFER_MMAP_PROT_NONE)) \
|
||||
|| defined(HPUX)
|
||||
/* On AIX, mmap(PROT_NONE) fails with ENOMEM unless the */
|
||||
diff --git a/pthread_support.c b/pthread_support.c
|
||||
index 6075d50..72d1fe5 100644
|
||||
--- a/pthread_support.c
|
||||
+++ b/pthread_support.c
|
||||
@@ -1241,12 +1241,7 @@ static void fork_child_proc(void)
|
||||
# endif
|
||||
# ifdef PARALLEL_MARK
|
||||
if (GC_parallel) {
|
||||
-# if defined(THREAD_SANITIZER) && defined(GC_ASSERTIONS) \
|
||||
- && defined(CAN_CALL_ATFORK)
|
||||
- (void)pthread_mutex_unlock(&mark_mutex);
|
||||
-# else
|
||||
- GC_release_mark_lock();
|
||||
-# endif
|
||||
+ pthread_mutex_init(&mark_mutex, NULL);
|
||||
/* Turn off parallel marking in the child, since we are probably */
|
||||
/* just going to exec, and we would have to restart mark threads. */
|
||||
GC_parallel = FALSE;
|
||||
--
|
||||
2.45.2
|
||||
|
||||
Reference in New Issue
Block a user