Re: [Gc] Boehm-GC Patch for Cygwin-64

Ivan Maidanski <ivmai-JGs/[email protected]> Wed, 14 May 2014 10:14:55 +0400
Newsgroups gmane.comp.programming.garbage-collection.boehmgc
Message-ID <[email protected]>
 Hi Bernd,
To be included in the upstream, please make the patch against fresh master of bdwgc.git
Thanks
--
Tue, 13 May 2014, 12:49 +04:00 from Bernd Edlinger <[email protected]>:
Hi,
I'm about to add support for Cygwin-64 to GCC's boehm_gc.
There were a few build-problems under Cygwin-64.
The define __CYGWIN32__ is only defined for the 32-bit variant,
but __CYGWIN__ is defined for 32-bit and 64-bit variants.
And the registers are of course different ones in win32_threads.c.
Could some one please take care, that this change (or an equivalent fix)
also goes to the original boehm_gc source?
Thanks
Bernd Edlinger.
boehm-gc/ChangeLog:
2014-05-11  Bernd Edlinger  < [email protected] >
Fix current cygwin-64 build problems.
* include/gc_config_macros.h (GC_PTHREADS): Use __CYGWIN__ instead
of __CYGWIN32__ here.
* win32_threads.c (GC_push_all_stacks): Push all X86_64 registers.
(GC_get_thread_stack_base): Get the stack base for X86_64.
diff -pur boehm-gc/include/gc_config_macros.h boehm-gc/include/gc_config_macros.h
--- boehm-gc/include/gc_config_macros.h	2012-11-04 23:56:02.000000000 +0100
+++ boehm-gc/include/gc_config_macros.h	2014-05-05 15:48:50.430664000 +0200
@@ -23,7 +23,7 @@
 	defined(GC_HPUX_THREADS) || defined(GC_OSF1_THREADS) || \
 	defined(GC_DGUX386_THREADS) || defined(GC_DARWIN_THREADS) || \
 	defined(GC_AIX_THREADS) || \
-        (defined(GC_WIN32_THREADS) && defined(__CYGWIN32__))
+        (defined(GC_WIN32_THREADS) && defined(__CYGWIN__))
 #   define GC_PTHREADS
 # endif
 
diff -pur boehm-gc/win32_threads.c boehm-gc/win32_threads.c
--- boehm-gc/win32_threads.c	2009-05-17 22:07:18.000000000 +0200
+++ boehm-gc/win32_threads.c	2014-05-05 15:51:34.290039000 +0200
@@ -365,7 +365,11 @@ void GC_push_all_stacks()
 #       define PUSH1(reg) GC_push_one((word)context.reg)
 #       define PUSH2(r1,r2) PUSH1(r1), PUSH1(r2)
 #       define PUSH4(r1,r2,r3,r4) PUSH2(r1,r2), PUSH2(r3,r4)
-#       if defined(I386)
+#       if defined(__x86_64__)
+          PUSH4(Rdi,Rsi,Rbx,Rdx), PUSH2(Rcx,Rax), PUSH1(Rbp);
+          PUSH4(R8,R9,R10,R11), PUSH4(R12,R13,R14,R15);
+          sp = (ptr_t)context.Rsp;
+#       elif defined(I386)
           PUSH4(Edi,Esi,Ebx,Edx), PUSH2(Ecx,Eax), PUSH1(Ebp);
 	  sp = (ptr_t)context.Esp;
 #       elif defined(ARM32)
@@ -755,8 +759,12 @@ int GC_pthread_detach(pthread_t thread)
 
 GC_PTR GC_get_thread_stack_base()
 {
+#ifdef __x86_64__
+  return ((NT_TIB*)NtCurrentTeb())->StackBase;
+#else
   extern GC_PTR _tlsbase __asm__ ("%fs:4");
   return _tlsbase;
+#endif
 }
 
 #else /* !CYGWIN32 */
 		 	   		
_______________________________________________
bdwgc mailing list
[email protected]
https://lists.opendylan.org/mailman/listinfo/bdwgc

_______________________________________________
bdwgc mailing list
[email protected]
https://lists.opendylan.org/mailman/listinfo/bdwgc