aboutsummaryrefslogtreecommitdiff
path: root/boehm-gc
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2005-04-17 22:01:21 +0000
committerDavid S. Miller <davem@gcc.gnu.org>2005-04-17 15:01:21 -0700
commit22d97adab531fe6896131e27a806b685c9aae8e7 (patch)
tree6070b7e1958a3b47be4d8b147bcdb1497807a8f2 /boehm-gc
parent03a0866432efadc888d6a65651943b89e2ae6eb0 (diff)
gcconfig.h (sparc-linux): Use LINUX_STACKBOTTOM.
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. From-SVN: r98303
Diffstat (limited to 'boehm-gc')
-rw-r--r--boehm-gc/ChangeLog7
-rw-r--r--boehm-gc/include/private/gcconfig.h4
-rw-r--r--boehm-gc/os_dep.c9
3 files changed, 17 insertions, 3 deletions
diff --git a/boehm-gc/ChangeLog b/boehm-gc/ChangeLog
index bc73cc4f86c..87ca45c771d 100644
--- a/boehm-gc/ChangeLog
+++ b/boehm-gc/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.
diff --git a/boehm-gc/include/private/gcconfig.h b/boehm-gc/include/private/gcconfig.h
index 7f3b63e4a2c..a9ed7176ba6 100644
--- a/boehm-gc/include/private/gcconfig.h
+++ b/boehm-gc/include/private/gcconfig.h
@@ -924,12 +924,10 @@
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"
diff --git a/boehm-gc/os_dep.c b/boehm-gc/os_dep.c
index 21d05635ab8..30c2b8bc4ab 100644
--- a/boehm-gc/os_dep.c
+++ b/boehm-gc/os_dep.c
@@ -945,8 +945,17 @@ 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);
if (f < 0 || STAT_READ(f, stat_buf, STAT_BUF_SIZE) < 2 * STAT_SKIP) {