aboutsummaryrefslogtreecommitdiff
path: root/gcc/ggc-page.c
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2001-01-13 11:58:43 -0800
committerRichard Henderson <rth@gcc.gnu.org>2001-01-13 11:58:43 -0800
commitca79429a53c4344eb62049cf84b332aa32596924 (patch)
tree7c773f88743dffba2d709a2cbc5f4412c0794efe /gcc/ggc-page.c
parent2cec75a1bd9efacb57c9c262af45e32fd712b2dc (diff)
downloadgcc-ca79429a53c4344eb62049cf84b332aa32596924.zip
gcc-ca79429a53c4344eb62049cf84b332aa32596924.tar.gz
gcc-ca79429a53c4344eb62049cf84b332aa32596924.tar.bz2
ggc-page.c (alloc_page): Round up allocation size to one page.
* ggc-page.c (alloc_page): Round up allocation size to one page. Set e->order on extra pages. From-SVN: r38990
Diffstat (limited to 'gcc/ggc-page.c')
-rw-r--r--gcc/ggc-page.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/gcc/ggc-page.c b/gcc/ggc-page.c
index b5c6d57..fa66aa4 100644
--- a/gcc/ggc-page.c
+++ b/gcc/ggc-page.c
@@ -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;
}