]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
gcconfig.h (sparc-linux): Use LINUX_STACKBOTTOM.
authorDavid S. Miller <davem@davemloft.net>
Mon, 18 Apr 2005 22:25:05 +0000 (22:25 +0000)
committerDavid S. Miller <davem@gcc.gnu.org>
Mon, 18 Apr 2005 22:25:05 +0000 (15:25 -0700)
* 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.

From-SVN: r98354

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

index e3f743e6fc61556738bd0b7ab849232fdb2edd19..19b8ead4e418a71377dd801874189d8866f8ce59 100644 (file)
@@ -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-11  Richard Henderson  <rth@redhat.com>
 
        * include/private/gcconfig.h (alpha-linux): Use LINUX_STACKBOTTOM.
index 20768ea2dabe6acfa52013a5877974e1e32a505f..19825caf63de9ab7cefb4e90e1cb8df208528cbd 100644 (file)
 #     define SVR4
 #     ifdef __arch64__
        /* libc_stack_end is not set reliably for sparc64 */
-#       define STACKBOTTOM ((ptr_t) 0x80000000000)
 #      define DATASTART (ptr_t)GC_SysVGetDataStart(0x100000, _etext)
 #     else
-#       define LINUX_STACKBOTTOM
 #      define DATASTART (ptr_t)GC_SysVGetDataStart(0x10000, _etext)
 #     endif
+#     define LINUX_STACKBOTTOM
 #   endif
 #   ifdef OPENBSD
 #     define OS_TYPE "OPENBSD"
index 82386ec4fba1bfc93259793ea388faf016e283be..e129a7ad5a59c02d72358558a483e3d1aa35bfe0 100644 (file)
@@ -710,7 +710,16 @@ ptr_t GC_get_stack_base()
 
     /* First try the easy way.  This should work for glibc 2.2 */
       if (0 != &__libc_stack_end) {
+#      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
       }
     f = open("/proc/self/stat", O_RDONLY);
     if (f < 0 || STAT_READ(f, stat_buf, STAT_BUF_SIZE) < 2 * STAT_SKIP) {