]> granicus.if.org Git - gc/commitdiff
Enable Java on Cygwin-64
authoredlinger <edlinger@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 13 May 2014 16:23:11 +0000 (16:23 +0000)
committerIvan Maidanski <ivmai@mail.ru>
Wed, 20 May 2015 08:36:40 +0000 (11:36 +0300)
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  <bernd.edlinger@hotmail.de>

        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  <bernd.edlinger@hotmail.de>

        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  <bernd.edlinger@hotmail.de>

        * unwind-seh.c (_Unwind_Backtrace): Uncommented, finished
        implementation.

libjava/ChangeLog:

2014-05-13  Bernd Edlinger  <bernd.edlinger@hotmail.de>

        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  <bernd.edlinger@hotmail.de>

        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
include/gc_config_macros.h
win32_threads.c

index 1b5c92d878b3728d592e1355c9e02c01d59994a9..50a0802d9d8b39cce43ece85baa0e8be0ec76b17 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2014-05-13  Bernd Edlinger  <bernd.edlinger@hotmail.de>
+
+       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  <jakub@redhat.com>
 
        PR other/43620
index fd3006c178904d007d89c135476a18541dd298ec..a01da4a1342d177b0401f9396c62d2924edc22d4 100644 (file)
@@ -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
 
index ffb34e0a8b1a9218290b85aa85d4a2b7ea8f064c..2de1c6953b870f1a1df07927f87da32dd43e0fde 100644 (file)
@@ -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 */