From: Martin Koeppe Date: Tue, 7 Aug 2018 08:55:23 +0000 (+0300) Subject: Initial single-threaded support of Interix subsystem X-Git-Tag: v8.0.0~30 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=56fd4797c4681648539ba28669f16267920bfec1;p=gc Initial single-threaded support of Interix subsystem * include/private/gc_priv.h [__INTERIX] (_ALL_SOURCE): Define macro. * include/private/gcconfig.h [__INTERIX] (I386, INTERIX, mach_type_known): Likewise. * include/private/gcconfig.h [I386 && INTERIX] (OS_TYPE, DATASTART, DATAEND, STACKBOTTOM, USE_MMAP, USE_MMAP_ANON): Likewise. * include/private/gcconfig.h [I386 && INTERIX] (_data_start__, _bss_end__): Declare extern variable. --- diff --git a/include/private/gc_priv.h b/include/private/gc_priv.h index 43f46984..3fb435ce 100644 --- a/include/private/gc_priv.h +++ b/include/private/gc_priv.h @@ -32,6 +32,10 @@ # define _GNU_SOURCE 1 #endif +#if defined(__INTERIX) && !defined(_ALL_SOURCE) +# define _ALL_SOURCE 1 +#endif + #if (defined(DGUX) && defined(GC_THREADS) || defined(DGUX386_THREADS) \ || defined(GC_DGUX386_THREADS)) && !defined(_USING_POSIX4A_DRAFT10) # define _USING_POSIX4A_DRAFT10 1 diff --git a/include/private/gcconfig.h b/include/private/gcconfig.h index 1b50efa0..a167751a 100644 --- a/include/private/gcconfig.h +++ b/include/private/gcconfig.h @@ -539,7 +539,7 @@ EXTERN_C_BEGIN # else # if ((defined(_MSDOS) || defined(_MSC_VER)) && (_M_IX86 >= 300)) \ || (defined(_WIN32) && !defined(__CYGWIN32__) && !defined(__CYGWIN__) \ - && !defined(SYMBIAN)) + && !defined(__INTERIX) && !defined(SYMBIAN)) # if defined(__LP64__) || defined(_WIN64) # define X86_64 # elif defined(_M_ARM) @@ -581,6 +581,11 @@ EXTERN_C_BEGIN # define CYGWIN32 # define mach_type_known # endif +# if defined(__INTERIX) +# define I386 +# define INTERIX +# define mach_type_known +# endif # if defined(__MINGW32__) && !defined(mach_type_known) # define I386 # define MSWIN32 @@ -1536,6 +1541,21 @@ EXTERN_C_BEGIN # define USE_MMAP_ANON # endif # endif +# ifdef INTERIX +# define OS_TYPE "INTERIX" + extern int _data_start__[]; + extern int _bss_end__[]; +# define DATASTART ((ptr_t)_data_start__) +# define DATAEND ((ptr_t)_bss_end__) +# define STACKBOTTOM ({ ptr_t rv; \ + __asm__ __volatile__ ("movl %%fs:4, %%eax" \ + : "=a" (rv)); \ + rv; }) +# ifndef USE_MMAP +# define USE_MMAP +# endif +# define USE_MMAP_ANON +# endif # ifdef OS2 # define OS_TYPE "OS2" /* STACKBOTTOM and DATASTART are handled specially in */