OSDN Git Service

* os_dep.c, include/private/gc_locks.h: Import CRIS port by
authorhp <hp@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 19 Apr 2005 16:01:38 +0000 (16:01 +0000)
committerhp <hp@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 19 Apr 2005 16:01:38 +0000 (16:01 +0000)
Simon Posnjak from gc6.4.
* include/private/gcconfig.h: Ditto.  Add M32R note from gc6.4.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@98414 138bc75d-0d04-0410-961f-82ee72b054a4

boehm-gc/ChangeLog
boehm-gc/include/private/gc_locks.h
boehm-gc/include/private/gcconfig.h
boehm-gc/os_dep.c

index 87ca45c..2645277 100644 (file)
@@ -1,3 +1,9 @@
+2005-04-19  Hans-Peter Nilsson  <hp@axis.com>
+
+       * os_dep.c, include/private/gc_locks.h: Import CRIS port by
+       Simon Posnjak from gc6.4.
+       * include/private/gcconfig.h: Ditto.  Add M32R note from gc6.4.
+
 2005-04-17  David S. Miller  <davem@davemloft.net>
 
        * include/private/gcconfig.h (sparc-linux): Use LINUX_STACKBOTTOM.
index 775176b..46605ca 100644 (file)
         }
 #       define GC_TEST_AND_SET_DEFINED
 #    endif /* ARM32 */
+#    ifdef CRIS
+        inline static int GC_test_and_set(volatile unsigned int *addr) {
+         /* Ripped from linuxthreads/sysdeps/cris/pt-machine.h.        */
+         /* Included with Hans-Peter Nilsson's permission.             */
+         register unsigned long int ret;
+
+         /* Note the use of a dummy output of *addr to expose the write.
+          * The memory barrier is to stop *other* writes being moved past
+          * this code.
+          */
+           __asm__ __volatile__("clearf\n"
+                                "0:\n\t"
+                                "movu.b [%2],%0\n\t"
+                                "ax\n\t"
+                                "move.b %3,[%2]\n\t"
+                                "bwf 0b\n\t"
+                                "clearf"
+                                : "=&r" (ret), "=m" (*addr)
+                                : "r" (addr), "r" ((int) 1), "m" (*addr)
+                                : "memory");
+           return ret;
+        }
+#       define GC_TEST_AND_SET_DEFINED
+#    endif /* CRIS */
 #    ifdef S390
        inline static int GC_test_and_set(volatile unsigned int *addr) {
          int ret;
index a9ed717..5013dbd 100644 (file)
 #    define ARM32
 #    define mach_type_known
 # endif
+# if defined(LINUX) && defined(__cris__)
+#    ifndef CRIS
+#      define CRIS
+#    endif
+#    define mach_type_known
+# endif
 # if defined(LINUX) && (defined(powerpc) || defined(__powerpc__) || defined(powerpc64) || defined(__powerpc64__))
 #    define POWERPC
 #    define mach_type_known
                    /*             POWERPC    ==> IBM/Apple PowerPC     */
                    /*                  (MACOS(<=9),DARWIN(incl.MACOSX),*/
                    /*                   LINUX, NETBSD, NOSYS variants) */
+                   /*             CRIS       ==> Axis Etrax            */
+                   /*             M32R       ==> Renesas M32R          */
 
 
 /*
 #   endif
 #endif
 
+# ifdef CRIS
+#   define MACH_TYPE "CRIS"
+#   define CPP_WORDSZ 32
+#   define ALIGNMENT 1
+#   define OS_TYPE "LINUX"
+#   define DYNAMIC_LOADING
+#   define LINUX_STACKBOTTOM
+#   define USE_GENERIC_PUSH_REGS
+#   define SEARCH_FOR_DATA_START
+      extern int _end[];
+#   define DATAEND (_end)
+# endif
+
 # ifdef SH
 #   define MACH_TYPE "SH"
 #   define ALIGNMENT 4
 # endif
 
 # if defined(HP_PA) || defined(M88K) || defined(POWERPC) && !defined(DARWIN) \
-            || defined(LINT) || defined(MSWINCE) || defined(ARM32) \
+            || defined(LINT) || defined(MSWINCE) || defined(ARM32) || defined(CRIS) \
             || (defined(I386) && defined(__LCC__))
        /* Use setjmp based hack to mark from callee-save registers.    */
        /* The define should move to the individual platform            */
index 30c2b8b..c4775c1 100644 (file)
@@ -2519,7 +2519,11 @@ SIG_PF GC_old_segv_handler;      /* Also old MSWIN32 ACCESS_VIOLATION filter */
 #               if defined(ARM32)
                   char * addr = (char *)sc.fault_address;
 #               else
-                 --> architecture not supported
+#                if defined(CRIS)
+                   char * addr = (char *)sc.regs.csraddr;
+#                else
+                   --> architecture not supported
+#                endif
 #               endif
 #            endif
 #          endif