OSDN Git Service

* ggc-page.c: Avoid division in ggc_set_mark.
[pf3gnuchains/gcc-fork.git] / gcc / ggc-page.c
1 /* "Bag-of-pages" garbage collector for the GNU compiler.
2    Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
3
4 This file is part of GCC.
5
6 GCC is free software; you can redistribute it and/or modify it under
7 the terms of the GNU General Public License as published by the Free
8 Software Foundation; either version 2, or (at your option) any later
9 version.
10
11 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
12 WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14 for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with GCC; see the file COPYING.  If not, write to the Free
18 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
19 02111-1307, USA.  */
20
21 #include "config.h"
22 #include "system.h"
23 #include "tree.h"
24 #include "rtl.h"
25 #include "tm_p.h"
26 #include "toplev.h"
27 #include "varray.h"
28 #include "flags.h"
29 #include "ggc.h"
30 #include "timevar.h"
31
32 /* Prefer MAP_ANON(YMOUS) to /dev/zero, since we don't need to keep a
33    file open.  Prefer either to valloc.  */
34 #ifdef HAVE_MMAP_ANON
35 # undef HAVE_MMAP_DEV_ZERO
36
37 # include <sys/mman.h>
38 # ifndef MAP_FAILED
39 #  define MAP_FAILED -1
40 # endif
41 # if !defined (MAP_ANONYMOUS) && defined (MAP_ANON)
42 #  define MAP_ANONYMOUS MAP_ANON
43 # endif
44 # define USING_MMAP
45
46 #endif
47
48 #ifdef HAVE_MMAP_DEV_ZERO
49
50 # include <sys/mman.h>
51 # ifndef MAP_FAILED
52 #  define MAP_FAILED -1
53 # endif
54 # define USING_MMAP
55
56 #endif
57
58 #ifndef USING_MMAP
59 #define USING_MALLOC_PAGE_GROUPS
60 #endif
61
62 /* Stategy:
63
64    This garbage-collecting allocator allocates objects on one of a set
65    of pages.  Each page can allocate objects of a single size only;
66    available sizes are powers of two starting at four bytes.  The size
67    of an allocation request is rounded up to the next power of two
68    (`order'), and satisfied from the appropriate page.
69
70    Each page is recorded in a page-entry, which also maintains an
71    in-use bitmap of object positions on the page.  This allows the
72    allocation state of a particular object to be flipped without
73    touching the page itself.
74
75    Each page-entry also has a context depth, which is used to track
76    pushing and popping of allocation contexts.  Only objects allocated
77    in the current (highest-numbered) context may be collected.
78
79    Page entries are arranged in an array of singly-linked lists.  The
80    array is indexed by the allocation size, in bits, of the pages on
81    it; i.e. all pages on a list allocate objects of the same size.
82    Pages are ordered on the list such that all non-full pages precede
83    all full pages, with non-full pages arranged in order of decreasing
84    context depth.
85
86    Empty pages (of all orders) are kept on a single page cache list,
87    and are considered first when new pages are required; they are
88    deallocated at the start of the next collection if they haven't
89    been recycled by then.  */
90
91
92 /* Define GGC_POISON to poison memory marked unused by the collector.  */
93 #undef GGC_POISON
94
95 /* Define GGC_ALWAYS_COLLECT to perform collection every time
96    ggc_collect is invoked.  Otherwise, collection is performed only
97    when a significant amount of memory has been allocated since the
98    last collection.  */
99 #undef GGC_ALWAYS_COLLECT
100
101 #ifdef ENABLE_GC_CHECKING
102 #define GGC_POISON
103 #endif
104 #ifdef ENABLE_GC_ALWAYS_COLLECT
105 #define GGC_ALWAYS_COLLECT
106 #endif
107
108 /* Define GGC_DEBUG_LEVEL to print debugging information.
109      0: No debugging output.
110      1: GC statistics only.
111      2: Page-entry allocations/deallocations as well.
112      3: Object allocations as well.
113      4: Object marks as well.  */
114 #define GGC_DEBUG_LEVEL (0)
115 \f
116 #ifndef HOST_BITS_PER_PTR
117 #define HOST_BITS_PER_PTR  HOST_BITS_PER_LONG
118 #endif
119
120 \f
121 /* A two-level tree is used to look up the page-entry for a given
122    pointer.  Two chunks of the pointer's bits are extracted to index
123    the first and second levels of the tree, as follows:
124
125                                    HOST_PAGE_SIZE_BITS
126                            32           |      |
127        msb +----------------+----+------+------+ lsb
128                             |    |      |
129                          PAGE_L1_BITS   |
130                                  |      |
131                                PAGE_L2_BITS
132
133    The bottommost HOST_PAGE_SIZE_BITS are ignored, since page-entry
134    pages are aligned on system page boundaries.  The next most
135    significant PAGE_L2_BITS and PAGE_L1_BITS are the second and first
136    index values in the lookup table, respectively.
137
138    For 32-bit architectures and the settings below, there are no
139    leftover bits.  For architectures with wider pointers, the lookup
140    tree points to a list of pages, which must be scanned to find the
141    correct one.  */
142
143 #define PAGE_L1_BITS    (8)
144 #define PAGE_L2_BITS    (32 - PAGE_L1_BITS - G.lg_pagesize)
145 #define PAGE_L1_SIZE    ((size_t) 1 << PAGE_L1_BITS)
146 #define PAGE_L2_SIZE    ((size_t) 1 << PAGE_L2_BITS)
147
148 #define LOOKUP_L1(p) \
149   (((size_t) (p) >> (32 - PAGE_L1_BITS)) & ((1 << PAGE_L1_BITS) - 1))
150
151 #define LOOKUP_L2(p) \
152   (((size_t) (p) >> G.lg_pagesize) & ((1 << PAGE_L2_BITS) - 1))
153
154 /* The number of objects per allocation page, for objects on a page of
155    the indicated ORDER.  */
156 #define OBJECTS_PER_PAGE(ORDER) objects_per_page_table[ORDER]
157
158 /* The size of an object on a page of the indicated ORDER.  */
159 #define OBJECT_SIZE(ORDER) object_size_table[ORDER]
160
161 /* For speed, we avoid doing a general integer divide to locate the
162    offset in the allocation bitmap, by precalculating numbers M, S
163    such that (O * M) >> S == O / Z (modulo 2^32), for any offset O
164    within the page which is evenly divisible by the object size Z.  */
165 #define DIV_MULT(ORDER) inverse_table[ORDER].mult
166 #define DIV_SHIFT(ORDER) inverse_table[ORDER].shift
167 #define OFFSET_TO_BIT(OFFSET, ORDER) \
168   (((OFFSET) * DIV_MULT (ORDER)) >> DIV_SHIFT (ORDER))
169
170 /* The number of extra orders, not corresponding to power-of-two sized
171    objects.  */
172
173 #define NUM_EXTRA_ORDERS ARRAY_SIZE (extra_order_size_table)
174
175 #define RTL_SIZE(NSLOTS) \
176   (sizeof (struct rtx_def) + ((NSLOTS) - 1) * sizeof (rtunion))
177
178 /* The Ith entry is the maximum size of an object to be stored in the
179    Ith extra order.  Adding a new entry to this array is the *only*
180    thing you need to do to add a new special allocation size.  */
181
182 static const size_t extra_order_size_table[] = {
183   sizeof (struct tree_decl),
184   sizeof (struct tree_list),
185   RTL_SIZE (2),                 /* REG, MEM, PLUS, etc.  */
186   RTL_SIZE (10),                /* INSN, CALL_INSN, JUMP_INSN */
187 };
188
189 /* The total number of orders.  */
190
191 #define NUM_ORDERS (HOST_BITS_PER_PTR + NUM_EXTRA_ORDERS)
192
193 /* We use this structure to determine the alignment required for
194    allocations.  For power-of-two sized allocations, that's not a
195    problem, but it does matter for odd-sized allocations.  */
196
197 struct max_alignment {
198   char c;
199   union {
200     HOST_WIDEST_INT i;
201 #ifdef HAVE_LONG_DOUBLE
202     long double d;
203 #else
204     double d;
205 #endif
206   } u;
207 };
208
209 /* The biggest alignment required.  */
210
211 #define MAX_ALIGNMENT (offsetof (struct max_alignment, u))
212
213 /* The Ith entry is the number of objects on a page or order I.  */
214
215 static unsigned objects_per_page_table[NUM_ORDERS];
216
217 /* The Ith entry is the size of an object on a page of order I.  */
218
219 static size_t object_size_table[NUM_ORDERS];
220
221 /* The Ith entry is a pair of numbers (mult, shift) such that
222    ((k * mult) >> shift) mod 2^32 == (k / OBJECT_SIZE(I)) mod 2^32,
223    for all k evenly divisible by OBJECT_SIZE(I).  */
224
225 static struct
226 {
227   unsigned int mult;
228   unsigned int shift;
229 }
230 inverse_table[NUM_ORDERS];
231
232 /* A page_entry records the status of an allocation page.  This
233    structure is dynamically sized to fit the bitmap in_use_p.  */
234 typedef struct page_entry
235 {
236   /* The next page-entry with objects of the same size, or NULL if
237      this is the last page-entry.  */
238   struct page_entry *next;
239
240   /* The number of bytes allocated.  (This will always be a multiple
241      of the host system page size.)  */
242   size_t bytes;
243
244   /* The address at which the memory is allocated.  */
245   char *page;
246
247 #ifdef USING_MALLOC_PAGE_GROUPS
248   /* Back pointer to the page group this page came from.  */
249   struct page_group *group;
250 #endif
251
252   /* Saved in-use bit vector for pages that aren't in the topmost
253      context during collection.  */
254   unsigned long *save_in_use_p;
255
256   /* Context depth of this page.  */
257   unsigned short context_depth;
258
259   /* The number of free objects remaining on this page.  */
260   unsigned short num_free_objects;
261
262   /* A likely candidate for the bit position of a free object for the
263      next allocation from this page.  */
264   unsigned short next_bit_hint;
265
266   /* The lg of size of objects allocated from this page.  */
267   unsigned char order;
268
269   /* A bit vector indicating whether or not objects are in use.  The
270      Nth bit is one if the Nth object on this page is allocated.  This
271      array is dynamically sized.  */
272   unsigned long in_use_p[1];
273 } page_entry;
274
275 #ifdef USING_MALLOC_PAGE_GROUPS
276 /* A page_group describes a large allocation from malloc, from which
277    we parcel out aligned pages.  */
278 typedef struct page_group
279 {
280   /* A linked list of all extant page groups.  */
281   struct page_group *next;
282
283   /* The address we received from malloc.  */
284   char *allocation;
285
286   /* The size of the block.  */
287   size_t alloc_size;
288
289   /* A bitmask of pages in use.  */
290   unsigned int in_use;
291 } page_group;
292 #endif
293
294 #if HOST_BITS_PER_PTR <= 32
295
296 /* On 32-bit hosts, we use a two level page table, as pictured above.  */
297 typedef page_entry **page_table[PAGE_L1_SIZE];
298
299 #else
300
301 /* On 64-bit hosts, we use the same two level page tables plus a linked
302    list that disambiguates the top 32-bits.  There will almost always be
303    exactly one entry in the list.  */
304 typedef struct page_table_chain
305 {
306   struct page_table_chain *next;
307   size_t high_bits;
308   page_entry **table[PAGE_L1_SIZE];
309 } *page_table;
310
311 #endif
312
313 /* The rest of the global variables.  */
314 static struct globals
315 {
316   /* The Nth element in this array is a page with objects of size 2^N.
317      If there are any pages with free objects, they will be at the
318      head of the list.  NULL if there are no page-entries for this
319      object size.  */
320   page_entry *pages[NUM_ORDERS];
321
322   /* The Nth element in this array is the last page with objects of
323      size 2^N.  NULL if there are no page-entries for this object
324      size.  */
325   page_entry *page_tails[NUM_ORDERS];
326
327   /* Lookup table for associating allocation pages with object addresses.  */
328   page_table lookup;
329
330   /* The system's page size.  */
331   size_t pagesize;
332   size_t lg_pagesize;
333
334   /* Bytes currently allocated.  */
335   size_t allocated;
336
337   /* Bytes currently allocated at the end of the last collection.  */
338   size_t allocated_last_gc;
339
340   /* Total amount of memory mapped.  */
341   size_t bytes_mapped;
342
343   /* The current depth in the context stack.  */
344   unsigned short context_depth;
345
346   /* A file descriptor open to /dev/zero for reading.  */
347 #if defined (HAVE_MMAP_DEV_ZERO)
348   int dev_zero_fd;
349 #endif
350
351   /* A cache of free system pages.  */
352   page_entry *free_pages;
353
354 #ifdef USING_MALLOC_PAGE_GROUPS
355   page_group *page_groups;
356 #endif
357
358   /* The file descriptor for debugging output.  */
359   FILE *debug_file;
360 } G;
361
362 /* The size in bytes required to maintain a bitmap for the objects
363    on a page-entry.  */
364 #define BITMAP_SIZE(Num_objects) \
365   (CEIL ((Num_objects), HOST_BITS_PER_LONG) * sizeof(long))
366
367 /* Skip garbage collection if the current allocation is not at least
368    this factor times the allocation at the end of the last collection.
369    In other words, total allocation must expand by (this factor minus
370    one) before collection is performed.  */
371 #define GGC_MIN_EXPAND_FOR_GC (1.3)
372
373 /* Bound `allocated_last_gc' to 4MB, to prevent the memory expansion
374    test from triggering too often when the heap is small.  */
375 #define GGC_MIN_LAST_ALLOCATED (4 * 1024 * 1024)
376
377 /* Allocate pages in chunks of this size, to throttle calls to memory
378    allocation routines.  The first page is used, the rest go onto the
379    free list.  This cannot be larger than HOST_BITS_PER_INT for the
380    in_use bitmask for page_group.  */
381 #define GGC_QUIRE_SIZE 16
382 \f
383 static int ggc_allocated_p PARAMS ((const void *));
384 static page_entry *lookup_page_table_entry PARAMS ((const void *));
385 static void set_page_table_entry PARAMS ((void *, page_entry *));
386 #ifdef USING_MMAP
387 static char *alloc_anon PARAMS ((char *, size_t));
388 #endif
389 #ifdef USING_MALLOC_PAGE_GROUPS
390 static size_t page_group_index PARAMS ((char *, char *));
391 static void set_page_group_in_use PARAMS ((page_group *, char *));
392 static void clear_page_group_in_use PARAMS ((page_group *, char *));
393 #endif
394 static struct page_entry * alloc_page PARAMS ((unsigned));
395 static void free_page PARAMS ((struct page_entry *));
396 static void release_pages PARAMS ((void));
397 static void clear_marks PARAMS ((void));
398 static void sweep_pages PARAMS ((void));
399 static void ggc_recalculate_in_use_p PARAMS ((page_entry *));
400 static void compute_inverse PARAMS ((unsigned));
401
402 #ifdef GGC_POISON
403 static void poison_pages PARAMS ((void));
404 #endif
405
406 void debug_print_page_list PARAMS ((int));
407 \f
408 /* Returns non-zero if P was allocated in GC'able memory.  */
409
410 static inline int
411 ggc_allocated_p (p)
412      const void *p;
413 {
414   page_entry ***base;
415   size_t L1, L2;
416
417 #if HOST_BITS_PER_PTR <= 32
418   base = &G.lookup[0];
419 #else
420   page_table table = G.lookup;
421   size_t high_bits = (size_t) p & ~ (size_t) 0xffffffff;
422   while (1)
423     {
424       if (table == NULL)
425         return 0;
426       if (table->high_bits == high_bits)
427         break;
428       table = table->next;
429     }
430   base = &table->table[0];
431 #endif
432
433   /* Extract the level 1 and 2 indices.  */
434   L1 = LOOKUP_L1 (p);
435   L2 = LOOKUP_L2 (p);
436
437   return base[L1] && base[L1][L2];
438 }
439
440 /* Traverse the page table and find the entry for a page.
441    Die (probably) if the object wasn't allocated via GC.  */
442
443 static inline page_entry *
444 lookup_page_table_entry(p)
445      const void *p;
446 {
447   page_entry ***base;
448   size_t L1, L2;
449
450 #if HOST_BITS_PER_PTR <= 32
451   base = &G.lookup[0];
452 #else
453   page_table table = G.lookup;
454   size_t high_bits = (size_t) p & ~ (size_t) 0xffffffff;
455   while (table->high_bits != high_bits)
456     table = table->next;
457   base = &table->table[0];
458 #endif
459
460   /* Extract the level 1 and 2 indices.  */
461   L1 = LOOKUP_L1 (p);
462   L2 = LOOKUP_L2 (p);
463
464   return base[L1][L2];
465 }
466
467 /* Set the page table entry for a page.  */
468
469 static void
470 set_page_table_entry(p, entry)
471      void *p;
472      page_entry *entry;
473 {
474   page_entry ***base;
475   size_t L1, L2;
476
477 #if HOST_BITS_PER_PTR <= 32
478   base = &G.lookup[0];
479 #else
480   page_table table;
481   size_t high_bits = (size_t) p & ~ (size_t) 0xffffffff;
482   for (table = G.lookup; table; table = table->next)
483     if (table->high_bits == high_bits)
484       goto found;
485
486   /* Not found -- allocate a new table.  */
487   table = (page_table) xcalloc (1, sizeof(*table));
488   table->next = G.lookup;
489   table->high_bits = high_bits;
490   G.lookup = table;
491 found:
492   base = &table->table[0];
493 #endif
494
495   /* Extract the level 1 and 2 indices.  */
496   L1 = LOOKUP_L1 (p);
497   L2 = LOOKUP_L2 (p);
498
499   if (base[L1] == NULL)
500     base[L1] = (page_entry **) xcalloc (PAGE_L2_SIZE, sizeof (page_entry *));
501
502   base[L1][L2] = entry;
503 }
504
505 /* Prints the page-entry for object size ORDER, for debugging.  */
506
507 void
508 debug_print_page_list (order)
509      int order;
510 {
511   page_entry *p;
512   printf ("Head=%p, Tail=%p:\n", (PTR) G.pages[order],
513           (PTR) G.page_tails[order]);
514   p = G.pages[order];
515   while (p != NULL)
516     {
517       printf ("%p(%1d|%3d) -> ", (PTR) p, p->context_depth,
518               p->num_free_objects);
519       p = p->next;
520     }
521   printf ("NULL\n");
522   fflush (stdout);
523 }
524
525 #ifdef USING_MMAP
526 /* Allocate SIZE bytes of anonymous memory, preferably near PREF,
527    (if non-null).  The ifdef structure here is intended to cause a
528    compile error unless exactly one of the HAVE_* is defined.  */
529
530 static inline char *
531 alloc_anon (pref, size)
532      char *pref ATTRIBUTE_UNUSED;
533      size_t size;
534 {
535 #ifdef HAVE_MMAP_ANON
536   char *page = (char *) mmap (pref, size, PROT_READ | PROT_WRITE,
537                               MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
538 #endif
539 #ifdef HAVE_MMAP_DEV_ZERO
540   char *page = (char *) mmap (pref, size, PROT_READ | PROT_WRITE,
541                               MAP_PRIVATE, G.dev_zero_fd, 0);
542 #endif
543
544   if (page == (char *) MAP_FAILED)
545     {
546       perror ("virtual memory exhausted");
547       exit (FATAL_EXIT_CODE);
548     }
549
550   /* Remember that we allocated this memory.  */
551   G.bytes_mapped += size;
552
553   return page;
554 }
555 #endif
556 #ifdef USING_MALLOC_PAGE_GROUPS
557 /* Compute the index for this page into the page group.  */
558
559 static inline size_t
560 page_group_index (allocation, page)
561      char *allocation, *page;
562 {
563   return (size_t) (page - allocation) >> G.lg_pagesize;
564 }
565
566 /* Set and clear the in_use bit for this page in the page group.  */
567
568 static inline void
569 set_page_group_in_use (group, page)
570      page_group *group;
571      char *page;
572 {
573   group->in_use |= 1 << page_group_index (group->allocation, page);
574 }
575
576 static inline void
577 clear_page_group_in_use (group, page)
578      page_group *group;
579      char *page;
580 {
581   group->in_use &= ~(1 << page_group_index (group->allocation, page));
582 }
583 #endif
584
585 /* Allocate a new page for allocating objects of size 2^ORDER,
586    and return an entry for it.  The entry is not added to the
587    appropriate page_table list.  */
588
589 static inline struct page_entry *
590 alloc_page (order)
591      unsigned order;
592 {
593   struct page_entry *entry, *p, **pp;
594   char *page;
595   size_t num_objects;
596   size_t bitmap_size;
597   size_t page_entry_size;
598   size_t entry_size;
599 #ifdef USING_MALLOC_PAGE_GROUPS
600   page_group *group;
601 #endif
602
603   num_objects = OBJECTS_PER_PAGE (order);
604   bitmap_size = BITMAP_SIZE (num_objects + 1);
605   page_entry_size = sizeof (page_entry) - sizeof (long) + bitmap_size;
606   entry_size = num_objects * OBJECT_SIZE (order);
607   if (entry_size < G.pagesize)
608     entry_size = G.pagesize;
609
610   entry = NULL;
611   page = NULL;
612
613   /* Check the list of free pages for one we can use.  */
614   for (pp = &G.free_pages, p = *pp; p; pp = &p->next, p = *pp)
615     if (p->bytes == entry_size)
616       break;
617
618   if (p != NULL)
619     {
620       /* Recycle the allocated memory from this page ...  */
621       *pp = p->next;
622       page = p->page;
623
624 #ifdef USING_MALLOC_PAGE_GROUPS
625       group = p->group;
626 #endif
627
628       /* ... and, if possible, the page entry itself.  */
629       if (p->order == order)
630         {
631           entry = p;
632           memset (entry, 0, page_entry_size);
633         }
634       else
635         free (p);
636     }
637 #ifdef USING_MMAP
638   else if (entry_size == G.pagesize)
639     {
640       /* We want just one page.  Allocate a bunch of them and put the
641          extras on the freelist.  (Can only do this optimization with
642          mmap for backing store.)  */
643       struct page_entry *e, *f = G.free_pages;
644       int i;
645
646       page = alloc_anon (NULL, G.pagesize * GGC_QUIRE_SIZE);
647
648       /* This loop counts down so that the chain will be in ascending
649          memory order.  */
650       for (i = GGC_QUIRE_SIZE - 1; i >= 1; i--)
651         {
652           e = (struct page_entry *) xcalloc (1, page_entry_size);
653           e->order = order;
654           e->bytes = G.pagesize;
655           e->page = page + (i << G.lg_pagesize);
656           e->next = f;
657           f = e;
658         }
659
660       G.free_pages = f;
661     }
662   else
663     page = alloc_anon (NULL, entry_size);
664 #endif
665 #ifdef USING_MALLOC_PAGE_GROUPS
666   else
667     {
668       /* Allocate a large block of memory and serve out the aligned
669          pages therein.  This results in much less memory wastage
670          than the traditional implementation of valloc.  */
671
672       char *allocation, *a, *enda;
673       size_t alloc_size, head_slop, tail_slop;
674       int multiple_pages = (entry_size == G.pagesize);
675
676       if (multiple_pages)
677         alloc_size = GGC_QUIRE_SIZE * G.pagesize;
678       else
679         alloc_size = entry_size + G.pagesize - 1;
680       allocation = xmalloc (alloc_size);
681
682       page = (char *) (((size_t) allocation + G.pagesize - 1) & -G.pagesize);
683       head_slop = page - allocation;
684       if (multiple_pages)
685         tail_slop = ((size_t) allocation + alloc_size) & (G.pagesize - 1);
686       else
687         tail_slop = alloc_size - entry_size - head_slop;
688       enda = allocation + alloc_size - tail_slop;
689
690       /* We allocated N pages, which are likely not aligned, leaving
691          us with N-1 usable pages.  We plan to place the page_group
692          structure somewhere in the slop.  */
693       if (head_slop >= sizeof (page_group))
694         group = (page_group *)page - 1;
695       else
696         {
697           /* We magically got an aligned allocation.  Too bad, we have
698              to waste a page anyway.  */
699           if (tail_slop == 0)
700             {
701               enda -= G.pagesize;
702               tail_slop += G.pagesize;
703             }
704           if (tail_slop < sizeof (page_group))
705             abort ();
706           group = (page_group *)enda;
707           tail_slop -= sizeof (page_group);
708         }
709
710       /* Remember that we allocated this memory.  */
711       group->next = G.page_groups;
712       group->allocation = allocation;
713       group->alloc_size = alloc_size;
714       group->in_use = 0;
715       G.page_groups = group;
716       G.bytes_mapped += alloc_size;
717
718       /* If we allocated multiple pages, put the rest on the free list.  */
719       if (multiple_pages)
720         {
721           struct page_entry *e, *f = G.free_pages;
722           for (a = enda - G.pagesize; a != page; a -= G.pagesize)
723             {
724               e = (struct page_entry *) xcalloc (1, page_entry_size);
725               e->order = order;
726               e->bytes = G.pagesize;
727               e->page = a;
728               e->group = group;
729               e->next = f;
730               f = e;
731             }
732           G.free_pages = f;
733         }
734     }
735 #endif
736
737   if (entry == NULL)
738     entry = (struct page_entry *) xcalloc (1, page_entry_size);
739
740   entry->bytes = entry_size;
741   entry->page = page;
742   entry->context_depth = G.context_depth;
743   entry->order = order;
744   entry->num_free_objects = num_objects;
745   entry->next_bit_hint = 1;
746
747 #ifdef USING_MALLOC_PAGE_GROUPS
748   entry->group = group;
749   set_page_group_in_use (group, page);
750 #endif
751
752   /* Set the one-past-the-end in-use bit.  This acts as a sentry as we
753      increment the hint.  */
754   entry->in_use_p[num_objects / HOST_BITS_PER_LONG]
755     = (unsigned long) 1 << (num_objects % HOST_BITS_PER_LONG);
756
757   set_page_table_entry (page, entry);
758
759   if (GGC_DEBUG_LEVEL >= 2)
760     fprintf (G.debug_file,
761              "Allocating page at %p, object size=%lu, data %p-%p\n",
762              (PTR) entry, (unsigned long) OBJECT_SIZE (order), page,
763              page + entry_size - 1);
764
765   return entry;
766 }
767
768 /* For a page that is no longer needed, put it on the free page list.  */
769
770 static inline void
771 free_page (entry)
772      page_entry *entry;
773 {
774   if (GGC_DEBUG_LEVEL >= 2)
775     fprintf (G.debug_file,
776              "Deallocating page at %p, data %p-%p\n", (PTR) entry,
777              entry->page, entry->page + entry->bytes - 1);
778
779   set_page_table_entry (entry->page, NULL);
780
781 #ifdef USING_MALLOC_PAGE_GROUPS
782   clear_page_group_in_use (entry->group, entry->page);
783 #endif
784
785   entry->next = G.free_pages;
786   G.free_pages = entry;
787 }
788
789 /* Release the free page cache to the system.  */
790
791 static void
792 release_pages ()
793 {
794 #ifdef USING_MMAP
795   page_entry *p, *next;
796   char *start;
797   size_t len;
798
799   /* Gather up adjacent pages so they are unmapped together.  */
800   p = G.free_pages;
801
802   while (p)
803     {
804       start = p->page;
805       next = p->next;
806       len = p->bytes;
807       free (p);
808       p = next;
809
810       while (p && p->page == start + len)
811         {
812           next = p->next;
813           len += p->bytes;
814           free (p);
815           p = next;
816         }
817
818       munmap (start, len);
819       G.bytes_mapped -= len;
820     }
821
822   G.free_pages = NULL;
823 #endif
824 #ifdef USING_MALLOC_PAGE_GROUPS
825   page_entry **pp, *p;
826   page_group **gp, *g;
827
828   /* Remove all pages from free page groups from the list.  */
829   pp = &G.free_pages;
830   while ((p = *pp) != NULL)
831     if (p->group->in_use == 0)
832       {
833         *pp = p->next;
834         free (p);
835       }
836     else
837       pp = &p->next;
838
839   /* Remove all free page groups, and release the storage.  */
840   gp = &G.page_groups;
841   while ((g = *gp) != NULL)
842     if (g->in_use == 0)
843       {
844         *gp = g->next;
845         G.bytes_mapped -= g->alloc_size;
846         free (g->allocation);
847       }
848     else
849       gp = &g->next;
850 #endif
851 }
852
853 /* This table provides a fast way to determine ceil(log_2(size)) for
854    allocation requests.  The minimum allocation size is eight bytes.  */
855
856 static unsigned char size_lookup[257] =
857 {
858   3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4,
859   4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
860   5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
861   6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
862   6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
863   7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
864   7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
865   7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
866   7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
867   8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
868   8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
869   8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
870   8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
871   8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
872   8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
873   8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
874   8
875 };
876
877 /* Allocate a chunk of memory of SIZE bytes.  If ZERO is non-zero, the
878    memory is zeroed; otherwise, its contents are undefined.  */
879
880 void *
881 ggc_alloc (size)
882      size_t size;
883 {
884   unsigned order, word, bit, object_offset;
885   struct page_entry *entry;
886   void *result;
887
888   if (size <= 256)
889     order = size_lookup[size];
890   else
891     {
892       order = 9;
893       while (size > OBJECT_SIZE (order))
894         order++;
895     }
896
897   /* If there are non-full pages for this size allocation, they are at
898      the head of the list.  */
899   entry = G.pages[order];
900
901   /* If there is no page for this object size, or all pages in this
902      context are full, allocate a new page.  */
903   if (entry == NULL || entry->num_free_objects == 0)
904     {
905       struct page_entry *new_entry;
906       new_entry = alloc_page (order);
907
908       /* If this is the only entry, it's also the tail.  */
909       if (entry == NULL)
910         G.page_tails[order] = new_entry;
911
912       /* Put new pages at the head of the page list.  */
913       new_entry->next = entry;
914       entry = new_entry;
915       G.pages[order] = new_entry;
916
917       /* For a new page, we know the word and bit positions (in the
918          in_use bitmap) of the first available object -- they're zero.  */
919       new_entry->next_bit_hint = 1;
920       word = 0;
921       bit = 0;
922       object_offset = 0;
923     }
924   else
925     {
926       /* First try to use the hint left from the previous allocation
927          to locate a clear bit in the in-use bitmap.  We've made sure
928          that the one-past-the-end bit is always set, so if the hint
929          has run over, this test will fail.  */
930       unsigned hint = entry->next_bit_hint;
931       word = hint / HOST_BITS_PER_LONG;
932       bit = hint % HOST_BITS_PER_LONG;
933
934       /* If the hint didn't work, scan the bitmap from the beginning.  */
935       if ((entry->in_use_p[word] >> bit) & 1)
936         {
937           word = bit = 0;
938           while (~entry->in_use_p[word] == 0)
939             ++word;
940           while ((entry->in_use_p[word] >> bit) & 1)
941             ++bit;
942           hint = word * HOST_BITS_PER_LONG + bit;
943         }
944
945       /* Next time, try the next bit.  */
946       entry->next_bit_hint = hint + 1;
947
948       object_offset = hint * OBJECT_SIZE (order);
949     }
950
951   /* Set the in-use bit.  */
952   entry->in_use_p[word] |= ((unsigned long) 1 << bit);
953
954   /* Keep a running total of the number of free objects.  If this page
955      fills up, we may have to move it to the end of the list if the
956      next page isn't full.  If the next page is full, all subsequent
957      pages are full, so there's no need to move it.  */
958   if (--entry->num_free_objects == 0
959       && entry->next != NULL
960       && entry->next->num_free_objects > 0)
961     {
962       G.pages[order] = entry->next;
963       entry->next = NULL;
964       G.page_tails[order]->next = entry;
965       G.page_tails[order] = entry;
966     }
967
968   /* Calculate the object's address.  */
969   result = entry->page + object_offset;
970
971 #ifdef GGC_POISON
972   /* `Poison' the entire allocated object, including any padding at
973      the end.  */
974   memset (result, 0xaf, OBJECT_SIZE (order));
975 #endif
976
977   /* Keep track of how many bytes are being allocated.  This
978      information is used in deciding when to collect.  */
979   G.allocated += OBJECT_SIZE (order);
980
981   if (GGC_DEBUG_LEVEL >= 3)
982     fprintf (G.debug_file,
983              "Allocating object, requested size=%lu, actual=%lu at %p on %p\n",
984              (unsigned long) size, (unsigned long) OBJECT_SIZE (order), result,
985              (PTR) entry);
986
987   return result;
988 }
989
990 /* If P is not marked, marks it and return false.  Otherwise return true.
991    P must have been allocated by the GC allocator; it mustn't point to
992    static objects, stack variables, or memory allocated with malloc.  */
993
994 int
995 ggc_set_mark (p)
996      const void *p;
997 {
998   page_entry *entry;
999   unsigned bit, word;
1000   unsigned long mask;
1001
1002   /* Look up the page on which the object is alloced.  If the object
1003      wasn't allocated by the collector, we'll probably die.  */
1004   entry = lookup_page_table_entry (p);
1005 #ifdef ENABLE_CHECKING
1006   if (entry == NULL)
1007     abort ();
1008 #endif
1009
1010   /* Calculate the index of the object on the page; this is its bit
1011      position in the in_use_p bitmap.  */
1012   bit = OFFSET_TO_BIT (((const char *) p) - entry->page, entry->order);
1013   word = bit / HOST_BITS_PER_LONG;
1014   mask = (unsigned long) 1 << (bit % HOST_BITS_PER_LONG);
1015
1016   /* If the bit was previously set, skip it.  */
1017   if (entry->in_use_p[word] & mask)
1018     return 1;
1019
1020   /* Otherwise set it, and decrement the free object count.  */
1021   entry->in_use_p[word] |= mask;
1022   entry->num_free_objects -= 1;
1023
1024   if (GGC_DEBUG_LEVEL >= 4)
1025     fprintf (G.debug_file, "Marking %p\n", p);
1026
1027   return 0;
1028 }
1029
1030 /* Return 1 if P has been marked, zero otherwise.
1031    P must have been allocated by the GC allocator; it mustn't point to
1032    static objects, stack variables, or memory allocated with malloc.  */
1033
1034 int
1035 ggc_marked_p (p)
1036      const void *p;
1037 {
1038   page_entry *entry;
1039   unsigned bit, word;
1040   unsigned long mask;
1041
1042   /* Look up the page on which the object is alloced.  If the object
1043      wasn't allocated by the collector, we'll probably die.  */
1044   entry = lookup_page_table_entry (p);
1045 #ifdef ENABLE_CHECKING
1046   if (entry == NULL)
1047     abort ();
1048 #endif
1049
1050   /* Calculate the index of the object on the page; this is its bit
1051      position in the in_use_p bitmap.  */
1052   bit = OFFSET_TO_BIT (((const char *) p) - entry->page, entry->order);
1053   word = bit / HOST_BITS_PER_LONG;
1054   mask = (unsigned long) 1 << (bit % HOST_BITS_PER_LONG);
1055
1056   return (entry->in_use_p[word] & mask) != 0;
1057 }
1058
1059 /* Return the size of the gc-able object P.  */
1060
1061 size_t
1062 ggc_get_size (p)
1063      const void *p;
1064 {
1065   page_entry *pe = lookup_page_table_entry (p);
1066   return OBJECT_SIZE (pe->order);
1067 }
1068 \f
1069 /* Subroutine of init_ggc which computes the pair of numbers used to
1070    perform division by OBJECT_SIZE (order) and fills in inverse_table[].
1071
1072    This algorithm is taken from Granlund and Montgomery's paper
1073    "Division by Invariant Integers using Multiplication"
1074    (Proc. SIGPLAN PLDI, 1994), section 9 (Exact division by
1075    constants).  */
1076
1077 static void
1078 compute_inverse (order)
1079      unsigned order;
1080 {
1081   unsigned size, inv, e;
1082
1083   size = OBJECT_SIZE (order);
1084   e = 0;
1085   while (size % 2 == 0)
1086     {
1087       e++;
1088       size >>= 1;
1089     }
1090
1091   inv = size;
1092   while (inv * size != 1)
1093     inv = inv * (2 - inv*size);
1094
1095   DIV_MULT (order) = inv;
1096   DIV_SHIFT (order) = e;
1097 }
1098
1099 /* Initialize the ggc-mmap allocator.  */
1100 void
1101 init_ggc ()
1102 {
1103   unsigned order;
1104
1105   G.pagesize = getpagesize();
1106   G.lg_pagesize = exact_log2 (G.pagesize);
1107
1108 #ifdef HAVE_MMAP_DEV_ZERO
1109   G.dev_zero_fd = open ("/dev/zero", O_RDONLY);
1110   if (G.dev_zero_fd == -1)
1111     abort ();
1112 #endif
1113
1114 #if 0
1115   G.debug_file = fopen ("ggc-mmap.debug", "w");
1116 #else
1117   G.debug_file = stdout;
1118 #endif
1119
1120   G.allocated_last_gc = GGC_MIN_LAST_ALLOCATED;
1121
1122 #ifdef USING_MMAP
1123   /* StunOS has an amazing off-by-one error for the first mmap allocation
1124      after fiddling with RLIMIT_STACK.  The result, as hard as it is to
1125      believe, is an unaligned page allocation, which would cause us to
1126      hork badly if we tried to use it.  */
1127   {
1128     char *p = alloc_anon (NULL, G.pagesize);
1129     struct page_entry *e;
1130     if ((size_t)p & (G.pagesize - 1))
1131       {
1132         /* How losing.  Discard this one and try another.  If we still
1133            can't get something useful, give up.  */
1134
1135         p = alloc_anon (NULL, G.pagesize);
1136         if ((size_t)p & (G.pagesize - 1))
1137           abort ();
1138       }
1139
1140     /* We have a good page, might as well hold onto it...  */
1141     e = (struct page_entry *) xcalloc (1, sizeof (struct page_entry));
1142     e->bytes = G.pagesize;
1143     e->page = p;
1144     e->next = G.free_pages;
1145     G.free_pages = e;
1146   }
1147 #endif
1148
1149   /* Initialize the object size table.  */
1150   for (order = 0; order < HOST_BITS_PER_PTR; ++order)
1151     object_size_table[order] = (size_t) 1 << order;
1152   for (order = HOST_BITS_PER_PTR; order < NUM_ORDERS; ++order)
1153     {
1154       size_t s = extra_order_size_table[order - HOST_BITS_PER_PTR];
1155
1156       /* If S is not a multiple of the MAX_ALIGNMENT, then round it up
1157          so that we're sure of getting aligned memory.  */
1158       s = CEIL (s, MAX_ALIGNMENT) * MAX_ALIGNMENT;
1159       object_size_table[order] = s;
1160     }
1161
1162   /* Initialize the objects-per-page and inverse tables.  */
1163   for (order = 0; order < NUM_ORDERS; ++order)
1164     {
1165       objects_per_page_table[order] = G.pagesize / OBJECT_SIZE (order);
1166       if (objects_per_page_table[order] == 0)
1167         objects_per_page_table[order] = 1;
1168       compute_inverse (order);
1169     }
1170
1171   /* Reset the size_lookup array to put appropriately sized objects in
1172      the special orders.  All objects bigger than the previous power
1173      of two, but no greater than the special size, should go in the
1174      new order.  */
1175   for (order = HOST_BITS_PER_PTR; order < NUM_ORDERS; ++order)
1176     {
1177       int o;
1178       int i;
1179
1180       o = size_lookup[OBJECT_SIZE (order)];
1181       for (i = OBJECT_SIZE (order); size_lookup [i] == o; --i)
1182         size_lookup[i] = order;
1183     }
1184 }
1185
1186 /* Increment the `GC context'.  Objects allocated in an outer context
1187    are never freed, eliminating the need to register their roots.  */
1188
1189 void
1190 ggc_push_context ()
1191 {
1192   ++G.context_depth;
1193
1194   /* Die on wrap.  */
1195   if (G.context_depth == 0)
1196     abort ();
1197 }
1198
1199 /* Merge the SAVE_IN_USE_P and IN_USE_P arrays in P so that IN_USE_P
1200    reflects reality.  Recalculate NUM_FREE_OBJECTS as well.  */
1201
1202 static void
1203 ggc_recalculate_in_use_p (p)
1204      page_entry *p;
1205 {
1206   unsigned int i;
1207   size_t num_objects;
1208
1209   /* Because the past-the-end bit in in_use_p is always set, we
1210      pretend there is one additional object.  */
1211   num_objects = OBJECTS_PER_PAGE (p->order) + 1;
1212
1213   /* Reset the free object count.  */
1214   p->num_free_objects = num_objects;
1215
1216   /* Combine the IN_USE_P and SAVE_IN_USE_P arrays.  */
1217   for (i = 0;
1218        i < CEIL (BITMAP_SIZE (num_objects),
1219                  sizeof (*p->in_use_p));
1220        ++i)
1221     {
1222       unsigned long j;
1223
1224       /* Something is in use if it is marked, or if it was in use in a
1225          context further down the context stack.  */
1226       p->in_use_p[i] |= p->save_in_use_p[i];
1227
1228       /* Decrement the free object count for every object allocated.  */
1229       for (j = p->in_use_p[i]; j; j >>= 1)
1230         p->num_free_objects -= (j & 1);
1231     }
1232
1233   if (p->num_free_objects >= num_objects)
1234     abort ();
1235 }
1236
1237 /* Decrement the `GC context'.  All objects allocated since the
1238    previous ggc_push_context are migrated to the outer context.  */
1239
1240 void
1241 ggc_pop_context ()
1242 {
1243   unsigned order, depth;
1244
1245   depth = --G.context_depth;
1246
1247   /* Any remaining pages in the popped context are lowered to the new
1248      current context; i.e. objects allocated in the popped context and
1249      left over are imported into the previous context.  */
1250   for (order = 2; order < NUM_ORDERS; order++)
1251     {
1252       page_entry *p;
1253
1254       for (p = G.pages[order]; p != NULL; p = p->next)
1255         {
1256           if (p->context_depth > depth)
1257             p->context_depth = depth;
1258
1259           /* If this page is now in the topmost context, and we'd
1260              saved its allocation state, restore it.  */
1261           else if (p->context_depth == depth && p->save_in_use_p)
1262             {
1263               ggc_recalculate_in_use_p (p);
1264               free (p->save_in_use_p);
1265               p->save_in_use_p = 0;
1266             }
1267         }
1268     }
1269 }
1270 \f
1271 /* Unmark all objects.  */
1272
1273 static inline void
1274 clear_marks ()
1275 {
1276   unsigned order;
1277
1278   for (order = 2; order < NUM_ORDERS; order++)
1279     {
1280       size_t num_objects = OBJECTS_PER_PAGE (order);
1281       size_t bitmap_size = BITMAP_SIZE (num_objects + 1);
1282       page_entry *p;
1283
1284       for (p = G.pages[order]; p != NULL; p = p->next)
1285         {
1286 #ifdef ENABLE_CHECKING
1287           /* The data should be page-aligned.  */
1288           if ((size_t) p->page & (G.pagesize - 1))
1289             abort ();
1290 #endif
1291
1292           /* Pages that aren't in the topmost context are not collected;
1293              nevertheless, we need their in-use bit vectors to store GC
1294              marks.  So, back them up first.  */
1295           if (p->context_depth < G.context_depth)
1296             {
1297               if (! p->save_in_use_p)
1298                 p->save_in_use_p = xmalloc (bitmap_size);
1299               memcpy (p->save_in_use_p, p->in_use_p, bitmap_size);
1300             }
1301
1302           /* Reset reset the number of free objects and clear the
1303              in-use bits.  These will be adjusted by mark_obj.  */
1304           p->num_free_objects = num_objects;
1305           memset (p->in_use_p, 0, bitmap_size);
1306
1307           /* Make sure the one-past-the-end bit is always set.  */
1308           p->in_use_p[num_objects / HOST_BITS_PER_LONG]
1309             = ((unsigned long) 1 << (num_objects % HOST_BITS_PER_LONG));
1310         }
1311     }
1312 }
1313
1314 /* Free all empty pages.  Partially empty pages need no attention
1315    because the `mark' bit doubles as an `unused' bit.  */
1316
1317 static inline void
1318 sweep_pages ()
1319 {
1320   unsigned order;
1321
1322   for (order = 2; order < NUM_ORDERS; order++)
1323     {
1324       /* The last page-entry to consider, regardless of entries
1325          placed at the end of the list.  */
1326       page_entry * const last = G.page_tails[order];
1327
1328       size_t num_objects = OBJECTS_PER_PAGE (order);
1329       size_t live_objects;
1330       page_entry *p, *previous;
1331       int done;
1332
1333       p = G.pages[order];
1334       if (p == NULL)
1335         continue;
1336
1337       previous = NULL;
1338       do
1339         {
1340           page_entry *next = p->next;
1341
1342           /* Loop until all entries have been examined.  */
1343           done = (p == last);
1344
1345           /* Add all live objects on this page to the count of
1346              allocated memory.  */
1347           live_objects = num_objects - p->num_free_objects;
1348
1349           G.allocated += OBJECT_SIZE (order) * live_objects;
1350
1351           /* Only objects on pages in the topmost context should get
1352              collected.  */
1353           if (p->context_depth < G.context_depth)
1354             ;
1355
1356           /* Remove the page if it's empty.  */
1357           else if (live_objects == 0)
1358             {
1359               if (! previous)
1360                 G.pages[order] = next;
1361               else
1362                 previous->next = next;
1363
1364               /* Are we removing the last element?  */
1365               if (p == G.page_tails[order])
1366                 G.page_tails[order] = previous;
1367               free_page (p);
1368               p = previous;
1369             }
1370
1371           /* If the page is full, move it to the end.  */
1372           else if (p->num_free_objects == 0)
1373             {
1374               /* Don't move it if it's already at the end.  */
1375               if (p != G.page_tails[order])
1376                 {
1377                   /* Move p to the end of the list.  */
1378                   p->next = NULL;
1379                   G.page_tails[order]->next = p;
1380
1381                   /* Update the tail pointer...  */
1382                   G.page_tails[order] = p;
1383
1384                   /* ... and the head pointer, if necessary.  */
1385                   if (! previous)
1386                     G.pages[order] = next;
1387                   else
1388                     previous->next = next;
1389                   p = previous;
1390                 }
1391             }
1392
1393           /* If we've fallen through to here, it's a page in the
1394              topmost context that is neither full nor empty.  Such a
1395              page must precede pages at lesser context depth in the
1396              list, so move it to the head.  */
1397           else if (p != G.pages[order])
1398             {
1399               previous->next = p->next;
1400               p->next = G.pages[order];
1401               G.pages[order] = p;
1402               /* Are we moving the last element?  */
1403               if (G.page_tails[order] == p)
1404                 G.page_tails[order] = previous;
1405               p = previous;
1406             }
1407
1408           previous = p;
1409           p = next;
1410         }
1411       while (! done);
1412
1413       /* Now, restore the in_use_p vectors for any pages from contexts
1414          other than the current one.  */
1415       for (p = G.pages[order]; p; p = p->next)
1416         if (p->context_depth != G.context_depth)
1417           ggc_recalculate_in_use_p (p);
1418     }
1419 }
1420
1421 #ifdef GGC_POISON
1422 /* Clobber all free objects.  */
1423
1424 static inline void
1425 poison_pages ()
1426 {
1427   unsigned order;
1428
1429   for (order = 2; order < NUM_ORDERS; order++)
1430     {
1431       size_t num_objects = OBJECTS_PER_PAGE (order);
1432       size_t size = OBJECT_SIZE (order);
1433       page_entry *p;
1434
1435       for (p = G.pages[order]; p != NULL; p = p->next)
1436         {
1437           size_t i;
1438
1439           if (p->context_depth != G.context_depth)
1440             /* Since we don't do any collection for pages in pushed
1441                contexts, there's no need to do any poisoning.  And
1442                besides, the IN_USE_P array isn't valid until we pop
1443                contexts.  */
1444             continue;
1445
1446           for (i = 0; i < num_objects; i++)
1447             {
1448               size_t word, bit;
1449               word = i / HOST_BITS_PER_LONG;
1450               bit = i % HOST_BITS_PER_LONG;
1451               if (((p->in_use_p[word] >> bit) & 1) == 0)
1452                 memset (p->page + i * size, 0xa5, size);
1453             }
1454         }
1455     }
1456 }
1457 #endif
1458
1459 /* Top level mark-and-sweep routine.  */
1460
1461 void
1462 ggc_collect ()
1463 {
1464   /* Avoid frequent unnecessary work by skipping collection if the
1465      total allocations haven't expanded much since the last
1466      collection.  */
1467 #ifndef GGC_ALWAYS_COLLECT
1468   if (G.allocated < GGC_MIN_EXPAND_FOR_GC * G.allocated_last_gc)
1469     return;
1470 #endif
1471
1472   timevar_push (TV_GC);
1473   if (!quiet_flag)
1474     fprintf (stderr, " {GC %luk -> ", (unsigned long) G.allocated / 1024);
1475
1476   /* Zero the total allocated bytes.  This will be recalculated in the
1477      sweep phase.  */
1478   G.allocated = 0;
1479
1480   /* Release the pages we freed the last time we collected, but didn't
1481      reuse in the interim.  */
1482   release_pages ();
1483
1484   clear_marks ();
1485   ggc_mark_roots ();
1486
1487 #ifdef GGC_POISON
1488   poison_pages ();
1489 #endif
1490
1491   sweep_pages ();
1492
1493   G.allocated_last_gc = G.allocated;
1494   if (G.allocated_last_gc < GGC_MIN_LAST_ALLOCATED)
1495     G.allocated_last_gc = GGC_MIN_LAST_ALLOCATED;
1496
1497   timevar_pop (TV_GC);
1498
1499   if (!quiet_flag)
1500     fprintf (stderr, "%luk}", (unsigned long) G.allocated / 1024);
1501 }
1502
1503 /* Print allocation statistics.  */
1504 #define SCALE(x) ((unsigned long) ((x) < 1024*10 \
1505                   ? (x) \
1506                   : ((x) < 1024*1024*10 \
1507                      ? (x) / 1024 \
1508                      : (x) / (1024*1024))))
1509 #define LABEL(x) ((x) < 1024*10 ? ' ' : ((x) < 1024*1024*10 ? 'k' : 'M'))
1510
1511 void
1512 ggc_print_statistics ()
1513 {
1514   struct ggc_statistics stats;
1515   unsigned int i;
1516   size_t total_overhead = 0;
1517
1518   /* Clear the statistics.  */
1519   memset (&stats, 0, sizeof (stats));
1520
1521   /* Make sure collection will really occur.  */
1522   G.allocated_last_gc = 0;
1523
1524   /* Collect and print the statistics common across collectors.  */
1525   ggc_print_common_statistics (stderr, &stats);
1526
1527   /* Release free pages so that we will not count the bytes allocated
1528      there as part of the total allocated memory.  */
1529   release_pages ();
1530
1531   /* Collect some information about the various sizes of
1532      allocation.  */
1533   fprintf (stderr, "\n%-5s %10s  %10s  %10s\n",
1534            "Size", "Allocated", "Used", "Overhead");
1535   for (i = 0; i < NUM_ORDERS; ++i)
1536     {
1537       page_entry *p;
1538       size_t allocated;
1539       size_t in_use;
1540       size_t overhead;
1541
1542       /* Skip empty entries.  */
1543       if (!G.pages[i])
1544         continue;
1545
1546       overhead = allocated = in_use = 0;
1547
1548       /* Figure out the total number of bytes allocated for objects of
1549          this size, and how many of them are actually in use.  Also figure
1550          out how much memory the page table is using.  */
1551       for (p = G.pages[i]; p; p = p->next)
1552         {
1553           allocated += p->bytes;
1554           in_use +=
1555             (OBJECTS_PER_PAGE (i) - p->num_free_objects) * OBJECT_SIZE (i);
1556
1557           overhead += (sizeof (page_entry) - sizeof (long)
1558                        + BITMAP_SIZE (OBJECTS_PER_PAGE (i) + 1));
1559         }
1560       fprintf (stderr, "%-5lu %10lu%c %10lu%c %10lu%c\n",
1561                (unsigned long) OBJECT_SIZE (i),
1562                SCALE (allocated), LABEL (allocated),
1563                SCALE (in_use), LABEL (in_use),
1564                SCALE (overhead), LABEL (overhead));
1565       total_overhead += overhead;
1566     }
1567   fprintf (stderr, "%-5s %10lu%c %10lu%c %10lu%c\n", "Total",
1568            SCALE (G.bytes_mapped), LABEL (G.bytes_mapped),
1569            SCALE (G.allocated), LABEL(G.allocated),
1570            SCALE (total_overhead), LABEL (total_overhead));
1571 }