diff options
author | David S. Miller <davem@davemloft.net> | 2005-04-17 22:01:21 +0000 |
---|---|---|
committer | David S. Miller <davem@gcc.gnu.org> | 2005-04-17 15:01:21 -0700 |
commit | 22d97adab531fe6896131e27a806b685c9aae8e7 (patch) | |
tree | 6070b7e1958a3b47be4d8b147bcdb1497807a8f2 /boehm-gc | |
parent | 03a0866432efadc888d6a65651943b89e2ae6eb0 (diff) | |
download | gcc-22d97adab531fe6896131e27a806b685c9aae8e7.zip gcc-22d97adab531fe6896131e27a806b685c9aae8e7.tar.gz gcc-22d97adab531fe6896131e27a806b685c9aae8e7.tar.bz2 |
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/ChangeLog | 7 | ||||
-rw-r--r-- | boehm-gc/include/private/gcconfig.h | 4 | ||||
-rw-r--r-- | boehm-gc/os_dep.c | 9 |
3 files changed, 17 insertions, 3 deletions
diff --git a/boehm-gc/ChangeLog b/boehm-gc/ChangeLog index bc73cc4..87ca45c 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 7f3b63e..a9ed717 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 21d0563..30c2b8b 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) { |