Index: include/private/gcconfig.h --- include/private/gcconfig.h.orig +++ include/private/gcconfig.h @@ -64,7 +64,8 @@ /* Determine the machine type: */ # if defined(__aarch64__) # define AARCH64 -# if !defined(LINUX) +# if !defined(LINUX) && !defined(DARWIN) && !defined(FREEBSD) \ + && !defined(OPENBSD) # define NOSYS # define mach_type_known # endif @@ -82,6 +83,10 @@ # if defined(hp9000s300) # error M68K based HP machines no longer supported. # endif +# if defined(OPENBSD) && defined(__aarch64__) +# define AARCH64 +# define mach_type_known +# endif # if defined(OPENBSD) && defined(m68k) # define M68K # define mach_type_known @@ -94,6 +99,10 @@ # define POWERPC # define mach_type_known # endif +# if defined(OPENBSD) && defined(__riscv) +# define RISCV +# define mach_type_known +# endif # if defined(NETBSD) && (defined(m68k) || defined(__m68k__)) # define M68K # define mach_type_known @@ -1334,6 +1343,19 @@ # define LINUX_STACKBOTTOM # define DYNAMIC_LOADING # endif +# ifdef OPENBSD +# define OS_TYPE "OPENBSD" +# ifndef GC_OPENBSD_THREADS +# include +# include +# define STACKBOTTOM ((ptr_t)USRSTACK) +# endif + extern int __data_start[]; +# define DATASTART ((ptr_t)__data_start) + extern int _end[]; +# define DATAEND ((ptr_t)(&_end)) +# define DYNAMIC_LOADING +# endif # endif /* RISCV */ # ifdef NS32K @@ -1750,6 +1772,86 @@ # define DATAEND (_end) # define CACHE_LINE_SIZE 256 # define GETPAGESIZE() 4096 +# endif +# endif + +# ifdef AARCH64 +# define MACH_TYPE "AARCH64" +# ifdef __ILP32__ +# define CPP_WORDSZ 32 +# define ALIGNMENT 4 +# else +# define CPP_WORDSZ 64 +# define ALIGNMENT 8 +# endif +# ifndef HBLKSIZE +# define HBLKSIZE 4096 +# endif +# ifdef LINUX +# define OS_TYPE "LINUX" +# define LINUX_STACKBOTTOM +# define DYNAMIC_LOADING + extern int __data_start[]; + extern int _end[]; +# define DATASTART ((ptr_t)__data_start) +# define DATAEND ((ptr_t)(&_end)) +# endif +# ifdef DARWIN + /* iOS */ +# define OS_TYPE "DARWIN" +# define DARWIN_DONT_PARSE_STACK +# ifndef GC_DONT_REGISTER_MAIN_STATIC_DATA +# define DYNAMIC_LOADING +# endif +# define DATASTART ((ptr_t)get_etext()) +# define DATAEND ((ptr_t)get_end()) +# define STACKBOTTOM ((ptr_t)0x16fdfffff) +# ifndef USE_MMAP +# define USE_MMAP +# endif +# define USE_MMAP_ANON +# define MPROTECT_VDB +# include +# define GETPAGESIZE() (unsigned)getpagesize() + /* FIXME: There seems to be some issues with trylock hanging on */ + /* darwin. This should be looked into some more. */ +# define NO_PTHREAD_TRYLOCK +# if TARGET_OS_IPHONE && !defined(NO_DYLD_BIND_FULLY_IMAGE) +# define NO_DYLD_BIND_FULLY_IMAGE +# endif +# endif +# ifdef FREEBSD +# define OS_TYPE "FREEBSD" +# ifndef GC_FREEBSD_THREADS +# define MPROTECT_VDB +# endif +# define FREEBSD_STACKBOTTOM +# ifdef __ELF__ +# define DYNAMIC_LOADING +# endif + extern char etext[]; +# define DATASTART GC_FreeBSDGetDataStart(0x1000, (ptr_t)etext) +# define DATASTART_USES_BSDGETDATASTART +# endif +# ifdef OPENBSD +# define OS_TYPE "OPENBSD" +# ifndef GC_OPENBSD_THREADS +# include +# include +# define STACKBOTTOM ((ptr_t)USRSTACK) +# endif + extern int __data_start[]; +# define DATASTART ((ptr_t)__data_start) + extern int _end[]; +# define DATAEND ((ptr_t)(&_end)) +# define DYNAMIC_LOADING +# endif +# ifdef NOSYS + /* __data_start is usually defined in the target linker script. */ + extern int __data_start[]; +# define DATASTART ((ptr_t)__data_start) + extern void *__stack_base__; +# define STACKBOTTOM ((ptr_t)__stack_base__) # endif # endif