]> granicus.if.org Git - gc/commitdiff
Initial single-threaded support of Interix subsystem
authorMartin Koeppe <mkoeppe@gmx.de>
Tue, 7 Aug 2018 08:55:23 +0000 (11:55 +0300)
committerIvan Maidanski <ivmai@mail.ru>
Tue, 7 Aug 2018 08:58:12 +0000 (11:58 +0300)
* 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.

include/private/gc_priv.h
include/private/gcconfig.h

index 43f46984a158b332ed85163a84b6515afb4f21ba..3fb435ceae86d5b66bcbf046b3f539db2cdb2d31 100644 (file)
 # 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
index 1b50efa0a6fd5f3c90ed8759485889294b2e5935..a167751acdb545cb43e058d4b62fb608b9c273b6 100644 (file)
@@ -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   */