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