diff options
author | Andy Wingo <wingo@pobox.com> | 2010-08-29 12:20:05 -0700 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2010-08-29 12:20:05 -0700 |
commit | 4e30666a1ae21435ebe13c3f3108f1c62bbb82e8 (patch) | |
tree | 8e98899ffa0f1ef4a251c3cf36d238b7c8b719fd | |
parent | dcf7c034873e3ecf36558e4ae9dfd7d1866ae7ca (diff) | |
download | guile-4e30666a1ae21435ebe13c3f3108f1c62bbb82e8.tar.gz |
fix libguile compilation on newer solaris
* libguile/gc_os_dep.c: Update SUNOS5 stack and heap bounding heuristics
from upstream libgc. Based on a patch by Marion Hakanson.
-rw-r--r-- | libguile/gc_os_dep.c | 34 |
1 files changed, 24 insertions, 10 deletions
diff --git a/libguile/gc_os_dep.c b/libguile/gc_os_dep.c index 7bc96447f..02a2ae494 100644 --- a/libguile/gc_os_dep.c +++ b/libguile/gc_os_dep.c @@ -1,5 +1,5 @@ /* - * Copyright 1988, 1989 Hans-J. Boehm, Alan J. Demers + * Copyright 1988, 1989, 2010 Hans-J. Boehm, Alan J. Demers * Copyright (c) 1991-1995 by Xerox Corporation. All rights reserved. * Copyright (c) 1996-1999 by Silicon Graphics. All rights reserved. * Copyright (c) 1999 by Hewlett-Packard Company. All rights reserved. @@ -706,11 +706,18 @@ scm_get_stack_base () extern int etext; # ifdef SUNOS5 # define OS_TYPE "SUNOS5" - extern int _etext; - extern int _end; - extern char * GC_SysVGetDataStart(); -# define DATASTART (ptr_t)GC_SysVGetDataStart(0x10000, &_etext) -# define DATAEND (&_end) +# define OS_TYPE "SUNOS5" + extern int _etext[], _end[]; + ptr_t GC_SysVGetDataStart(size_t, ptr_t); +# define DATASTART GC_SysVGetDataStart(0x1000, (ptr_t)_etext) +# define DATAEND (ptr_t)(_end) +/* # define STACKBOTTOM ((ptr_t)(_start)) worked through 2.7, */ +/* but reportedly breaks under 2.8. It appears that the stack */ +/* base is a property of the executable, so this should not break */ +/* old executables. */ +/* HEURISTIC2 probably works, but this appears to be preferable. */ +# include <sys/vm.h> +# define STACKBOTTOM ((ptr_t) USRSTACK) # ifndef USE_MMAP # define USE_MMAP # endif @@ -797,10 +804,17 @@ scm_get_stack_base () # endif # ifdef SUNOS5 # define OS_TYPE "SUNOS5" - extern int etext, _start; - extern char * GC_SysVGetDataStart(); -# define DATASTART GC_SysVGetDataStart(0x1000, &etext) -# define STACKBOTTOM ((ptr_t)(&_start)) + extern int _etext[], _end[]; + ptr_t GC_SysVGetDataStart(size_t, ptr_t); +# define DATASTART GC_SysVGetDataStart(0x1000, (ptr_t)_etext) +# define DATAEND (ptr_t)(_end) +/* # define STACKBOTTOM ((ptr_t)(_start)) worked through 2.7, */ +/* but reportedly breaks under 2.8. It appears that the stack */ +/* base is a property of the executable, so this should not break */ +/* old executables. */ +/* HEURISTIC2 probably works, but this appears to be preferable. */ +# include <sys/vm.h> +# define STACKBOTTOM ((ptr_t) USRSTACK) /** At least in Solaris 2.5, PROC_VDB gives wrong values for dirty bits. */ /*# define PROC_VDB*/ # define DYNAMIC_LOADING |