[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: libgcj



These are the patches.  I have run this version of libgc through some tests, but
there must be something wrong.  The below worked for me, and built in about 1 1/2
hours

cd libgcj-2.95.1
patch -p1 <Patchlibgc
mkdir anything
cd anything
../configure  i386-gnu
make

Please let me know of any progress,  we can always have another go.

Chris



diff -Naur libgcj-2.95.1/boehm-gc/config.h new/boehm-gc/config.h
--- libgcj-2.95.1/boehm-gc/config.h	Mon Jul 19 20:32:38 1999
+++ new/boehm-gc/config.h	Sat Mar 25 14:28:58 2000
@@ -241,6 +241,13 @@
 #   endif
 #   define mach_type_known
 # endif
+# if defined(__GNU__)
+#   if defined(__i386__)  
+#     define  HURD
+#     define  I386
+#     define  mach_type_known
+#    endif 
+# endif
 
 /* Feel free to add more clauses here */
 
@@ -911,6 +918,18 @@
 #	define DATAEND (&_end)
 #	define HEURISTIC2
 # endif
+
+#   ifdef HURD
+#       define OS_TYPE "HURD"
+#       define HEURISTIC2
+        extern int  __data_start;
+#       define DATASTART ( (ptr_t) (&__data_start))
+        extern int   _end;
+#       define DATAEND ( (ptr_t) (&_end))
+#       define MPROTECT_VDB
+#       define DYNAMIC_LOADING
+#       define LARGE_CONFIG
+#   endif
 
 # ifndef STACK_GROWS_UP
 #   define STACK_GROWS_DOWN
diff -Naur libgcj-2.95.1/boehm-gc/dyn_load.c new/boehm-gc/dyn_load.c
--- libgcj-2.95.1/boehm-gc/dyn_load.c	Mon Apr 26 15:15:04 1999
+++ new/boehm-gc/dyn_load.c	Sat Mar 25 15:17:04 2000
@@ -48,7 +48,7 @@
 #if !defined(SUNOS4) && !defined(SUNOS5DL) && !defined(IRIX5) && \
     !defined(MSWIN32) && !(defined(ALPHA) && defined(OSF1)) && \
     !defined(HP_PA) && (!defined(LINUX) && !defined(__ELF__)) && \
-    !defined(RS6000) && !defined(SCO_ELF)
+    !defined(RS6000) && !defined(SCO_ELF) && !defined(HURD)
  --> We only know how to find data segments of dynamic libraries for the
  --> above.  Additional SVR4 variants might not be too
  --> hard to add.
@@ -261,7 +261,7 @@
 # endif /* !USE_PROC ... */
 # endif /* SUNOS */
 
-#if defined(LINUX) && defined(__ELF__) || defined(SCO_ELF)
+#if defined(LINUX) && defined(__ELF__) || defined(SCO_ELF) || defined(HURD)
 
 /* Dynamic loading code for Linux running ELF. Somewhat tested on
  * Linux/x86, untested but hopefully should work on Linux/Alpha. 
diff -Naur libgcj-2.95.1/boehm-gc/mach_dep.c new/boehm-gc/mach_dep.c
--- libgcj-2.95.1/boehm-gc/mach_dep.c	Fri Jun 18 00:22:51 1999
+++ new/boehm-gc/mach_dep.c	Sat Mar 25 14:38:48 2000
@@ -170,7 +170,8 @@
 
 #       if defined(I386) &&!defined(OS2) &&!defined(SVR4) &&!defined(MSWIN32) \
 	&& !defined(SCO) && !defined(SCO_ELF) && !(defined(LINUX) \
-	&& defined(__ELF__)) && !defined(DOS4GW) && !defined(FREEBSD)
+	&& defined(__ELF__)) && !defined(DOS4GW) && !defined(FREEBSD)  \
+        && !defined(HURD)
 	/* I386 code, generic code does not appear to work */
 	/* It does appear to work under OS2, and asms dont */
 	/* This is used for some 38g UNIX variants and for CYGWIN32 */
@@ -183,8 +184,11 @@
 	  asm("pushl %ebx");  asm("call _GC_push_one"); asm("addl $4,%esp");
 #       endif
 
-#	if defined(I386) && (defined(LINUX) || defined(FREEBSD)) && defined(__ELF__)
-	/* This is modified for Linux/FreeBSD with ELF (Note: _ELF_ only) */
+#	if defined(I386) && (defined(LINUX) \
+        || defined(FREEBSD)) && defined(__ELF__) \
+        || defined(HURD)
+  	/* This is modified for Linux/FreeBSD with ELF (Note: _ELF_ only) */
+	  /* The Hurd uses ELF, many thanks */     
 	  asm("pushl %eax");  asm("call GC_push_one"); asm("addl $4,%esp");
 	  asm("pushl %ecx");  asm("call GC_push_one"); asm("addl $4,%esp");
 	  asm("pushl %edx");  asm("call GC_push_one"); asm("addl $4,%esp");
@@ -332,7 +336,7 @@
 #       if !(defined M68K) && !(defined VAX) && !(defined RT) 
 #	if !(defined SPARC) && !(defined I386) && !(defined NS32K)
 #	if !defined(HP_PA) && !defined(M88K) && !defined(POWERPC)
