ggc-page.c (alloc_page): Round up allocation size to one page.
authorRichard Henderson <rth@redhat.com>
Sat, 13 Jan 2001 19:58:43 +0000 (11:58 -0800)
committerRichard Henderson <rth@gcc.gnu.org>
Sat, 13 Jan 2001 19:58:43 +0000 (11:58 -0800)
        * ggc-page.c (alloc_page): Round up allocation size to one page.
        Set e->order on extra pages.

From-SVN: r38990

gcc/ChangeLog
gcc/ggc-page.c

index e5d71d9..dab14f2 100644 (file)
@@ -1,5 +1,10 @@
 2001-01-13  Richard Henderson  <rth@redhat.com>
 
+       * ggc-page.c (alloc_page): Round up allocation size to one page.
+       Set e->order on extra pages.
+
+2001-01-13  Richard Henderson  <rth@redhat.com>
+
        * genrecog.c (nodes_identical): Expand commentary.
        (write_switch): Watch out for identical nodes.
 
index b5c6d57..fa66aa4 100644 (file)
@@ -517,6 +517,8 @@ alloc_page (order)
   bitmap_size = BITMAP_SIZE (num_objects + 1);
   page_entry_size = sizeof (page_entry) - sizeof (long) + bitmap_size;
   entry_size = num_objects * OBJECT_SIZE (order);
+  if (entry_size < G.pagesize)
+    entry_size = G.pagesize;
 
   entry = NULL;
   page = NULL;
@@ -549,14 +551,15 @@ alloc_page (order)
       struct page_entry *e, *f = G.free_pages;
       int i;
 
-      page = alloc_anon (NULL, entry_size * GGC_QUIRE_SIZE);
+      page = alloc_anon (NULL, G.pagesize * GGC_QUIRE_SIZE);
       /* This loop counts down so that the chain will be in ascending
         memory order.  */
       for (i = GGC_QUIRE_SIZE - 1; i >= 1; i--)
        {
-         e = (struct page_entry *) xcalloc (1, sizeof (struct page_entry));
-         e->bytes = entry_size;
-         e->page = page + i*entry_size;
+         e = (struct page_entry *) xcalloc (1, page_entry_size);
+         e->order = order;
+         e->bytes = G.pagesize;
+         e->page = page + (i << G.lg_pagesize);
          e->next = f;
          f = e;
        }