OSDN Git Service

Remove dead endif so x86-64 compilation works.
[pf3gnuchains/gcc-fork.git] / boehm-gc / include / private / gcconfig.h
index 519bfc7..8fd2041 100644 (file)
 #    define I386
 #    define mach_type_known
 # endif
+# if defined(LINUX) && defined(__x86_64__)
+#    define X86_64
+#    define mach_type_known
+# endif
 # if defined(LINUX) && (defined(__ia64__) || defined(__ia64))
 #    define IA64
 #    define mach_type_known
                    /*                  (HPUX)                          */
                    /*             SH         ==> Hitachi SuperH        */
                    /*                  (LINUX & MSWINCE)               */
+                   /*             X86_64     ==> AMD x86-64            */
 
 
 /*
 #       define GETPAGESIZE()  sysconf(_SC_PAGESIZE)
                /* getpagesize() appeared to be missing from at least one */
                /* Solaris 5.4 installation.  Weird.                      */
-#       if CPP_WORDSZ == 32
-#        define DYNAMIC_LOADING
-#      endif
+#      define DYNAMIC_LOADING
 #   endif
 #   ifdef SUNOS4
 #      define OS_TYPE "SUNOS4"
 #     define DATAEND (_end)
 #     define SVR4
 #     ifdef __arch64__
-#       define STACKBOTTOM ((ptr_t) 0x80000000000ULL)
+       /* libc_stack_end is not set reliably for sparc64 */
+#       define STACKBOTTOM ((ptr_t) 0x80000000000)
 #      define DATASTART (ptr_t)GC_SysVGetDataStart(0x100000, _etext)
 #     else
-#       define STACKBOTTOM ((ptr_t) 0xf0000000)
+#       define LINUX_STACKBOTTOM
 #      define DATASTART (ptr_t)GC_SysVGetDataStart(0x10000, _etext)
 #     endif
 #   endif
       /* This was developed for a linuxce style platform.  Probably    */
       /* needs to be tweaked for workstation class machines.           */
 #     define OS_TYPE "LINUX"
+#     define DYNAMIC_LOADING
+      extern int _end[];
+#     define DATAEND (_end)
       extern int __data_start[];
 #     define DATASTART ((ptr_t)(__data_start))
 #     define ALIGNMENT 4
 #     define USE_GENERIC_PUSH_REGS
-#     define STACKBOTTOM ((ptr_t)0x7fff8000)
-        /* Older toolchains may need 0x80000000.       */
-       /* In many cases, this should probably use LINUX_STACKBOTTOM    */
-       /* instead. But some kernel versions seem to give the wrong     */
-       /* value from /proc.                                            */
+#     define LINUX_STACKBOTTOM
 #   endif /* Linux */
 #   ifdef EWS4800
 #      define HEURISTIC2
 #   define DATAEND /* not needed */
 # endif
 
+# ifdef X86_64
+#   define MACH_TYPE "X86_64"
+#   define ALIGNMENT 8
+#   define CPP_WORDSZ 64
+#   define CACHE_LINE_SIZE 64
+#   define USE_GENERIC_PUSH_REGS
+#   ifdef LINUX
+#      define OS_TYPE "LINUX"
+#       define LINUX_STACKBOTTOM
+#       if !defined(GC_LINUX_THREADS) || !defined(REDIRECT_MALLOC)
+#          define MPROTECT_VDB
+#      else
+           /* We seem to get random errors in incremental mode,        */
+           /* possibly because Linux threads is itself a malloc client */
+           /* and can't deal with the signals.                         */
+#      endif
+#       ifdef __ELF__
+#            define DYNAMIC_LOADING
+#           ifdef UNDEFINED    /* includes ro data */
+              extern int _etext[];
+#              define DATASTART ((ptr_t)((((word) (_etext)) + 0xfff) & ~0xfff))
+#           endif
+#           include <features.h>
+#           define LINUX_DATA_START
+            extern int _end[];
+#           define DATAEND (_end)
+#      else
+            extern int etext[];
+#            define DATASTART ((ptr_t)((((word) (etext)) + 0xfff) & ~0xfff))
+#       endif
+#      define PREFETCH(x) \
+         __asm__ __volatile__ ("       prefetch        %0": : "m"(*(char *)(x)))
+#      define PREFETCH_FOR_WRITE(x) \
+         __asm__ __volatile__ ("       prefetchw       %0": : "m"(*(char *)(x)))
+#   endif
+# endif
+
 #ifdef LINUX_DATA_START
     /* Some Linux distributions arrange to define __data_start.  Some  */
     /* define data_start as a weak symbol.  The latter is technically  */
 # define CAN_SAVE_CALL_STACKS
 # define CAN_SAVE_CALL_ARGS
 #endif
-#if defined(I386) && defined(LINUX)
+#if (defined(I386) || defined(X86_64)) && defined(LINUX)
     /* SAVE_CALL_CHAIN is supported if the code is compiled to save    */
     /* frame pointers by default, i.e. no -fomit-frame-pointer flag.   */
 # define CAN_SAVE_CALL_STACKS