diff options
author | Calvin Buckley <calvin@openmailbox.org> | 2018-01-23 17:54:59 +0300 |
---|---|---|
committer | Ivan Maidanski <ivmai@mail.ru> | 2018-01-24 17:05:22 +0300 |
commit | 847927f0e71ef1a8e3dcf2ee0879bf416311daae (patch) | |
tree | 4109df0beef3cc829dda00faa1e95b603f2b0e66 /dyn_load.c | |
parent | e9f26e6de5a1a4b4ded6d55f1a09838da5056c07 (diff) | |
download | bdwgc-847927f0e71ef1a8e3dcf2ee0879bf416311daae.tar.gz |
Initial support of Haiku/amd64
(port of commit e52f300 from 'mono_libgc')
* configure.ac [THREADS=posix && host=*-*-haiku*] (GC_THREADS,
_REENTRANT, PARALLEL_MARK, THREAD_LOCAL_ALLOC): Define macro.
* include/gc_config_macros.h [GC_THREADS && __HAIKU__]
(GC_HAIKU_THREADS): Likewise.
* include/private/gcconfig.h [__HAIKU__ && _X86_] (I386, HAIKU,
mach_type_known): Likewise.
* include/private/gcconfig.h [__HAIKU__ && __amd64__] (X86_64, HAIKU,
mach_type_known): Likewise.
* include/private/gcconfig.h [I386 && HAIKU] (DYNAMIC_LOADING,
MPROTECT_VDB): Likewise.
* include/private/gcconfig.h [X86_64 && HAIKU] (OS_TYPE, GETPAGESIZE,
DATASTART, DYNAMIC_LOADING, MPROTECT_VDB): Likewise.
* include/private/gcconfig.h [HAIKU] (UNIX_LIKE, GET_MEM): Likewise.
* os_dep.c [MPROTECT_VDB && !DARWIN && !MSWIN32 && !MSWINCE
&& HAIKU] (CODE_OK): Likewise.
* dyn_load.c [HAIKU] (GC_register_dynamic_libraries): Implement.
* os_dep.c [HAIKU] (GC_haiku_get_mem): Likewise.
* include/private/gcconfig.h (BEOS): Rename to HAIKU.
* os_dep.c (BEOS): Likewise.
* include/private/gcconfig.h [I386 && HAIKU] (OS_TYPE): Change value
to "HAIKU".
* include/private/gcconfig.h [X86_64 && HAIKU]: Include OS.h; declare
etext symbol.
* include/private/gcconfig.h [HAIKU] (GC_haiku_get_mem): Declare
prototype.
* os_dep.c [(NEED_FIND_LIMIT || UNIX_LIKE) && HAIKU] (old_segv_act):
Define static variable.
* os_dep.c [(NEED_FIND_LIMIT || UNIX_LIKE) && HAIKU]
(GC_set_and_save_fault_handler): Use old_segv_act; call
sigaction(SIGSEGV).
* os_dep.c [NEED_FIND_LIMIT || (USE_PROC_FOR_LIBRARIES && THREADS)]
(GC_reset_fault_handler): Likewise.
* os_dep.c [MPROTECT_VDB && !DARWIN && !USE_WINALLOC && HAIKU]: Do not
include sys/syscall.h.
* pthread_support.c [GC_HAIKU_THREADS] (GC_get_nprocs): Define function.
Diffstat (limited to 'dyn_load.c')
-rw-r--r-- | dyn_load.c | 18 |
1 files changed, 17 insertions, 1 deletions
@@ -58,7 +58,8 @@ STATIC GC_has_static_roots_func GC_has_static_roots = 0; && !(defined(ALPHA) && defined(OSF1)) \ && !(defined(FREEBSD) && defined(__ELF__)) \ && !((defined(LINUX) || defined(NACL)) && defined(__ELF__)) \ - && !(defined(NETBSD) && defined(__ELF__)) && !defined(HURD) \ + && !(defined(NETBSD) && defined(__ELF__)) \ + && !defined(HAIKU) && !defined(HURD) \ && !(defined(OPENBSD) && (defined(__ELF__) || defined(M68K))) \ && !defined(CPPCHECK) # error We only know how to find data segments of dynamic libraries for above. @@ -1484,6 +1485,21 @@ GC_INNER GC_bool GC_register_main_static_data(void) #endif /* DARWIN */ +#if defined(HAIKU) +# include <kernel/image.h> + + GC_INNER void GC_register_dynamic_libraries(void) + { + image_info info; + int32 cookie = 0; + + while (get_next_image_info(0, &cookie, &info) == B_OK) { + ptr_t data = (ptr_t)info.data; + GC_add_roots_inner(data, data + info.data_size, TRUE); + } + } +#endif /* HAIKU */ + #elif defined(PCR) # include "il/PCR_IL.h" |