re PR libgcj/30513 (Bootstrap failure with libgcj on sparc-sun-solaris2.10)
authorAndreas Tobler <a.tobler@schweiz.org>
Sat, 27 Jan 2007 21:46:15 +0000 (21:46 +0000)
committerAndreas Tobler <andreast@gcc.gnu.org>
Sat, 27 Jan 2007 21:46:15 +0000 (22:46 +0100)
2007-01-27  Andreas Tobler  <a.tobler@schweiz.org>

PR libgcj/30513
* configure.host: Add forgottten sysdep_dir to sparc. Add a flag to
libgcj_flags to undefine 'sun' at compile time.
* sysdep/sparc/locks.h (read_barrier): New functions for 32 and 64 bit
Sparc.
(write_barrier): Likewise.

From-SVN: r121239

libjava/ChangeLog
libjava/configure.host
libjava/sysdep/sparc/locks.h

index 4e6e238684ebbf075761043aa6b56edf246c1900..7aea26537caa6a81357544c5b081923d586e860f 100644 (file)
@@ -1,3 +1,12 @@
+2007-01-27  Andreas Tobler  <a.tobler@schweiz.org>
+
+       PR libgcj/30513
+       * configure.host: Add forgottten sysdep_dir to sparc. Add a flag to
+       libgcj_flags to undefine 'sun' at compile time.
+       * sysdep/sparc/locks.h (read_barrier): New functions for 32 and 64 bit
+       Sparc.
+       (write_barrier): Likewise.
+
 2007-01-27  Keith Seitz  <keiths@redhat.com>
 
        * gnu/classpath/jdwp/natVMVirtualMachine.cc
@@ -61,7 +70,7 @@
     * libjava/testsuite/libjava.jvmti/jvmti-interp.exp: New file.
     * libjava/testsuite/libjava.jvmti/interp: New folder.
     * libjava/testsuite/lib/libjava.exp (exec_gij): New Method.
-        
+
 2007-01-24  Keith Seitz  <keiths@redhat.com>
 
        * link.cc (_Jv_Linker::wait_for_state): Add JVMTI
index e19a61a147e39a782754841ba07d38d029afd48f..edaa679b44e2d2ecd2ab99e71dc5b1196f78ab0b 100644 (file)
@@ -159,6 +159,10 @@ case "${host}" in
        enable_hash_synchronization_default=yes
        ;;
   sparc*-*)
+       sysdeps_dir=sparc
+       # On Solaris we have defined 'sun' which later conflicts with 
+       # namespace usage. So to work this away we use the below undefine.
+       libgcj_flags="${libgcj_flags} -Usun"
        libgcj_interpreter=yes
         ;;
   ia64-*)
index 7339567d7d4f86ff7366e1d6c468a1ecc7097af5..7c30d7c3b0ff00ea80812b1940cee5d59ba7b37d 100644 (file)
@@ -1,6 +1,6 @@
 // locks.h - Thread synchronization primitives. Sparc implementation.
 
-/* Copyright (C) 2002  Free Software Foundation
+/* Copyright (C) 2002, 2007  Free Software Foundation
 
    This file is part of libgcj.
 
@@ -38,12 +38,23 @@ release_set(volatile obj_addr_t *addr, obj_addr_t new_val)
 }
 
 inline static bool
-compare_and_swap_release(volatile obj_addr_t *addr,
-                                                    obj_addr_t old,
-                                                    obj_addr_t new_val)
+compare_and_swap_release(volatile obj_addr_t *addr, obj_addr_t old,
+                        obj_addr_t new_val)
 {
   return compare_and_swap(addr, old, new_val);
 }
+
+inline static void
+read_barrier()
+{
+  __asm__ __volatile__("membar #LoadLoad | #LoadStore" : : : "memory");
+}
+
+inline static void
+write_barrier()
+{
+  __asm__ __volatile__("membar #StoreLoad | #StoreStore" : : : "memory");
+}
 #else
 /* Sparc32 implementation, use a spinlock.  */
 static unsigned char __cas_lock = 0;
@@ -109,12 +120,23 @@ release_set(volatile obj_addr_t *addr, obj_addr_t new_val)
 }
 
 inline static bool
-compare_and_swap_release(volatile obj_addr_t *addr,
-                                                    obj_addr_t old,
-                                                    obj_addr_t new_val)
+compare_and_swap_release(volatile obj_addr_t *addr, obj_addr_t old,
+                        obj_addr_t new_val)
 {
   return compare_and_swap(addr, old, new_val);
 }
+
+inline static void
+read_barrier()
+{
+  __asm__ __volatile__ ("" : : : "memory");
+}
+
+inline static void
+write_barrier()
+{
+  __asm__ __volatile__ ("" : : : "memory");
+}
 #endif /* __arch64__ */
 
 #endif /* ! __SYSDEP_LOCKS_H__ */