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:
- Follow-Ups:
- Re: libgcj
- From: Marcus Brinkmann <Marcus.Brinkmann@ruhr-uni-bochum.de>
- References:
- libgcj
- From: Chris Lingard <chris@highludworth.freeserve.co.uk>
- Re: libgcj
- From: Jim Franklin <jfranklin@etworld.com>