cygwin: patch boehm-gc on cygwin
This commit is contained in:
parent
c9a45f2f62
commit
8bebcd5d40
108
pkgs/development/libraries/boehm-gc/cygwin.patch
Normal file
108
pkgs/development/libraries/boehm-gc/cygwin.patch
Normal file
@ -0,0 +1,108 @@
|
|||||||
|
--- gc-7.2/include/gc.h 2014-06-01 19:00:48.000000000 +0200
|
||||||
|
+++ gc-7.2/include/gc.h 2015-05-27 12:55:42.248984200 +0200
|
||||||
|
@@ -1386,7 +1386,14 @@
|
||||||
|
/* THREAD_LOCAL_ALLOC defined and the initial allocation call is not */
|
||||||
|
/* to GC_malloc() or GC_malloc_atomic(). */
|
||||||
|
|
||||||
|
-#ifdef __CYGWIN32__
|
||||||
|
+#ifdef __CYGWIN__
|
||||||
|
+#ifdef __x86_64__
|
||||||
|
+ extern int __data_start__[], __data_end__[], __bss_start__[], __bss_end__[];
|
||||||
|
+#define GC_DATASTART (__data_start__ < __bss_start__ ?\
|
||||||
|
+ (void *)__data_start__ : (void *)__bss_start__)
|
||||||
|
+#define GC_DATAEND (__data_end__ < __bss_end__ ?\
|
||||||
|
+ (void *)__data_end__ : (void *)__bss_end__)
|
||||||
|
+#else
|
||||||
|
/* Similarly gnu-win32 DLLs need explicit initialization from the */
|
||||||
|
/* main program, as does AIX. */
|
||||||
|
extern int _data_start__[], _data_end__[], _bss_start__[], _bss_end__[];
|
||||||
|
@@ -1394,6 +1401,7 @@
|
||||||
|
(void *)_data_start__ : (void *)_bss_start__)
|
||||||
|
# define GC_DATAEND (_data_end__ > _bss_end__ ? \
|
||||||
|
(void *)_data_end__ : (void *)_bss_end__)
|
||||||
|
+#endif
|
||||||
|
# define GC_INIT_CONF_ROOTS GC_add_roots(GC_DATASTART, GC_DATAEND); \
|
||||||
|
GC_gcollect() /* For blacklisting. */
|
||||||
|
/* Required at least if GC is in a DLL. And doesn't hurt. */
|
||||||
|
--- gc-7.2/include/private/gcconfig.h 2014-06-01 19:00:48.000000000 +0200
|
||||||
|
+++ gc-7.2/include/private/gcconfig.h 2015-05-27 12:46:01.864338700 +0200
|
||||||
|
@@ -441,10 +441,20 @@
|
||||||
|
# endif
|
||||||
|
# define mach_type_known
|
||||||
|
# endif
|
||||||
|
-# if defined(__CYGWIN32__) || defined(__CYGWIN__)
|
||||||
|
+# if defined(__CYGWIN32__)
|
||||||
|
# define I386
|
||||||
|
# define CYGWIN32
|
||||||
|
# define mach_type_known
|
||||||
|
+#if defined(__CYGWIN__)
|
||||||
|
+# if defined(__LP64__)
|
||||||
|
+# define X86_64
|
||||||
|
+# define mach_type_known
|
||||||
|
+# else
|
||||||
|
+# define I386
|
||||||
|
+# endif
|
||||||
|
+# define CYGWIN32
|
||||||
|
+# define mach_type_known
|
||||||
|
+#endif
|
||||||
|
# endif
|
||||||
|
# if defined(__MINGW32__) && !defined(mach_type_known)
|
||||||
|
# define I386
|
||||||
|
@@ -511,6 +521,16 @@
|
||||||
|
# define mach_type_known
|
||||||
|
# endif
|
||||||
|
|
||||||
|
+#if defined(__CYGWIN__)
|
||||||
|
+# if defined(__LP64__)
|
||||||
|
+# define X86_64
|
||||||
|
+# define mach_type_known
|
||||||
|
+# else
|
||||||
|
+# define I386
|
||||||
|
+# endif
|
||||||
|
+# define CYGWIN32
|
||||||
|
+# define mach_type_known
|
||||||
|
+#endif
|
||||||
|
/* Feel free to add more clauses here */
|
||||||
|
|
||||||
|
/* Or manually define the machine type here. A machine type is */
|
||||||
|
@@ -2279,6 +2299,20 @@
|
||||||
|
# define GWW_VDB
|
||||||
|
# define DATAEND /* not needed */
|
||||||
|
# endif
|
||||||
|
+
|
||||||
|
+# ifdef CYGWIN32
|
||||||
|
+# define OS_TYPE "CYGWIN32"
|
||||||
|
+# define DATASTART ((ptr_t)GC_DATASTART) /* From gc.h */
|
||||||
|
+# define DATAEND ((ptr_t)GC_DATAEND)
|
||||||
|
+# define ALIGNMENT 8
|
||||||
|
+# undef STACK_GRAN
|
||||||
|
+# define STACK_GRAN 0x10000
|
||||||
|
+# ifdef USE_MMAP
|
||||||
|
+# define NEED_FIND_LIMIT
|
||||||
|
+# define USE_MMAP_ANON
|
||||||
|
+# endif
|
||||||
|
+# endif
|
||||||
|
+
|
||||||
|
# endif /* X86_64 */
|
||||||
|
|
||||||
|
# ifdef HEXAGON
|
||||||
|
--- gc-7.2/os_dep.c 2015-05-27 12:25:29.097698800 +0200
|
||||||
|
+++ gc-7.2/os_dep.c 2015-05-27 12:48:23.714600800 +0200
|
||||||
|
@@ -764,10 +764,16 @@
|
||||||
|
/* gcc version of boehm-gc). */
|
||||||
|
GC_API int GC_CALL GC_get_stack_base(struct GC_stack_base *sb)
|
||||||
|
{
|
||||||
|
+# ifdef __x86_64__
|
||||||
|
+ PNT_TIB pTib = NtCurrentTeb();
|
||||||
|
+ void * _tlsbase = pTib->StackBase;
|
||||||
|
+ /*void * _tlsbase = NtCurrentTeb()->pTib.StackBase;*/
|
||||||
|
+ /*extern void * _tlsbase __asm__ ("%gs:8");*/
|
||||||
|
+# else
|
||||||
|
void * _tlsbase;
|
||||||
|
-
|
||||||
|
__asm__ ("movl %%fs:4, %0"
|
||||||
|
: "=r" (_tlsbase));
|
||||||
|
+# endif
|
||||||
|
sb -> mem_base = _tlsbase;
|
||||||
|
return GC_SUCCESS;
|
||||||
|
}
|
@ -8,6 +8,8 @@ stdenv.mkDerivation rec {
|
|||||||
sha256 = "119x7p1cqw40mpwj80xfq879l9m1dkc7vbc1f3bz3kvkf8bf6p16";
|
sha256 = "119x7p1cqw40mpwj80xfq879l9m1dkc7vbc1f3bz3kvkf8bf6p16";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
patches = if stdenv.isCygwin then [ ./cygwin.patch ] else null;
|
||||||
|
|
||||||
configureFlags =
|
configureFlags =
|
||||||
[ "--enable-cplusplus" ]
|
[ "--enable-cplusplus" ]
|
||||||
++ lib.optional enableLargeConfig "--enable-large-config";
|
++ lib.optional enableLargeConfig "--enable-large-config";
|
||||||
|
Loading…
x
Reference in New Issue
Block a user