diff options
author | Richard Henderson <rth@gcc.gnu.org> | 1999-10-18 09:38:40 -0700 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 1999-10-18 09:38:40 -0700 |
commit | 1b3e142338984166b58727c31d24617cfc0a07dc (patch) | |
tree | 6596f54ce7edff04d59fdda5983ef7953fa1f015 /gcc | |
parent | 3da5522a60c67155c13e0412ce6b6e424bee687b (diff) | |
download | gcc-1b3e142338984166b58727c31d24617cfc0a07dc.zip gcc-1b3e142338984166b58727c31d24617cfc0a07dc.tar.gz gcc-1b3e142338984166b58727c31d24617cfc0a07dc.tar.bz2 |
* ggc-page.c (init_ggc): Work around SunOS unaligned mmap bug.
From-SVN: r30070
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ggc-page.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/gcc/ggc-page.c b/gcc/ggc-page.c index ecd116d..24a8e2d 100644 --- a/gcc/ggc-page.c +++ b/gcc/ggc-page.c @@ -797,6 +797,26 @@ init_ggc () G.allocated_last_gc = GGC_MIN_LAST_ALLOCATED; +#ifdef HAVE_MMAP + /* StunOS has an amazing off-by-one error for the first mmap allocation + after fiddling with RLIMIT_STACK. The result, as hard as it is to + believe, is an unaligned page allocation, which would cause us to + hork badly if we tried to use it. */ + { + char *p = alloc_anon (NULL, G.pagesize); + if ((size_t)p & (G.pagesize - 1)) + { + /* How losing. Discard this one and try another. If we still + can't get something useful, give up. */ + + p = alloc_anon (NULL, G.pagesize); + if ((size_t)p & (G.pagesize - 1)) + abort (); + } + munmap (p, G.pagesize); + } +#endif + empty_string = ggc_alloc_string ("", 0); ggc_add_string_root (&empty_string, 1); } |