Path: blob/master/build/pkgs/boehm_gc/patches/cygwin64.patch
8822 views
--- a/include/gc.h 2012-08-09 16:25:13.000000000 -04001+++ b/include/gc.h 2013-04-22 13:10:01.101686000 -04002@@ -1385,7 +1385,14 @@3/* THREAD_LOCAL_ALLOC defined and the initial allocation call is not */4/* to GC_malloc() or GC_malloc_atomic(). */56-#ifdef __CYGWIN32__7+#ifdef __CYGWIN__8+#ifdef __x86_64__9+ extern int __data_start__[], __data_end__[], __bss_start__[], __bss_end__[];10+#define GC_DATASTART (__data_start__ < __bss_start__ ?\11+ (void *)__data_start__ : (void *)__bss_start__)12+#define GC_DATAEND (__data_end__ < __bss_end__ ?\13+ (void *)__data_end__ : (void *)__bss_end__)14+#else15/* Similarly gnu-win32 DLLs need explicit initialization from the */16/* main program, as does AIX. */17extern int _data_start__[], _data_end__[], _bss_start__[], _bss_end__[];18@@ -1393,6 +1400,7 @@19(void *)_data_start__ : (void *)_bss_start__)20# define GC_DATAEND (_data_end__ > _bss_end__ ? \21(void *)_data_end__ : (void *)_bss_end__)22+#endif23# define GC_INIT_CONF_ROOTS GC_add_roots(GC_DATASTART, GC_DATAEND); \24GC_gcollect() /* For blacklisting. */25/* Required at least if GC is in a DLL. And doesn't hurt. */26--- a/include/private/gcconfig.h 2012-08-09 16:25:13.000000000 -040027+++ b/include/private/gcconfig.h 2013-04-21 12:52:28.024399600 -040028@@ -432,10 +432,20 @@29# endif30# define mach_type_known31# endif32-# if defined(__CYGWIN32__) || defined(__CYGWIN__)33+# if defined(__CYGWIN32__)34# define I38635# define CYGWIN3236# define mach_type_known37+#if defined(__CYGWIN__)38+# if defined(__LP64__)39+# define X86_6440+# define mach_type_known41+# else42+# define I38643+# endif44+# define CYGWIN3245+# define mach_type_known46+#endif47# endif48# if defined(__MINGW32__) && !defined(mach_type_known)49# define I38650@@ -502,6 +512,16 @@51# define mach_type_known52# endif5354+#if defined(__CYGWIN__)55+# if defined(__LP64__)56+# define X86_6457+# define mach_type_known58+# else59+# define I38660+# endif61+# define CYGWIN3262+# define mach_type_known63+#endif64/* Feel free to add more clauses here */6566/* Or manually define the machine type here. A machine type is */67@@ -2259,6 +2279,19 @@68# define GWW_VDB69# define DATAEND /* not needed */70# endif71+72+# ifdef CYGWIN3273+# define OS_TYPE "CYGWIN32"74+# define DATASTART ((ptr_t)GC_DATASTART) /* From gc.h */75+# define DATAEND ((ptr_t)GC_DATAEND)76+# define ALIGNMENT 877+# undef STACK_GRAN78+# define STACK_GRAN 0x1000079+# ifdef USE_MMAP80+# define NEED_FIND_LIMIT81+# define USE_MMAP_ANON82+# endif83+# endif84# endif /* X86_64 */8586# ifdef HEXAGON87--- a/os_dep.c 2012-08-09 16:25:13.000000000 -040088+++ b/os_dep.c 2013-04-22 12:43:32.202498600 -040089@@ -770,7 +770,14 @@90/* gcc version of boehm-gc). */91GC_API int GC_CALL GC_get_stack_base(struct GC_stack_base *sb)92{93+# ifdef __x86_64__94+ PNT_TIB pTib = NtCurrentTeb();95+ void * _tlsbase = pTib->StackBase;96+ /*void * _tlsbase = NtCurrentTeb()->pTib.StackBase;*/97+ /*extern void * _tlsbase __asm__ ("%gs:8");*/98+# else99extern void * _tlsbase __asm__ ("%fs:4");100+# endif101sb -> mem_base = _tlsbase;102return GC_SUCCESS;103}104105106