* ggc-page.c (init_ggc): Work around SunOS unaligned mmap bug.
authorRichard Henderson <rth@gcc.gnu.org>
Mon, 18 Oct 1999 16:38:40 +0000 (09:38 -0700)
committerRichard Henderson <rth@gcc.gnu.org>
Mon, 18 Oct 1999 16:38:40 +0000 (09:38 -0700)
From-SVN: r30070

gcc/ggc-page.c

index ecd116db5e6318a64d366d8eaa345a8b6c8ab584..24a8e2de2ad9e1150a77db7d09721a4289271871 100644 (file)
@@ -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);
 }