]> granicus.if.org Git - gc/commitdiff
2005-04-17 David S. Miller <davem@davemloft.net>
authordavem <davem@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 17 Apr 2005 22:01:21 +0000 (22:01 +0000)
committerguest <ivmai@mail.ru>
Fri, 29 Jul 2011 06:54:26 +0000 (10:54 +0400)
* include/private/gcconfig.h (sparc-linux): Use LINUX_STACKBOTTOM.
* os_dep.c (GC_linux_stack_base): Check for bug present in some
Sparc glibc variants where __libc_stack_end is erroneously set
to "1".  Fallback to procfs code in that case.

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

ChangeLog
include/private/gcconfig.h
os_dep.c

index bc73cc4f86c65943c750e8d3598b5333748275f4..87ca45c771dc8cb099f955f4f9222a2e74d32baf 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2005-04-17  David S. Miller  <davem@davemloft.net>
+
+       * include/private/gcconfig.h (sparc-linux): Use LINUX_STACKBOTTOM.
+       * os_dep.c (GC_linux_stack_base): Check for bug present in some
+       Sparc glibc variants where __libc_stack_end is erroneously set
+       to "1".  Fallback to procfs code in that case.
+
 2005-04-12  Mike Stump  <mrs@apple.com>
 
        * configure: Regenerate.
index 7f3b63e4a2cfe3447fe55918dc248454b4dc8ff5..a9ed7176ba6e9cc1aa61dc48133ce21e343b391d 100644 (file)
       extern ptr_t GC_SysVGetDataStart();
 #     ifdef __arch64__
 #      define DATASTART GC_SysVGetDataStart(0x100000, _etext)
-       /* libc_stack_end is not set reliably for sparc64 */
-#       define STACKBOTTOM ((ptr_t) 0x80000000000ULL)
 #     else
 #       define DATASTART GC_SysVGetDataStart(0x10000, _etext)
-#      define LINUX_STACKBOTTOM
 #     endif
+#     define LINUX_STACKBOTTOM
 #   endif
 #   ifdef OPENBSD
 #     define OS_TYPE "OPENBSD"
index 21d05635ab81740ddfcc43393be384d09d241c64..30c2b8bc4ab8c3aeea42f7cc9d4d27807991f770 100644 (file)
--- a/os_dep.c
+++ b/os_dep.c
@@ -945,7 +945,16 @@ ptr_t GC_get_stack_base()
          } /* Otherwise it's not safe to add 16 bytes and we fall      */
            /* back to using /proc.                                     */
 #      else 
+#      ifdef SPARC
+         /* Older versions of glibc for 64-bit Sparc do not set
+          * this variable correctly, it gets set to either zero
+          * or one.
+          */
+         if (__libc_stack_end != (ptr_t) (unsigned long)0x1)
+           return __libc_stack_end;
+#      else
          return __libc_stack_end;
+#      endif
 #      endif
       }
     f = open("/proc/self/stat", O_RDONLY);