From: Jonathan Chambers Date: Wed, 16 Apr 2008 01:07:58 +0000 (+0000) Subject: 2008-04-15 Jonathan Chambers X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=21e4448b2d4ddfdbb5a41d29f334194f2b4b4761;p=gc 2008-04-15 Jonathan Chambers * include/private/gcconfig.h: Backport GC7 code to support Win64. * win32_threads.c: Backport GC7 code to support Win64. svn path=/trunk/mono/; revision=100798 --- diff --git a/ChangeLog b/ChangeLog index 3bfe49b6..ea347612 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2008-04-15 Jonathan Chambers + * include/private/gcconfig.h: Backport GC7 code to support Win64. + * win32_threads.c: Backport GC7 code to support Win64. + 2008-02-07 Massimiliano Mantione * include/gc.h: (GCEventType): Added start-stop the world events. * pthread_stop_world.c: (GC_stop_world and GC_start_world): hooked diff --git a/include/private/gcconfig.h b/include/private/gcconfig.h index cf2a825c..11aee131 100644 --- a/include/private/gcconfig.h +++ b/include/private/gcconfig.h @@ -399,14 +399,18 @@ # else # if (defined(_MSDOS) || defined(_MSC_VER)) && (_M_IX86 >= 300) \ || defined(_WIN32) && !defined(__CYGWIN32__) && !defined(__CYGWIN__) -# define I386 -# define MSWIN32 /* or Win32s */ -# define mach_type_known -# endif -# if defined(_MSC_VER) && defined(_M_IA64) -# define IA64 -# define MSWIN32 /* Really win64, but we don't treat 64-bit */ - /* variants as a differnt platform. */ +# if defined(__LP64__) || defined(_WIN64) +# define X86_64 +# else +# define I386 +# endif +# define MSWIN32 /* or Win64 */ +# define mach_type_known +# endif +# if defined(_MSC_VER) && defined(_M_IA64) +# define IA64 +# define MSWIN32 /* Really win64, but we don't treat 64-bit */ + /* variants as a differnt platform. */ # endif # endif # if defined(__DJGPP__) diff --git a/win32_threads.c b/win32_threads.c index a9569c83..deb3eae4 100644 --- a/win32_threads.c +++ b/win32_threads.c @@ -385,7 +385,11 @@ void GC_push_all_stacks() # define PUSH4(r1,r2,r3,r4) PUSH2(r1,r2), PUSH2(r3,r4) # if defined(I386) PUSH4(Edi,Esi,Ebx,Edx), PUSH2(Ecx,Eax), PUSH1(Ebp); - sp = (ptr_t)context.Esp; + sp = (ptr_t)context.Esp; +# elif defined(X86_64) + PUSH4(Rax,Rcx,Rdx,Rbx); PUSH2(Rbp, Rsi); PUSH1(Rdi); + PUSH4(R8, R9, R10, R11); PUSH4(R12, R13, R14, R15); + sp = (ptr_t)context.Rsp; # elif defined(ARM32) PUSH4(R0,R1,R2,R3),PUSH4(R4,R5,R6,R7),PUSH4(R8,R9,R10,R11),PUSH1(R12); sp = (ptr_t)context.Sp;