From 5ee0dffebbfaf9e7e393c1dccd25a024b7d186b1 Mon Sep 17 00:00:00 2001 From: edlinger Date: Tue, 13 May 2014 16:23:11 +0000 Subject: [PATCH] Enable Java on Cygwin-64 Currently it is not possible to build GCC's libjava support on Cygwin-64. This patch fixes the current build-problems on Cygwin-64 and the most fundamental bugs on that platform. Note you must still add --enable-threads=posix to successfully build the java language support. ChangeLog: 2014-05-13 Bernd Edlinger 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. libffi/ChangeLog: 2014-05-13 Bernd Edlinger Fix current cygwin-64 build problems. * src/java_raw_api.c: Remove if !defined(FFI_NO_RAW_API). * src/x86/ffi.c: Add if defined(__CYGWIN__). * src/x86/win64.S (ffi_closure_win64, ffi_call_win64): Added handling for FFI_TYPE_UINT64, FFI_TYPE_POINTER and FFI_TYPE_INT. Added SEH information. Fixed formatting. libgcc/ChangeLog: 2014-05-13 Bernd Edlinger * unwind-seh.c (_Unwind_Backtrace): Uncommented, finished implementation. libjava/ChangeLog: 2014-05-13 Bernd Edlinger Fix current cygwin-64 build problems. * configure.host: Added handling for x86_64-*-cygwin/mingw. * boehm.cc (_Jv_GCAttachThread, _Jv_GCDetachThread): Don't compile if GC_WIN32_THREADS is defined. * java/lang/natClass.cc (_Jv_InterfaceAssignableFrom): Rename interface to source_interface. libjava/classpath/ChangeLog: 2014-05-13 Bernd Edlinger Fix current cygwin-64 build problems. * native/fdlibm/mprec.c (_REENT_CHECK_MP, _REENT_MP_FREELIST, _REENT_MP_P5S, __ULong, __Long): Undefine previous definitions. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@210386 138bc75d-0d04-0410-961f-82ee72b054a4 --- ChangeLog | 8 ++++++++ include/gc_config_macros.h | 2 +- win32_threads.c | 10 +++++++++- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 1b5c92d8..50a0802d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2014-05-13 Bernd Edlinger + + 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. + 2014-04-22 Jakub Jelinek PR other/43620 diff --git a/include/gc_config_macros.h b/include/gc_config_macros.h index fd3006c1..a01da4a1 100644 --- a/include/gc_config_macros.h +++ b/include/gc_config_macros.h @@ -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 --git a/win32_threads.c b/win32_threads.c index ffb34e0a..2de1c695 100644 --- a/win32_threads.c +++ b/win32_threads.c @@ -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 */ -- 2.40.0