Build problem(libgcj on linuxppc(R5)) (fwd)
jerry@zaphod.mc.vanderbilt.edu
jerry@zaphod.mc.vanderbilt.edu
Sun Sep 5 14:21:00 GMT 1999
---------- Forwarded message ----------
Date: 05 Sep 1999 15:22:05 -0400
From: minyard@acm.org
To: jerry@zaphod.mc.vanderbilt.edu
Cc: java-discuss@sourceware.cygnus.com
Subject: Re: Build problem(libgcj on linuxppc(R5))
I'm successfully using libgcj on LinuxPPC R5 now with the following
patch. I know these need to be applied for R5 to work properly, but
your problems don't seem to be related to this. However, it might
be worth a try. With these patches, I have compiled a bunch of
stuff without a problem.
Corey
diff -ur orig/libgcj-2.95.1/boehm-gc/config.h libgcj-2.95.1/boehm-gc/config.h
--- orig/libgcj-2.95.1/boehm-gc/config.h Mon Jul 19 15:32:38 1999
+++ libgcj-2.95.1/boehm-gc/config.h Fri Aug 27 11:03:13 1999
@@ -454,9 +454,11 @@
# ifdef LINUX
# define OS_TYPE "LINUX"
# define STACKBOTTOM ((ptr_t)0x80000000)
-# define DATASTART GC_data_start
+ extern int __data_start;
+# define DATASTART (&__data_start)
extern int _end;
# define DATAEND (&_end)
+# define DYNAMIC_LOADING
# endif
# endif
diff -ur orig/libgcj-2.95.1/boehm-gc/gc_priv.h libgcj-2.95.1/boehm-gc/gc_priv.h
--- orig/libgcj-2.95.1/boehm-gc/gc_priv.h Tue Aug 17 18:42:27 1999
+++ libgcj-2.95.1/boehm-gc/gc_priv.h Fri Aug 27 11:00:27 1999
@@ -465,6 +465,30 @@
__asm__ __volatile__("mb": : :"memory");
*(addr) = 0;
}
+
+# elif defined(__powerpc__)
+ inline static int GC_test_and_set(volatile unsigned int *addr) {
+ int ret, oldval=0, newval=1;
+
+ __asm__ __volatile__("sync" : : : "memory");
+ __asm__ __volatile__(
+ "0: lwarx %0,0,%1 ;"
+ " xor. %0,%3,%0;"
+ " bne 1f;"
+ " stwcx. %2,0,%1;"
+ " bne- 0b;"
+ "1: "
+ : "=&r"(ret)
+ : "r"(addr), "r"(newval), "r"(oldval)
+ : "cr0", "memory");
+ __asm__ __volatile__("sync" : : : "memory");
+ return ret == 0;
+ }
+ inline static void GC_clear(volatile unsigned int *addr) {
+ __asm__ __volatile__("sync": : :"memory");
+ *(addr) = 0;
+ }
+
# else
-- > Need implementation of GC_test_and_set()
# endif
diff -ur orig/libgcj-2.95.1/boehm-gc/misc.c libgcj-2.95.1/boehm-gc/misc.c
--- orig/libgcj-2.95.1/boehm-gc/misc.c Mon Jul 19 15:32:38 1999
+++ libgcj-2.95.1/boehm-gc/misc.c Fri Aug 27 11:32:51 1999
@@ -433,9 +433,6 @@
# ifdef MSWIN32
GC_init_win32();
# endif
-# if defined(LINUX) && defined(POWERPC)
- GC_init_linuxppc();
-# endif
# if defined(LINUX) && defined(ALPHA)
GC_init_linuxalpha();
# endif
diff -ur orig/libgcj-2.95.1/boehm-gc/os_dep.c libgcj-2.95.1/boehm-gc/os_dep.c
--- orig/libgcj-2.95.1/boehm-gc/os_dep.c Mon Jul 19 15:32:38 1999
+++ libgcj-2.95.1/boehm-gc/os_dep.c Fri Aug 27 11:32:02 1999
@@ -68,7 +68,7 @@
# define NEED_FIND_LIMIT
# endif
-# if defined(LINUX) && (defined(POWERPC) || defined(ALPHA) || defined(SPARC))
+# if defined(LINUX) && (defined(ALPHA) || defined(SPARC))
# define NEED_FIND_LIMIT
# endif
@@ -135,19 +135,6 @@
# define OPT_PROT_EXEC 0
#endif
-#if defined(LINUX) && defined(POWERPC)
- ptr_t GC_data_start;
-
- void GC_init_linuxppc()
- {
- extern ptr_t GC_find_limit();
- extern char **_environ;
- /* This may need to be environ, without the underscore, for */
- /* some versions. */
- GC_data_start = GC_find_limit((ptr_t)&_environ, FALSE);
- }
-#endif
-
#if defined(LINUX) && defined(ALPHA)
ptr_t GC_data_start;
@@ -1620,6 +1607,8 @@
# ifdef LINUX
# ifdef I386
char * addr = (char *) (sc.cr2);
+# elif defined(POWERPC)
+ char * addr = (char *) (sc.regs->dar);
# else
char * addr = /* As of 1.3.90 there seemed to be no way to do this. */;
# endif
More information about the Java
mailing list