-#	if !defined(UTS4)
+#	if !defined(UTS4) && !defined(HURD)
 	    --> bad news <--
 # 	endif
 #       endif
diff -Naur libgcj-2.95.1/boehm-gc/os_dep.c new/boehm-gc/os_dep.c
--- libgcj-2.95.1/boehm-gc/os_dep.c	Mon Jul 19 20:32:38 1999
+++ new/boehm-gc/os_dep.c	Sat Mar 25 15:07:13 2000
@@ -72,6 +72,10 @@
 #   define NEED_FIND_LIMIT
 # endif
 
+# if defined(HURD)
+#   define NEED_FIND_LIMIT
+# endif
+
 #ifdef NEED_FIND_LIMIT
 #   include <setjmp.h>
 #endif
@@ -1251,9 +1255,14 @@
 /* environment, this is also responsible for marking from 	*/
 /* thread stacks.  In the SRC_M3 case, it also handles		*/
 /* global variables.						*/
+
 #ifndef THREADS
+#ifndef HURD
 void (*GC_push_other_roots)() = 0;
-#else /* THREADS */
+#endif
+#endif
+
+#if defined(THREADS)  || defined(HURD)
 
 # ifdef PCR
 PCR_ERes GC_push_thread_stack(PCR_Th_T *t, PCR_Any dummy)
@@ -1374,8 +1383,11 @@
 }
 
 # endif /* SOLARIS_THREADS || ... */
-
+#if !defined(HURD)
 void (*GC_push_other_roots)() = GC_default_push_other_roots;
+#else
+void (*GC_push_other_roots)() = 0;
+#endif
 
 #endif
 
@@ -1527,7 +1539,7 @@
 #if defined(SUNOS4) || defined(FREEBSD)
     typedef void (* SIG_PF)();
 #endif
-#if defined(SUNOS5SIGS) || defined(OSF1) || defined(LINUX)
+#if defined(SUNOS5SIGS) || defined(OSF1) || defined(LINUX) || defined(HURD)
     typedef void (* SIG_PF)(int);
 #endif
 #if defined(MSWIN32)
@@ -1536,7 +1548,7 @@
 #   define SIG_DFL (LPTOP_LEVEL_EXCEPTION_FILTER) (-1)
 #endif
 
-#if defined(IRIX5) || defined(OSF1)
+#if defined(IRIX5) || defined(OSF1) || defined(HURD)
     typedef void (* REAL_SIG_PF)(int, int, struct sigcontext *);
 #endif
 #if defined(SUNOS5SIGS)
@@ -1606,8 +1618,17 @@
 #   define CODE_OK (exc_info -> ExceptionRecord -> ExceptionInformation[0] == 1)
 			/* Write fault */
 # endif
+# if defined(HURD)
+
+    void GC_write_fault_handler(int sig, int code, struct sigcontext *scp)
+#   define SIG_OK (sig == SIGSEGV || sig == SIGBUS)
+#   define CODE_OK TRUE
+# endif
 {
     register unsigned i;
+#   ifdef HURD
+        char * addr = (char *)  code;
+#   endif
 #   ifdef IRIX5
 	char * addr = (char *) (size_t) (scp -> sc_badvaddr);
 #   endif
@@ -1681,6 +1702,10 @@
 #		ifdef MSWIN32
 		    return((*old_handler)(exc_info));
 #		endif
+#		ifdef HURD
+		    (*(REAL_SIG_PF)old_handler) (sig, code, scp);
+		    return;
+#               endif
             }
         }
         for (i = 0; i < divHBLKSZ(GC_page_size); i++) {
@@ -1768,7 +1793,7 @@
 #	endif
       }
 #   endif
-#   if defined(OSF1) || defined(SUNOS4) || defined(LINUX)
+#   if defined(OSF1) || defined(SUNOS4) || defined(LINUX) || defined(HURD)
       GC_old_segv_handler = signal(SIGSEGV, (SIG_PF)GC_write_fault_handler);
       if (GC_old_segv_handler == SIG_IGN) {
         GC_err_printf0("Previously ignored segmentation violation!?");
@@ -1932,7 +1957,11 @@
 	    result = readv(fd, &iov, 1);
 	}
 #   else
+#     ifdef HURD
+        result = __read( fd, buf, nbyte);
+#     else
     	result = syscall(SYS_read, fd, buf, nbyte);
+#     endif
 #   endif
     GC_end_syscall();
     return(result);
diff -Naur libgcj-2.95.1/libjava/include/jvm.h new/libjava/include/jvm.h
--- libgcj-2.95.1/libjava/include/jvm.h	Wed Apr  7 15:52:35 1999
+++ new/libjava/include/jvm.h	Sat Mar 25 16:10:43 2000
@@ -91,6 +91,15 @@
 extern "C" void _Jv_CheckArrayStore (jobject array, jobject obj);
 extern "C" void _Jv_RegisterClass (jclass klass);
 extern "C" void _Jv_RegisterClasses (jclass *classes);
+
+extern "C"
+{
+#ifdef __GNU__
+#define MAXHOSTNAMELEN  24
+#define MAXPATHLEN  512
+#endif
+}
+
 extern jclass _Jv_FindClass (_Jv_Utf8Const *name,
 			     java::lang::ClassLoader *loader);
 extern jclass _Jv_FindClassFromSignature (char *,

Reply to: