diff options
author | Richard Henderson <rth@redhat.com> | 2001-01-13 11:58:43 -0800 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2001-01-13 11:58:43 -0800 |
commit | ca79429a53c4344eb62049cf84b332aa32596924 (patch) | |
tree | 7c773f88743dffba2d709a2cbc5f4412c0794efe /gcc/ggc-page.c | |
parent | 2cec75a1bd9efacb57c9c262af45e32fd712b2dc (diff) | |
download | gcc-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.c | 11 |
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; } |