OSDN Git Service

2010-09-30 Tobias Burnus <burnus@net-b.de>
[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, 2003, 2004, 2005, 2007, 2008, 2009,
3    2010 Free Software Foundation, Inc.
4
5 This file is part of GCC.
6
7 GCC is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 3, or (at your option) any later
10 version.
11
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
15 for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING3.  If not see
19 <http://www.gnu.org/licenses/>.  */
20
21 #include "config.h"
22 #include "system.h"
23 #include "coretypes.h"
24 #include "tm.h"
25 #include "tree.h"
26 #include "rtl.h"
27 #include "tm_p.h"
28 #include "toplev.h" /* exact_log2 */
29 #include "diagnostic-core.h"
30 #include "flags.h"
31 #include "ggc.h"
32 #include "ggc-internal.h"
33 #include "timevar.h"
34 #include "params.h"
35 #include "tree-flow.h"
36 #include "cfgloop.h"
37 #include "plugin.h"
38
39 /* Prefer MAP_ANON(YMOUS) to /dev/zero, since we don't need to keep a
40    file open.  Prefer either to valloc.  */
41 #ifdef HAVE_MMAP_ANON
42 # undef HAVE_MMAP_DEV_ZERO
43
44 # include <sys/mman.h>
45 # ifndef MAP_FAILED
46 #  define MAP_FAILED -1
47 # endif
48 # if !defined (MAP_ANONYMOUS) && defined (MAP_ANON)
49 #  define MAP_ANONYMOUS MAP_ANON
50 # endif
51 # define USING_MMAP
52
53 #endif
54
55 #ifdef HAVE_MMAP_DEV_ZERO
56
57 # include <sys/mman.h>
58 # ifndef MAP_FAILED
59 #  define MAP_FAILED -1
60 # endif
61 # define USING_MMAP
62
63 #endif
64
65 #ifndef USING_MMAP
66 #define USING_MALLOC_PAGE_GROUPS
67 #endif
68
69 /* Strategy:
70
71    This garbage-collecting allocator allocates objects on one of a set
72    of pages.  Each page can allocate objects of a single size only;
73    available sizes are powers of two starting at four bytes.  The size
74    of an allocation request is rounded up to the next power of two
75    (`order'), and satisfied from the appropriate page.
76
77    Each page is recorded in a page-entry, which also maintains an
78    in-use bitmap of object positions on the page.  This allows the
79    allocation state of a particular object to be flipped without
80    touching the page itself.
81
82    Each page-entry also has a context depth, which is used to track
83    pushing and popping of allocation contexts.  Only objects allocated
84    in the current (highest-numbered) context may be collected.
85
86    Page entries are arranged in an array of singly-linked lists.  The
87    array is indexed by the allocation size, in bits, of the pages on
88    it; i.e. all pages on a list allocate objects of the same size.
89    Pages are ordered on the list such that all non-full pages precede
90    all full pages, with non-full pages arranged in order of decreasing
91    context depth.
92
93    Empty pages (of all orders) are kept on a single page cache list,
94    and are considered first when new pages are required; they are
95    deallocated at the start of the next collection if they haven't
96    been recycled by then.  */
97
98 /* Define GGC_DEBUG_LEVEL to print debugging information.
99      0: No debugging output.
100      1: GC statistics only.
101      2: Page-entry allocations/deallocations as well.
102      3: Object allocations as well.
103      4: Object marks as well.  */
104 #define GGC_DEBUG_LEVEL (0)
105 \f
106 #ifndef HOST_BITS_PER_PTR
107 #define HOST_BITS_PER_PTR  HOST_BITS_PER_LONG
108 #endif
109
110 \f
111 /* A two-level tree is used to look up the page-entry for a given
112    pointer.  Two chunks of the pointer's bits are extracted to index
113    the first and second levels of the tree, as follows:
114
115                                    HOST_PAGE_SIZE_BITS
116                            32           |      |
117        msb +----------------+----+------+------+ lsb
118                             |    |      |
119                          PAGE_L1_BITS   |
120                                  |      |
121                                PAGE_L2_BITS
122
123    The bottommost HOST_PAGE_SIZE_BITS are ignored, since page-entry
124    pages are aligned on system page boundaries.  The next most
125    significant PAGE_L2_BITS and PAGE_L1_BITS are the second and first
126    index values in the lookup table, respectively.
127
128    For 32-bit architectures and the settings below, there are no
129    leftover bits.  For architectures with wider pointers, the lookup
130    tree points to a list of pages, which must be scanned to find the
131    correct one.  */
132
133 #define PAGE_L1_BITS    (8)
134 #define PAGE_L2_BITS    (32 - PAGE_L1_BITS - G.lg_pagesize)
135 #define PAGE_L1_SIZE    ((size_t) 1 << PAGE_L1_BITS)
136 #define PAGE_L2_SIZE    ((size_t) 1 << PAGE_L2_BITS)
137
138 #define LOOKUP_L1(p) \
139   (((size_t) (p) >> (32 - PAGE_L1_BITS)) & ((1 << PAGE_L1_BITS) - 1))
140
141 #define LOOKUP_L2(p) \
142   (((size_t) (p) >> G.lg_pagesize) & ((1 << PAGE_L2_BITS) - 1))
143
144 /* The number of objects per allocation page, for objects on a page of
145    the indicated ORDER.  */
146 #define OBJECTS_PER_PAGE(ORDER) objects_per_page_table[ORDER]
147
148 /* The number of objects in P.  */
149 #define OBJECTS_IN_PAGE(P) ((P)->bytes / OBJECT_SIZE ((P)->order))
150
151 /* The size of an object on a page of the indicated ORDER.  */
152 #define OBJECT_SIZE(ORDER) object_size_table[ORDER]
153
154 /* For speed, we avoid doing a general integer divide to locate the
155    offset in the allocation bitmap, by precalculating numbers M, S
156    such that (O * M) >> S == O / Z (modulo 2^32), for any offset O
157    within the page which is evenly divisible by the object size Z.  */
158 #define DIV_MULT(ORDER) inverse_table[ORDER].mult
159 #define DIV_SHIFT(ORDER) inverse_table[ORDER].shift
160 #define OFFSET_TO_BIT(OFFSET, ORDER) \
161   (((OFFSET) * DIV_MULT (ORDER)) >> DIV_SHIFT (ORDER))
162
163 /* We use this structure to determine the alignment required for
164    allocations.  For power-of-two sized allocations, that's not a
165    problem, but it does matter for odd-sized allocations.
166    We do not care about alignment for floating-point types.  */
167
168 struct max_alignment {
169   char c;
170   union {
171     HOST_WIDEST_INT i;
172     void *p;
173   } u;
174 };
175
176 /* The biggest alignment required.  */
177
178 #define MAX_ALIGNMENT (offsetof (struct max_alignment, u))
179
180
181 /* The number of extra orders, not corresponding to power-of-two sized
182    objects.  */
183
184 #define NUM_EXTRA_ORDERS ARRAY_SIZE (extra_order_size_table)
185
186 #define RTL_SIZE(NSLOTS) \
187   (RTX_HDR_SIZE + (NSLOTS) * sizeof (rtunion))
188
189 #define TREE_EXP_SIZE(OPS) \
190   (sizeof (struct tree_exp) + ((OPS) - 1) * sizeof (tree))
191
192 /* The Ith entry is the maximum size of an object to be stored in the
193    Ith extra order.  Adding a new entry to this array is the *only*
194    thing you need to do to add a new special allocation size.  */
195
196 static const size_t extra_order_size_table[] = {
197   /* Extra orders for small non-power-of-two multiples of MAX_ALIGNMENT.
198      There are a lot of structures with these sizes and explicitly
199      listing them risks orders being dropped because they changed size.  */
200   MAX_ALIGNMENT * 3,
201   MAX_ALIGNMENT * 5,
202   MAX_ALIGNMENT * 6,
203   MAX_ALIGNMENT * 7,
204   MAX_ALIGNMENT * 9,
205   MAX_ALIGNMENT * 10,
206   MAX_ALIGNMENT * 11,
207   MAX_ALIGNMENT * 12,
208   MAX_ALIGNMENT * 13,
209   MAX_ALIGNMENT * 14,
210   MAX_ALIGNMENT * 15,
211   sizeof (struct tree_decl_non_common),
212   sizeof (struct tree_field_decl),
213   sizeof (struct tree_parm_decl),
214   sizeof (struct tree_var_decl),
215   sizeof (struct tree_type),
216   sizeof (struct function),
217   sizeof (struct basic_block_def),
218   sizeof (struct cgraph_node),
219   sizeof (struct loop),
220 };
221
222 /* The total number of orders.  */
223
224 #define NUM_ORDERS (HOST_BITS_PER_PTR + NUM_EXTRA_ORDERS)
225
226 /* Compute the smallest nonnegative number which when added to X gives
227    a multiple of F.  */
228
229 #define ROUND_UP_VALUE(x, f) ((f) - 1 - ((f) - 1 + (x)) % (f))
230
231 /* Compute the smallest multiple of F that is >= X.  */
232
233 #define ROUND_UP(x, f) (CEIL (x, f) * (f))
234
235 /* The Ith entry is the number of objects on a page or order I.  */
236
237 static unsigned objects_per_page_table[NUM_ORDERS];
238
239 /* The Ith entry is the size of an object on a page of order I.  */
240
241 static size_t object_size_table[NUM_ORDERS];
242
243 /* The Ith entry is a pair of numbers (mult, shift) such that
244    ((k * mult) >> shift) mod 2^32 == (k / OBJECT_SIZE(I)) mod 2^32,
245    for all k evenly divisible by OBJECT_SIZE(I).  */
246
247 static struct
248 {
249   size_t mult;
250   unsigned int shift;
251 }
252 inverse_table[NUM_ORDERS];
253
254 /* A page_entry records the status of an allocation page.  This
255    structure is dynamically sized to fit the bitmap in_use_p.  */
256 typedef struct page_entry
257 {
258   /* The next page-entry with objects of the same size, or NULL if
259      this is the last page-entry.  */
260   struct page_entry *next;
261
262   /* The previous page-entry with objects of the same size, or NULL if
263      this is the first page-entry.   The PREV pointer exists solely to
264      keep the cost of ggc_free manageable.  */
265   struct page_entry *prev;
266
267   /* The number of bytes allocated.  (This will always be a multiple
268      of the host system page size.)  */
269   size_t bytes;
270
271   /* The address at which the memory is allocated.  */
272   char *page;
273
274 #ifdef USING_MALLOC_PAGE_GROUPS
275   /* Back pointer to the page group this page came from.  */
276   struct page_group *group;
277 #endif
278
279   /* This is the index in the by_depth varray where this page table
280      can be found.  */
281   unsigned long index_by_depth;
282
283   /* Context depth of this page.  */
284   unsigned short context_depth;
285
286   /* The number of free objects remaining on this page.  */
287   unsigned short num_free_objects;
288
289   /* A likely candidate for the bit position of a free object for the
290      next allocation from this page.  */
291   unsigned short next_bit_hint;
292
293   /* The lg of size of objects allocated from this page.  */
294   unsigned char order;
295
296   /* A bit vector indicating whether or not objects are in use.  The
297      Nth bit is one if the Nth object on this page is allocated.  This
298      array is dynamically sized.  */
299   unsigned long in_use_p[1];
300 } page_entry;
301
302 #ifdef USING_MALLOC_PAGE_GROUPS
303 /* A page_group describes a large allocation from malloc, from which
304    we parcel out aligned pages.  */
305 typedef struct page_group
306 {
307   /* A linked list of all extant page groups.  */
308   struct page_group *next;
309
310   /* The address we received from malloc.  */
311   char *allocation;
312
313   /* The size of the block.  */
314   size_t alloc_size;
315
316   /* A bitmask of pages in use.  */
317   unsigned int in_use;
318 } page_group;
319 #endif
320
321 #if HOST_BITS_PER_PTR <= 32
322
323 /* On 32-bit hosts, we use a two level page table, as pictured above.  */
324 typedef page_entry **page_table[PAGE_L1_SIZE];
325
326 #else
327
328 /* On 64-bit hosts, we use the same two level page tables plus a linked
329    list that disambiguates the top 32-bits.  There will almost always be
330    exactly one entry in the list.  */
331 typedef struct page_table_chain
332 {
333   struct page_table_chain *next;
334   size_t high_bits;
335   page_entry **table[PAGE_L1_SIZE];
336 } *page_table;
337
338 #endif
339
340 #ifdef ENABLE_GC_ALWAYS_COLLECT
341 /* List of free objects to be verified as actually free on the
342    next collection.  */
343 struct free_object
344 {
345   void *object;
346   struct free_object *next;
347 };
348 #endif
349
350 /* The rest of the global variables.  */
351 static struct globals
352 {
353   /* The Nth element in this array is a page with objects of size 2^N.
354      If there are any pages with free objects, they will be at the
355      head of the list.  NULL if there are no page-entries for this
356      object size.  */
357   page_entry *pages[NUM_ORDERS];
358
359   /* The Nth element in this array is the last page with objects of
360      size 2^N.  NULL if there are no page-entries for this object
361      size.  */
362   page_entry *page_tails[NUM_ORDERS];
363
364   /* Lookup table for associating allocation pages with object addresses.  */
365   page_table lookup;
366
367   /* The system's page size.  */
368   size_t pagesize;
369   size_t lg_pagesize;
370
371   /* Bytes currently allocated.  */
372   size_t allocated;
373
374   /* Bytes currently allocated at the end of the last collection.  */
375   size_t allocated_last_gc;
376
377   /* Total amount of memory mapped.  */
378   size_t bytes_mapped;
379
380   /* Bit N set if any allocations have been done at context depth N.  */
381   unsigned long context_depth_allocations;
382
383   /* Bit N set if any collections have been done at context depth N.  */
384   unsigned long context_depth_collections;
385
386   /* The current depth in the context stack.  */
387   unsigned short context_depth;
388
389   /* A file descriptor open to /dev/zero for reading.  */
390 #if defined (HAVE_MMAP_DEV_ZERO)
391   int dev_zero_fd;
392 #endif
393
394   /* A cache of free system pages.  */
395   page_entry *free_pages;
396
397 #ifdef USING_MALLOC_PAGE_GROUPS
398   page_group *page_groups;
399 #endif
400
401   /* The file descriptor for debugging output.  */
402   FILE *debug_file;
403
404   /* Current number of elements in use in depth below.  */
405   unsigned int depth_in_use;
406
407   /* Maximum number of elements that can be used before resizing.  */
408   unsigned int depth_max;
409
410   /* Each element of this array is an index in by_depth where the given
411      depth starts.  This structure is indexed by that given depth we
412      are interested in.  */
413   unsigned int *depth;
414
415   /* Current number of elements in use in by_depth below.  */
416   unsigned int by_depth_in_use;
417
418   /* Maximum number of elements that can be used before resizing.  */
419   unsigned int by_depth_max;
420
421   /* Each element of this array is a pointer to a page_entry, all
422      page_entries can be found in here by increasing depth.
423      index_by_depth in the page_entry is the index into this data
424      structure where that page_entry can be found.  This is used to
425      speed up finding all page_entries at a particular depth.  */
426   page_entry **by_depth;
427
428   /* Each element is a pointer to the saved in_use_p bits, if any,
429      zero otherwise.  We allocate them all together, to enable a
430      better runtime data access pattern.  */
431   unsigned long **save_in_use;
432
433 #ifdef ENABLE_GC_ALWAYS_COLLECT
434   /* List of free objects to be verified as actually free on the
435      next collection.  */
436   struct free_object *free_object_list;
437 #endif
438
439 #ifdef GATHER_STATISTICS
440   struct
441   {
442     /* Total GC-allocated memory.  */
443     unsigned long long total_allocated;
444     /* Total overhead for GC-allocated memory.  */
445     unsigned long long total_overhead;
446
447     /* Total allocations and overhead for sizes less than 32, 64 and 128.
448        These sizes are interesting because they are typical cache line
449        sizes.  */
450
451     unsigned long long total_allocated_under32;
452     unsigned long long total_overhead_under32;
453
454     unsigned long long total_allocated_under64;
455     unsigned long long total_overhead_under64;
456
457     unsigned long long total_allocated_under128;
458     unsigned long long total_overhead_under128;
459
460     /* The allocations for each of the allocation orders.  */
461     unsigned long long total_allocated_per_order[NUM_ORDERS];
462
463     /* The overhead for each of the allocation orders.  */
464     unsigned long long total_overhead_per_order[NUM_ORDERS];
465   } stats;
466 #endif
467 } G;
468
469 /* The size in bytes required to maintain a bitmap for the objects
470    on a page-entry.  */
471 #define BITMAP_SIZE(Num_objects) \
472   (CEIL ((Num_objects), HOST_BITS_PER_LONG) * sizeof(long))
473
474 /* Allocate pages in chunks of this size, to throttle calls to memory
475    allocation routines.  The first page is used, the rest go onto the
476    free list.  This cannot be larger than HOST_BITS_PER_INT for the
477    in_use bitmask for page_group.  Hosts that need a different value
478    can override this by defining GGC_QUIRE_SIZE explicitly.  */
479 #ifndef GGC_QUIRE_SIZE
480 # ifdef USING_MMAP
481 #  define GGC_QUIRE_SIZE 256
482 # else
483 #  define GGC_QUIRE_SIZE 16
484 # endif
485 #endif
486
487 /* Initial guess as to how many page table entries we might need.  */
488 #define INITIAL_PTE_COUNT 128
489 \f
490 static int ggc_allocated_p (const void *);
491 static page_entry *lookup_page_table_entry (const void *);
492 static void set_page_table_entry (void *, page_entry *);
493 #ifdef USING_MMAP
494 static char *alloc_anon (char *, size_t);
495 #endif
496 #ifdef USING_MALLOC_PAGE_GROUPS
497 static size_t page_group_index (char *, char *);
498 static void set_page_group_in_use (page_group *, char *);
499 static void clear_page_group_in_use (page_group *, char *);
500 #endif
501 static struct page_entry * alloc_page (unsigned);
502 static void free_page (struct page_entry *);
503 static void release_pages (void);
504 static void clear_marks (void);
505 static void sweep_pages (void);
506 static void ggc_recalculate_in_use_p (page_entry *);
507 static void compute_inverse (unsigned);
508 static inline void adjust_depth (void);
509 static void move_ptes_to_front (int, int);
510
511 void debug_print_page_list (int);
512 static void push_depth (unsigned int);
513 static void push_by_depth (page_entry *, unsigned long *);
514
515 /* Push an entry onto G.depth.  */
516
517 inline static void
518 push_depth (unsigned int i)
519 {
520   if (G.depth_in_use >= G.depth_max)
521     {
522       G.depth_max *= 2;
523       G.depth = XRESIZEVEC (unsigned int, G.depth, G.depth_max);
524     }
525   G.depth[G.depth_in_use++] = i;
526 }
527
528 /* Push an entry onto G.by_depth and G.save_in_use.  */
529
530 inline static void
531 push_by_depth (page_entry *p, unsigned long *s)
532 {
533   if (G.by_depth_in_use >= G.by_depth_max)
534     {
535       G.by_depth_max *= 2;
536       G.by_depth = XRESIZEVEC (page_entry *, G.by_depth, G.by_depth_max);
537       G.save_in_use = XRESIZEVEC (unsigned long *, G.save_in_use,
538                                   G.by_depth_max);
539     }
540   G.by_depth[G.by_depth_in_use] = p;
541   G.save_in_use[G.by_depth_in_use++] = s;
542 }
543
544 #if (GCC_VERSION < 3001)
545 #define prefetch(X) ((void) X)
546 #else
547 #define prefetch(X) __builtin_prefetch (X)
548 #endif
549
550 #define save_in_use_p_i(__i) \
551   (G.save_in_use[__i])
552 #define save_in_use_p(__p) \
553   (save_in_use_p_i (__p->index_by_depth))
554
555 /* Returns nonzero if P was allocated in GC'able memory.  */
556
557 static inline int
558 ggc_allocated_p (const void *p)
559 {
560   page_entry ***base;
561   size_t L1, L2;
562
563 #if HOST_BITS_PER_PTR <= 32
564   base = &G.lookup[0];
565 #else
566   page_table table = G.lookup;
567   size_t high_bits = (size_t) p & ~ (size_t) 0xffffffff;
568   while (1)
569     {
570       if (table == NULL)
571         return 0;
572       if (table->high_bits == high_bits)
573         break;
574       table = table->next;
575     }
576   base = &table->table[0];
577 #endif
578
579   /* Extract the level 1 and 2 indices.  */
580   L1 = LOOKUP_L1 (p);
581   L2 = LOOKUP_L2 (p);
582
583   return base[L1] && base[L1][L2];
584 }
585
586 /* Traverse the page table and find the entry for a page.
587    Die (probably) if the object wasn't allocated via GC.  */
588
589 static inline page_entry *
590 lookup_page_table_entry (const void *p)
591 {
592   page_entry ***base;
593   size_t L1, L2;
594
595 #if HOST_BITS_PER_PTR <= 32
596   base = &G.lookup[0];
597 #else
598   page_table table = G.lookup;
599   size_t high_bits = (size_t) p & ~ (size_t) 0xffffffff;
600   while (table->high_bits != high_bits)
601     table = table->next;
602   base = &table->table[0];
603 #endif
604
605   /* Extract the level 1 and 2 indices.  */
606   L1 = LOOKUP_L1 (p);
607   L2 = LOOKUP_L2 (p);
608
609   return base[L1][L2];
610 }
611
612 /* Set the page table entry for a page.  */
613
614 static void
615 set_page_table_entry (void *p, page_entry *entry)
616 {
617   page_entry ***base;
618   size_t L1, L2;
619
620 #if HOST_BITS_PER_PTR <= 32
621   base = &G.lookup[0];
622 #else
623   page_table table;
624   size_t high_bits = (size_t) p & ~ (size_t) 0xffffffff;
625   for (table = G.lookup; table; table = table->next)
626     if (table->high_bits == high_bits)
627       goto found;
628
629   /* Not found -- allocate a new table.  */
630   table = XCNEW (struct page_table_chain);
631   table->next = G.lookup;
632   table->high_bits = high_bits;
633   G.lookup = table;
634 found:
635   base = &table->table[0];
636 #endif
637
638   /* Extract the level 1 and 2 indices.  */
639   L1 = LOOKUP_L1 (p);
640   L2 = LOOKUP_L2 (p);
641
642   if (base[L1] == NULL)
643     base[L1] = XCNEWVEC (page_entry *, PAGE_L2_SIZE);
644
645   base[L1][L2] = entry;
646 }
647
648 /* Prints the page-entry for object size ORDER, for debugging.  */
649
650 DEBUG_FUNCTION void
651 debug_print_page_list (int order)
652 {
653   page_entry *p;
654   printf ("Head=%p, Tail=%p:\n", (void *) G.pages[order],
655           (void *) G.page_tails[order]);
656   p = G.pages[order];
657   while (p != NULL)
658     {
659       printf ("%p(%1d|%3d) -> ", (void *) p, p->context_depth,
660               p->num_free_objects);
661       p = p->next;
662     }
663   printf ("NULL\n");
664   fflush (stdout);
665 }
666
667 #ifdef USING_MMAP
668 /* Allocate SIZE bytes of anonymous memory, preferably near PREF,
669    (if non-null).  The ifdef structure here is intended to cause a
670    compile error unless exactly one of the HAVE_* is defined.  */
671
672 static inline char *
673 alloc_anon (char *pref ATTRIBUTE_UNUSED, size_t size)
674 {
675 #ifdef HAVE_MMAP_ANON
676   char *page = (char *) mmap (pref, size, PROT_READ | PROT_WRITE,
677                               MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
678 #endif
679 #ifdef HAVE_MMAP_DEV_ZERO
680   char *page = (char *) mmap (pref, size, PROT_READ | PROT_WRITE,
681                               MAP_PRIVATE, G.dev_zero_fd, 0);
682 #endif
683
684   if (page == (char *) MAP_FAILED)
685     {
686       perror ("virtual memory exhausted");
687       exit (FATAL_EXIT_CODE);
688     }
689
690   /* Remember that we allocated this memory.  */
691   G.bytes_mapped += size;
692
693   /* Pretend we don't have access to the allocated pages.  We'll enable
694      access to smaller pieces of the area in ggc_internal_alloc.  Discard the
695      handle to avoid handle leak.  */
696   VALGRIND_DISCARD (VALGRIND_MAKE_MEM_NOACCESS (page, size));
697
698   return page;
699 }
700 #endif
701 #ifdef USING_MALLOC_PAGE_GROUPS
702 /* Compute the index for this page into the page group.  */
703
704 static inline size_t
705 page_group_index (char *allocation, char *page)
706 {
707   return (size_t) (page - allocation) >> G.lg_pagesize;
708 }
709
710 /* Set and clear the in_use bit for this page in the page group.  */
711
712 static inline void
713 set_page_group_in_use (page_group *group, char *page)
714 {
715   group->in_use |= 1 << page_group_index (group->allocation, page);
716 }
717
718 static inline void
719 clear_page_group_in_use (page_group *group, char *page)
720 {
721   group->in_use &= ~(1 << page_group_index (group->allocation, page));
722 }
723 #endif
724
725 /* Allocate a new page for allocating objects of size 2^ORDER,
726    and return an entry for it.  The entry is not added to the
727    appropriate page_table list.  */
728
729 static inline struct page_entry *
730 alloc_page (unsigned order)
731 {
732   struct page_entry *entry, *p, **pp;
733   char *page;
734   size_t num_objects;
735   size_t bitmap_size;
736   size_t page_entry_size;
737   size_t entry_size;
738 #ifdef USING_MALLOC_PAGE_GROUPS
739   page_group *group;
740 #endif
741
742   num_objects = OBJECTS_PER_PAGE (order);
743   bitmap_size = BITMAP_SIZE (num_objects + 1);
744   page_entry_size = sizeof (page_entry) - sizeof (long) + bitmap_size;
745   entry_size = num_objects * OBJECT_SIZE (order);
746   if (entry_size < G.pagesize)
747     entry_size = G.pagesize;
748
749   entry = NULL;
750   page = NULL;
751
752   /* Check the list of free pages for one we can use.  */
753   for (pp = &G.free_pages, p = *pp; p; pp = &p->next, p = *pp)
754     if (p->bytes == entry_size)
755       break;
756
757   if (p != NULL)
758     {
759       /* Recycle the allocated memory from this page ...  */
760       *pp = p->next;
761       page = p->page;
762
763 #ifdef USING_MALLOC_PAGE_GROUPS
764       group = p->group;
765 #endif
766
767       /* ... and, if possible, the page entry itself.  */
768       if (p->order == order)
769         {
770           entry = p;
771           memset (entry, 0, page_entry_size);
772         }
773       else
774         free (p);
775     }
776 #ifdef USING_MMAP
777   else if (entry_size == G.pagesize)
778     {
779       /* We want just one page.  Allocate a bunch of them and put the
780          extras on the freelist.  (Can only do this optimization with
781          mmap for backing store.)  */
782       struct page_entry *e, *f = G.free_pages;
783       int i;
784
785       page = alloc_anon (NULL, G.pagesize * GGC_QUIRE_SIZE);
786
787       /* This loop counts down so that the chain will be in ascending
788          memory order.  */
789       for (i = GGC_QUIRE_SIZE - 1; i >= 1; i--)
790         {
791           e = XCNEWVAR (struct page_entry, page_entry_size);
792           e->order = order;
793           e->bytes = G.pagesize;
794           e->page = page + (i << G.lg_pagesize);
795           e->next = f;
796           f = e;
797         }
798
799       G.free_pages = f;
800     }
801   else
802     page = alloc_anon (NULL, entry_size);
803 #endif
804 #ifdef USING_MALLOC_PAGE_GROUPS
805   else
806     {
807       /* Allocate a large block of memory and serve out the aligned
808          pages therein.  This results in much less memory wastage
809          than the traditional implementation of valloc.  */
810
811       char *allocation, *a, *enda;
812       size_t alloc_size, head_slop, tail_slop;
813       int multiple_pages = (entry_size == G.pagesize);
814
815       if (multiple_pages)
816         alloc_size = GGC_QUIRE_SIZE * G.pagesize;
817       else
818         alloc_size = entry_size + G.pagesize - 1;
819       allocation = XNEWVEC (char, alloc_size);
820
821       page = (char *) (((size_t) allocation + G.pagesize - 1) & -G.pagesize);
822       head_slop = page - allocation;
823       if (multiple_pages)
824         tail_slop = ((size_t) allocation + alloc_size) & (G.pagesize - 1);
825       else
826         tail_slop = alloc_size - entry_size - head_slop;
827       enda = allocation + alloc_size - tail_slop;
828
829       /* We allocated N pages, which are likely not aligned, leaving
830          us with N-1 usable pages.  We plan to place the page_group
831          structure somewhere in the slop.  */
832       if (head_slop >= sizeof (page_group))
833         group = (page_group *)page - 1;
834       else
835         {
836           /* We magically got an aligned allocation.  Too bad, we have
837              to waste a page anyway.  */
838           if (tail_slop == 0)
839             {
840               enda -= G.pagesize;
841               tail_slop += G.pagesize;
842             }
843           gcc_assert (tail_slop >= sizeof (page_group));
844           group = (page_group *)enda;
845           tail_slop -= sizeof (page_group);
846         }
847
848       /* Remember that we allocated this memory.  */
849       group->next = G.page_groups;
850       group->allocation = allocation;
851       group->alloc_size = alloc_size;
852       group->in_use = 0;
853       G.page_groups = group;
854       G.bytes_mapped += alloc_size;
855
856       /* If we allocated multiple pages, put the rest on the free list.  */
857       if (multiple_pages)
858         {
859           struct page_entry *e, *f = G.free_pages;
860           for (a = enda - G.pagesize; a != page; a -= G.pagesize)
861             {
862               e = XCNEWVAR (struct page_entry, page_entry_size);
863               e->order = order;
864               e->bytes = G.pagesize;
865               e->page = a;
866               e->group = group;
867               e->next = f;
868               f = e;
869             }
870           G.free_pages = f;
871         }
872     }
873 #endif
874
875   if (entry == NULL)
876     entry = XCNEWVAR (struct page_entry, page_entry_size);
877
878   entry->bytes = entry_size;
879   entry->page = page;
880   entry->context_depth = G.context_depth;
881   entry->order = order;
882   entry->num_free_objects = num_objects;
883   entry->next_bit_hint = 1;
884
885   G.context_depth_allocations |= (unsigned long)1 << G.context_depth;
886
887 #ifdef USING_MALLOC_PAGE_GROUPS
888   entry->group = group;
889   set_page_group_in_use (group, page);
890 #endif
891
892   /* Set the one-past-the-end in-use bit.  This acts as a sentry as we
893      increment the hint.  */
894   entry->in_use_p[num_objects / HOST_BITS_PER_LONG]
895     = (unsigned long) 1 << (num_objects % HOST_BITS_PER_LONG);
896
897   set_page_table_entry (page, entry);
898
899   if (GGC_DEBUG_LEVEL >= 2)
900     fprintf (G.debug_file,
901              "Allocating page at %p, object size=%lu, data %p-%p\n",
902              (void *) entry, (unsigned long) OBJECT_SIZE (order), page,
903              page + entry_size - 1);
904
905   return entry;
906 }
907
908 /* Adjust the size of G.depth so that no index greater than the one
909    used by the top of the G.by_depth is used.  */
910
911 static inline void
912 adjust_depth (void)
913 {
914   page_entry *top;
915
916   if (G.by_depth_in_use)
917     {
918       top = G.by_depth[G.by_depth_in_use-1];
919
920       /* Peel back indices in depth that index into by_depth, so that
921          as new elements are added to by_depth, we note the indices
922          of those elements, if they are for new context depths.  */
923       while (G.depth_in_use > (size_t)top->context_depth+1)
924         --G.depth_in_use;
925     }
926 }
927
928 /* For a page that is no longer needed, put it on the free page list.  */
929
930 static void
931 free_page (page_entry *entry)
932 {
933   if (GGC_DEBUG_LEVEL >= 2)
934     fprintf (G.debug_file,
935              "Deallocating page at %p, data %p-%p\n", (void *) entry,
936              entry->page, entry->page + entry->bytes - 1);
937
938   /* Mark the page as inaccessible.  Discard the handle to avoid handle
939      leak.  */
940   VALGRIND_DISCARD (VALGRIND_MAKE_MEM_NOACCESS (entry->page, entry->bytes));
941
942   set_page_table_entry (entry->page, NULL);
943
944 #ifdef USING_MALLOC_PAGE_GROUPS
945   clear_page_group_in_use (entry->group, entry->page);
946 #endif
947
948   if (G.by_depth_in_use > 1)
949     {
950       page_entry *top = G.by_depth[G.by_depth_in_use-1];
951       int i = entry->index_by_depth;
952
953       /* We cannot free a page from a context deeper than the current
954          one.  */
955       gcc_assert (entry->context_depth == top->context_depth);
956
957       /* Put top element into freed slot.  */
958       G.by_depth[i] = top;
959       G.save_in_use[i] = G.save_in_use[G.by_depth_in_use-1];
960       top->index_by_depth = i;
961     }
962   --G.by_depth_in_use;
963
964   adjust_depth ();
965
966   entry->next = G.free_pages;
967   G.free_pages = entry;
968 }
969
970 /* Release the free page cache to the system.  */
971
972 static void
973 release_pages (void)
974 {
975 #ifdef USING_MMAP
976   page_entry *p, *next;
977   char *start;
978   size_t len;
979
980   /* Gather up adjacent pages so they are unmapped together.  */
981   p = G.free_pages;
982
983   while (p)
984     {
985       start = p->page;
986       next = p->next;
987       len = p->bytes;
988       free (p);
989       p = next;
990
991       while (p && p->page == start + len)
992         {
993           next = p->next;
994           len += p->bytes;
995           free (p);
996           p = next;
997         }
998
999       munmap (start, len);
1000       G.bytes_mapped -= len;
1001     }
1002
1003   G.free_pages = NULL;
1004 #endif
1005 #ifdef USING_MALLOC_PAGE_GROUPS
1006   page_entry **pp, *p;
1007   page_group **gp, *g;
1008
1009   /* Remove all pages from free page groups from the list.  */
1010   pp = &G.free_pages;
1011   while ((p = *pp) != NULL)
1012     if (p->group->in_use == 0)
1013       {
1014         *pp = p->next;
1015         free (p);
1016       }
1017     else
1018       pp = &p->next;
1019
1020   /* Remove all free page groups, and release the storage.  */
1021   gp = &G.page_groups;
1022   while ((g = *gp) != NULL)
1023     if (g->in_use == 0)
1024       {
1025         *gp = g->next;
1026         G.bytes_mapped -= g->alloc_size;
1027         free (g->allocation);
1028       }
1029     else
1030       gp = &g->next;
1031 #endif
1032 }
1033
1034 /* This table provides a fast way to determine ceil(log_2(size)) for
1035    allocation requests.  The minimum allocation size is eight bytes.  */
1036 #define NUM_SIZE_LOOKUP 512
1037 static unsigned char size_lookup[NUM_SIZE_LOOKUP] =
1038 {
1039   3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4,
1040   4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
1041   5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
1042   6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
1043   6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
1044   7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
1045   7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
1046   7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
1047   7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
1048   8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
1049   8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
1050   8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
1051   8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
1052   8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
1053   8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
1054   8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
1055   8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
1056   9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
1057   9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
1058   9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
1059   9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
1060   9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
1061   9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
1062   9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
1063   9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
1064   9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
1065   9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
1066   9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
1067   9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
1068   9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
1069   9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
1070   9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9
1071 };
1072
1073 /* Typed allocation function.  Does nothing special in this collector.  */
1074
1075 void *
1076 ggc_alloc_typed_stat (enum gt_types_enum type ATTRIBUTE_UNUSED, size_t size
1077                       MEM_STAT_DECL)
1078 {
1079   return ggc_internal_alloc_stat (size PASS_MEM_STAT);
1080 }
1081
1082 /* Allocate a chunk of memory of SIZE bytes.  Its contents are undefined.  */
1083
1084 void *
1085 ggc_internal_alloc_stat (size_t size MEM_STAT_DECL)
1086 {
1087   size_t order, word, bit, object_offset, object_size;
1088   struct page_entry *entry;
1089   void *result;
1090
1091   if (size < NUM_SIZE_LOOKUP)
1092     {
1093       order = size_lookup[size];
1094       object_size = OBJECT_SIZE (order);
1095     }
1096   else
1097     {
1098       order = 10;
1099       while (size > (object_size = OBJECT_SIZE (order)))
1100         order++;
1101     }
1102
1103   /* If there are non-full pages for this size allocation, they are at
1104      the head of the list.  */
1105   entry = G.pages[order];
1106
1107   /* If there is no page for this object size, or all pages in this
1108      context are full, allocate a new page.  */
1109   if (entry == NULL || entry->num_free_objects == 0)
1110     {
1111       struct page_entry *new_entry;
1112       new_entry = alloc_page (order);
1113
1114       new_entry->index_by_depth = G.by_depth_in_use;
1115       push_by_depth (new_entry, 0);
1116
1117       /* We can skip context depths, if we do, make sure we go all the
1118          way to the new depth.  */
1119       while (new_entry->context_depth >= G.depth_in_use)
1120         push_depth (G.by_depth_in_use-1);
1121
1122       /* If this is the only entry, it's also the tail.  If it is not
1123          the only entry, then we must update the PREV pointer of the
1124          ENTRY (G.pages[order]) to point to our new page entry.  */
1125       if (entry == NULL)
1126         G.page_tails[order] = new_entry;
1127       else
1128         entry->prev = new_entry;
1129
1130       /* Put new pages at the head of the page list.  By definition the
1131          entry at the head of the list always has a NULL pointer.  */
1132       new_entry->next = entry;
1133       new_entry->prev = NULL;
1134       entry = new_entry;
1135       G.pages[order] = new_entry;
1136
1137       /* For a new page, we know the word and bit positions (in the
1138          in_use bitmap) of the first available object -- they're zero.  */
1139       new_entry->next_bit_hint = 1;
1140       word = 0;
1141       bit = 0;
1142       object_offset = 0;
1143     }
1144   else
1145     {
1146       /* First try to use the hint left from the previous allocation
1147          to locate a clear bit in the in-use bitmap.  We've made sure
1148          that the one-past-the-end bit is always set, so if the hint
1149          has run over, this test will fail.  */
1150       unsigned hint = entry->next_bit_hint;
1151       word = hint / HOST_BITS_PER_LONG;
1152       bit = hint % HOST_BITS_PER_LONG;
1153
1154       /* If the hint didn't work, scan the bitmap from the beginning.  */
1155       if ((entry->in_use_p[word] >> bit) & 1)
1156         {
1157           word = bit = 0;
1158           while (~entry->in_use_p[word] == 0)
1159             ++word;
1160
1161 #if GCC_VERSION >= 3004
1162           bit = __builtin_ctzl (~entry->in_use_p[word]);
1163 #else
1164           while ((entry->in_use_p[word] >> bit) & 1)
1165             ++bit;
1166 #endif
1167
1168           hint = word * HOST_BITS_PER_LONG + bit;
1169         }
1170
1171       /* Next time, try the next bit.  */
1172       entry->next_bit_hint = hint + 1;
1173
1174       object_offset = hint * object_size;
1175     }
1176
1177   /* Set the in-use bit.  */
1178   entry->in_use_p[word] |= ((unsigned long) 1 << bit);
1179
1180   /* Keep a running total of the number of free objects.  If this page
1181      fills up, we may have to move it to the end of the list if the
1182      next page isn't full.  If the next page is full, all subsequent
1183      pages are full, so there's no need to move it.  */
1184   if (--entry->num_free_objects == 0
1185       && entry->next != NULL
1186       && entry->next->num_free_objects > 0)
1187     {
1188       /* We have a new head for the list.  */
1189       G.pages[order] = entry->next;
1190
1191       /* We are moving ENTRY to the end of the page table list.
1192          The new page at the head of the list will have NULL in
1193          its PREV field and ENTRY will have NULL in its NEXT field.  */
1194       entry->next->prev = NULL;
1195       entry->next = NULL;
1196
1197       /* Append ENTRY to the tail of the list.  */
1198       entry->prev = G.page_tails[order];
1199       G.page_tails[order]->next = entry;
1200       G.page_tails[order] = entry;
1201     }
1202
1203   /* Calculate the object's address.  */
1204   result = entry->page + object_offset;
1205 #ifdef GATHER_STATISTICS
1206   ggc_record_overhead (OBJECT_SIZE (order), OBJECT_SIZE (order) - size,
1207                        result PASS_MEM_STAT);
1208 #endif
1209
1210 #ifdef ENABLE_GC_CHECKING
1211   /* Keep poisoning-by-writing-0xaf the object, in an attempt to keep the
1212      exact same semantics in presence of memory bugs, regardless of
1213      ENABLE_VALGRIND_CHECKING.  We override this request below.  Drop the
1214      handle to avoid handle leak.  */
1215   VALGRIND_DISCARD (VALGRIND_MAKE_MEM_UNDEFINED (result, object_size));
1216
1217   /* `Poison' the entire allocated object, including any padding at
1218      the end.  */
1219   memset (result, 0xaf, object_size);
1220
1221   /* Make the bytes after the end of the object unaccessible.  Discard the
1222      handle to avoid handle leak.  */
1223   VALGRIND_DISCARD (VALGRIND_MAKE_MEM_NOACCESS ((char *) result + size,
1224                                                 object_size - size));
1225 #endif
1226
1227   /* Tell Valgrind that the memory is there, but its content isn't
1228      defined.  The bytes at the end of the object are still marked
1229      unaccessible.  */
1230   VALGRIND_DISCARD (VALGRIND_MAKE_MEM_UNDEFINED (result, size));
1231
1232   /* Keep track of how many bytes are being allocated.  This
1233      information is used in deciding when to collect.  */
1234   G.allocated += object_size;
1235
1236   /* For timevar statistics.  */
1237   timevar_ggc_mem_total += object_size;
1238
1239 #ifdef GATHER_STATISTICS
1240   {
1241     size_t overhead = object_size - size;
1242
1243     G.stats.total_overhead += overhead;
1244     G.stats.total_allocated += object_size;
1245     G.stats.total_overhead_per_order[order] += overhead;
1246     G.stats.total_allocated_per_order[order] += object_size;
1247
1248     if (size <= 32)
1249       {
1250         G.stats.total_overhead_under32 += overhead;
1251         G.stats.total_allocated_under32 += object_size;
1252       }
1253     if (size <= 64)
1254       {
1255         G.stats.total_overhead_under64 += overhead;
1256         G.stats.total_allocated_under64 += object_size;
1257       }
1258     if (size <= 128)
1259       {
1260         G.stats.total_overhead_under128 += overhead;
1261         G.stats.total_allocated_under128 += object_size;
1262       }
1263   }
1264 #endif
1265
1266   if (GGC_DEBUG_LEVEL >= 3)
1267     fprintf (G.debug_file,
1268              "Allocating object, requested size=%lu, actual=%lu at %p on %p\n",
1269              (unsigned long) size, (unsigned long) object_size, result,
1270              (void *) entry);
1271
1272   return result;
1273 }
1274
1275 /* Mark function for strings.  */
1276
1277 void
1278 gt_ggc_m_S (const void *p)
1279 {
1280   page_entry *entry;
1281   unsigned bit, word;
1282   unsigned long mask;
1283   unsigned long offset;
1284
1285   if (!p || !ggc_allocated_p (p))
1286     return;
1287
1288   /* Look up the page on which the object is alloced.  .  */
1289   entry = lookup_page_table_entry (p);
1290   gcc_assert (entry);
1291
1292   /* Calculate the index of the object on the page; this is its bit
1293      position in the in_use_p bitmap.  Note that because a char* might
1294      point to the middle of an object, we need special code here to
1295      make sure P points to the start of an object.  */
1296   offset = ((const char *) p - entry->page) % object_size_table[entry->order];
1297   if (offset)
1298     {
1299       /* Here we've seen a char* which does not point to the beginning
1300          of an allocated object.  We assume it points to the middle of
1301          a STRING_CST.  */
1302       gcc_assert (offset == offsetof (struct tree_string, str));
1303       p = ((const char *) p) - offset;
1304       gt_ggc_mx_lang_tree_node (CONST_CAST (void *, p));
1305       return;
1306     }
1307
1308   bit = OFFSET_TO_BIT (((const char *) p) - entry->page, entry->order);
1309   word = bit / HOST_BITS_PER_LONG;
1310   mask = (unsigned long) 1 << (bit % HOST_BITS_PER_LONG);
1311
1312   /* If the bit was previously set, skip it.  */
1313   if (entry->in_use_p[word] & mask)
1314     return;
1315
1316   /* Otherwise set it, and decrement the free object count.  */
1317   entry->in_use_p[word] |= mask;
1318   entry->num_free_objects -= 1;
1319
1320   if (GGC_DEBUG_LEVEL >= 4)
1321     fprintf (G.debug_file, "Marking %p\n", p);
1322
1323   return;
1324 }
1325
1326 /* If P is not marked, marks it and return false.  Otherwise return true.
1327    P must have been allocated by the GC allocator; it mustn't point to
1328    static objects, stack variables, or memory allocated with malloc.  */
1329
1330 int
1331 ggc_set_mark (const void *p)
1332 {
1333   page_entry *entry;
1334   unsigned bit, word;
1335   unsigned long mask;
1336
1337   /* Look up the page on which the object is alloced.  If the object
1338      wasn't allocated by the collector, we'll probably die.  */
1339   entry = lookup_page_table_entry (p);
1340   gcc_assert (entry);
1341
1342   /* Calculate the index of the object on the page; this is its bit
1343      position in the in_use_p bitmap.  */
1344   bit = OFFSET_TO_BIT (((const char *) p) - entry->page, entry->order);
1345   word = bit / HOST_BITS_PER_LONG;
1346   mask = (unsigned long) 1 << (bit % HOST_BITS_PER_LONG);
1347
1348   /* If the bit was previously set, skip it.  */
1349   if (entry->in_use_p[word] & mask)
1350     return 1;
1351
1352   /* Otherwise set it, and decrement the free object count.  */
1353   entry->in_use_p[word] |= mask;
1354   entry->num_free_objects -= 1;
1355
1356   if (GGC_DEBUG_LEVEL >= 4)
1357     fprintf (G.debug_file, "Marking %p\n", p);
1358
1359   return 0;
1360 }
1361
1362 /* Return 1 if P has been marked, zero otherwise.
1363    P must have been allocated by the GC allocator; it mustn't point to
1364    static objects, stack variables, or memory allocated with malloc.  */
1365
1366 int
1367 ggc_marked_p (const void *p)
1368 {
1369   page_entry *entry;
1370   unsigned bit, word;
1371   unsigned long mask;
1372
1373   /* Look up the page on which the object is alloced.  If the object
1374      wasn't allocated by the collector, we'll probably die.  */
1375   entry = lookup_page_table_entry (p);
1376   gcc_assert (entry);
1377
1378   /* Calculate the index of the object on the page; this is its bit
1379      position in the in_use_p bitmap.  */
1380   bit = OFFSET_TO_BIT (((const char *) p) - entry->page, entry->order);
1381   word = bit / HOST_BITS_PER_LONG;
1382   mask = (unsigned long) 1 << (bit % HOST_BITS_PER_LONG);
1383
1384   return (entry->in_use_p[word] & mask) != 0;
1385 }
1386
1387 /* Return the size of the gc-able object P.  */
1388
1389 size_t
1390 ggc_get_size (const void *p)
1391 {
1392   page_entry *pe = lookup_page_table_entry (p);
1393   return OBJECT_SIZE (pe->order);
1394 }
1395
1396 /* Release the memory for object P.  */
1397
1398 void
1399 ggc_free (void *p)
1400 {
1401   page_entry *pe = lookup_page_table_entry (p);
1402   size_t order = pe->order;
1403   size_t size = OBJECT_SIZE (order);
1404
1405 #ifdef GATHER_STATISTICS
1406   ggc_free_overhead (p);
1407 #endif
1408
1409   if (GGC_DEBUG_LEVEL >= 3)
1410     fprintf (G.debug_file,
1411              "Freeing object, actual size=%lu, at %p on %p\n",
1412              (unsigned long) size, p, (void *) pe);
1413
1414 #ifdef ENABLE_GC_CHECKING
1415   /* Poison the data, to indicate the data is garbage.  */
1416   VALGRIND_DISCARD (VALGRIND_MAKE_MEM_UNDEFINED (p, size));
1417   memset (p, 0xa5, size);
1418 #endif
1419   /* Let valgrind know the object is free.  */
1420   VALGRIND_DISCARD (VALGRIND_MAKE_MEM_NOACCESS (p, size));
1421
1422 #ifdef ENABLE_GC_ALWAYS_COLLECT
1423   /* In the completely-anal-checking mode, we do *not* immediately free
1424      the data, but instead verify that the data is *actually* not
1425      reachable the next time we collect.  */
1426   {
1427     struct free_object *fo = XNEW (struct free_object);
1428     fo->object = p;
1429     fo->next = G.free_object_list;
1430     G.free_object_list = fo;
1431   }
1432 #else
1433   {
1434     unsigned int bit_offset, word, bit;
1435
1436     G.allocated -= size;
1437
1438     /* Mark the object not-in-use.  */
1439     bit_offset = OFFSET_TO_BIT (((const char *) p) - pe->page, order);
1440     word = bit_offset / HOST_BITS_PER_LONG;
1441     bit = bit_offset % HOST_BITS_PER_LONG;
1442     pe->in_use_p[word] &= ~(1UL << bit);
1443
1444     if (pe->num_free_objects++ == 0)
1445       {
1446         page_entry *p, *q;
1447
1448         /* If the page is completely full, then it's supposed to
1449            be after all pages that aren't.  Since we've freed one
1450            object from a page that was full, we need to move the
1451            page to the head of the list.
1452
1453            PE is the node we want to move.  Q is the previous node
1454            and P is the next node in the list.  */
1455         q = pe->prev;
1456         if (q && q->num_free_objects == 0)
1457           {
1458             p = pe->next;
1459
1460             q->next = p;
1461
1462             /* If PE was at the end of the list, then Q becomes the
1463                new end of the list.  If PE was not the end of the
1464                list, then we need to update the PREV field for P.  */
1465             if (!p)
1466               G.page_tails[order] = q;
1467             else
1468               p->prev = q;
1469
1470             /* Move PE to the head of the list.  */
1471             pe->next = G.pages[order];
1472             pe->prev = NULL;
1473             G.pages[order]->prev = pe;
1474             G.pages[order] = pe;
1475           }
1476
1477         /* Reset the hint bit to point to the only free object.  */
1478         pe->next_bit_hint = bit_offset;
1479       }
1480   }
1481 #endif
1482 }
1483 \f
1484 /* Subroutine of init_ggc which computes the pair of numbers used to
1485    perform division by OBJECT_SIZE (order) and fills in inverse_table[].
1486
1487    This algorithm is taken from Granlund and Montgomery's paper
1488    "Division by Invariant Integers using Multiplication"
1489    (Proc. SIGPLAN PLDI, 1994), section 9 (Exact division by
1490    constants).  */
1491
1492 static void
1493 compute_inverse (unsigned order)
1494 {
1495   size_t size, inv;
1496   unsigned int e;
1497
1498   size = OBJECT_SIZE (order);
1499   e = 0;
1500   while (size % 2 == 0)
1501     {
1502       e++;
1503       size >>= 1;
1504     }
1505
1506   inv = size;
1507   while (inv * size != 1)
1508     inv = inv * (2 - inv*size);
1509
1510   DIV_MULT (order) = inv;
1511   DIV_SHIFT (order) = e;
1512 }
1513
1514 /* Initialize the ggc-mmap allocator.  */
1515 void
1516 init_ggc (void)
1517 {
1518   unsigned order;
1519
1520   G.pagesize = getpagesize();
1521   G.lg_pagesize = exact_log2 (G.pagesize);
1522
1523 #ifdef HAVE_MMAP_DEV_ZERO
1524   G.dev_zero_fd = open ("/dev/zero", O_RDONLY);
1525   if (G.dev_zero_fd == -1)
1526     internal_error ("open /dev/zero: %m");
1527 #endif
1528
1529 #if 0
1530   G.debug_file = fopen ("ggc-mmap.debug", "w");
1531 #else
1532   G.debug_file = stdout;
1533 #endif
1534
1535 #ifdef USING_MMAP
1536   /* StunOS has an amazing off-by-one error for the first mmap allocation
1537      after fiddling with RLIMIT_STACK.  The result, as hard as it is to
1538      believe, is an unaligned page allocation, which would cause us to
1539      hork badly if we tried to use it.  */
1540   {
1541     char *p = alloc_anon (NULL, G.pagesize);
1542     struct page_entry *e;
1543     if ((size_t)p & (G.pagesize - 1))
1544       {
1545         /* How losing.  Discard this one and try another.  If we still
1546            can't get something useful, give up.  */
1547
1548         p = alloc_anon (NULL, G.pagesize);
1549         gcc_assert (!((size_t)p & (G.pagesize - 1)));
1550       }
1551
1552     /* We have a good page, might as well hold onto it...  */
1553     e = XCNEW (struct page_entry);
1554     e->bytes = G.pagesize;
1555     e->page = p;
1556     e->next = G.free_pages;
1557     G.free_pages = e;
1558   }
1559 #endif
1560
1561   /* Initialize the object size table.  */
1562   for (order = 0; order < HOST_BITS_PER_PTR; ++order)
1563     object_size_table[order] = (size_t) 1 << order;
1564   for (order = HOST_BITS_PER_PTR; order < NUM_ORDERS; ++order)
1565     {
1566       size_t s = extra_order_size_table[order - HOST_BITS_PER_PTR];
1567
1568       /* If S is not a multiple of the MAX_ALIGNMENT, then round it up
1569          so that we're sure of getting aligned memory.  */
1570       s = ROUND_UP (s, MAX_ALIGNMENT);
1571       object_size_table[order] = s;
1572     }
1573
1574   /* Initialize the objects-per-page and inverse tables.  */
1575   for (order = 0; order < NUM_ORDERS; ++order)
1576     {
1577       objects_per_page_table[order] = G.pagesize / OBJECT_SIZE (order);
1578       if (objects_per_page_table[order] == 0)
1579         objects_per_page_table[order] = 1;
1580       compute_inverse (order);
1581     }
1582
1583   /* Reset the size_lookup array to put appropriately sized objects in
1584      the special orders.  All objects bigger than the previous power
1585      of two, but no greater than the special size, should go in the
1586      new order.  */
1587   for (order = HOST_BITS_PER_PTR; order < NUM_ORDERS; ++order)
1588     {
1589       int o;
1590       int i;
1591
1592       i = OBJECT_SIZE (order);
1593       if (i >= NUM_SIZE_LOOKUP)
1594         continue;
1595
1596       for (o = size_lookup[i]; o == size_lookup [i]; --i)
1597         size_lookup[i] = order;
1598     }
1599
1600   G.depth_in_use = 0;
1601   G.depth_max = 10;
1602   G.depth = XNEWVEC (unsigned int, G.depth_max);
1603
1604   G.by_depth_in_use = 0;
1605   G.by_depth_max = INITIAL_PTE_COUNT;
1606   G.by_depth = XNEWVEC (page_entry *, G.by_depth_max);
1607   G.save_in_use = XNEWVEC (unsigned long *, G.by_depth_max);
1608 }
1609
1610 /* Merge the SAVE_IN_USE_P and IN_USE_P arrays in P so that IN_USE_P
1611    reflects reality.  Recalculate NUM_FREE_OBJECTS as well.  */
1612
1613 static void
1614 ggc_recalculate_in_use_p (page_entry *p)
1615 {
1616   unsigned int i;
1617   size_t num_objects;
1618
1619   /* Because the past-the-end bit in in_use_p is always set, we
1620      pretend there is one additional object.  */
1621   num_objects = OBJECTS_IN_PAGE (p) + 1;
1622
1623   /* Reset the free object count.  */
1624   p->num_free_objects = num_objects;
1625
1626   /* Combine the IN_USE_P and SAVE_IN_USE_P arrays.  */
1627   for (i = 0;
1628        i < CEIL (BITMAP_SIZE (num_objects),
1629                  sizeof (*p->in_use_p));
1630        ++i)
1631     {
1632       unsigned long j;
1633
1634       /* Something is in use if it is marked, or if it was in use in a
1635          context further down the context stack.  */
1636       p->in_use_p[i] |= save_in_use_p (p)[i];
1637
1638       /* Decrement the free object count for every object allocated.  */
1639       for (j = p->in_use_p[i]; j; j >>= 1)
1640         p->num_free_objects -= (j & 1);
1641     }
1642
1643   gcc_assert (p->num_free_objects < num_objects);
1644 }
1645 \f
1646 /* Unmark all objects.  */
1647
1648 static void
1649 clear_marks (void)
1650 {
1651   unsigned order;
1652
1653   for (order = 2; order < NUM_ORDERS; order++)
1654     {
1655       page_entry *p;
1656
1657       for (p = G.pages[order]; p != NULL; p = p->next)
1658         {
1659           size_t num_objects = OBJECTS_IN_PAGE (p);
1660           size_t bitmap_size = BITMAP_SIZE (num_objects + 1);
1661
1662           /* The data should be page-aligned.  */
1663           gcc_assert (!((size_t) p->page & (G.pagesize - 1)));
1664
1665           /* Pages that aren't in the topmost context are not collected;
1666              nevertheless, we need their in-use bit vectors to store GC
1667              marks.  So, back them up first.  */
1668           if (p->context_depth < G.context_depth)
1669             {
1670               if (! save_in_use_p (p))
1671                 save_in_use_p (p) = XNEWVAR (unsigned long, bitmap_size);
1672               memcpy (save_in_use_p (p), p->in_use_p, bitmap_size);
1673             }
1674
1675           /* Reset reset the number of free objects and clear the
1676              in-use bits.  These will be adjusted by mark_obj.  */
1677           p->num_free_objects = num_objects;
1678           memset (p->in_use_p, 0, bitmap_size);
1679
1680           /* Make sure the one-past-the-end bit is always set.  */
1681           p->in_use_p[num_objects / HOST_BITS_PER_LONG]
1682             = ((unsigned long) 1 << (num_objects % HOST_BITS_PER_LONG));
1683         }
1684     }
1685 }
1686
1687 /* Free all empty pages.  Partially empty pages need no attention
1688    because the `mark' bit doubles as an `unused' bit.  */
1689
1690 static void
1691 sweep_pages (void)
1692 {
1693   unsigned order;
1694
1695   for (order = 2; order < NUM_ORDERS; order++)
1696     {
1697       /* The last page-entry to consider, regardless of entries
1698          placed at the end of the list.  */
1699       page_entry * const last = G.page_tails[order];
1700
1701       size_t num_objects;
1702       size_t live_objects;
1703       page_entry *p, *previous;
1704       int done;
1705
1706       p = G.pages[order];
1707       if (p == NULL)
1708         continue;
1709
1710       previous = NULL;
1711       do
1712         {
1713           page_entry *next = p->next;
1714
1715           /* Loop until all entries have been examined.  */
1716           done = (p == last);
1717
1718           num_objects = OBJECTS_IN_PAGE (p);
1719
1720           /* Add all live objects on this page to the count of
1721              allocated memory.  */
1722           live_objects = num_objects - p->num_free_objects;
1723
1724           G.allocated += OBJECT_SIZE (order) * live_objects;
1725
1726           /* Only objects on pages in the topmost context should get
1727              collected.  */
1728           if (p->context_depth < G.context_depth)
1729             ;
1730
1731           /* Remove the page if it's empty.  */
1732           else if (live_objects == 0)
1733             {
1734               /* If P was the first page in the list, then NEXT
1735                  becomes the new first page in the list, otherwise
1736                  splice P out of the forward pointers.  */
1737               if (! previous)
1738                 G.pages[order] = next;
1739               else
1740                 previous->next = next;
1741
1742               /* Splice P out of the back pointers too.  */
1743               if (next)
1744                 next->prev = previous;
1745
1746               /* Are we removing the last element?  */
1747               if (p == G.page_tails[order])
1748                 G.page_tails[order] = previous;
1749               free_page (p);
1750               p = previous;
1751             }
1752
1753           /* If the page is full, move it to the end.  */
1754           else if (p->num_free_objects == 0)
1755             {
1756               /* Don't move it if it's already at the end.  */
1757               if (p != G.page_tails[order])
1758                 {
1759                   /* Move p to the end of the list.  */
1760                   p->next = NULL;
1761                   p->prev = G.page_tails[order];
1762                   G.page_tails[order]->next = p;
1763
1764                   /* Update the tail pointer...  */
1765                   G.page_tails[order] = p;
1766
1767                   /* ... and the head pointer, if necessary.  */
1768                   if (! previous)
1769                     G.pages[order] = next;
1770                   else
1771                     previous->next = next;
1772
1773                   /* And update the backpointer in NEXT if necessary.  */
1774                   if (next)
1775                     next->prev = previous;
1776
1777                   p = previous;
1778                 }
1779             }
1780
1781           /* If we've fallen through to here, it's a page in the
1782              topmost context that is neither full nor empty.  Such a
1783              page must precede pages at lesser context depth in the
1784              list, so move it to the head.  */
1785           else if (p != G.pages[order])
1786             {
1787               previous->next = p->next;
1788
1789               /* Update the backchain in the next node if it exists.  */
1790               if (p->next)
1791                 p->next->prev = previous;
1792
1793               /* Move P to the head of the list.  */
1794               p->next = G.pages[order];
1795               p->prev = NULL;
1796               G.pages[order]->prev = p;
1797
1798               /* Update the head pointer.  */
1799               G.pages[order] = p;
1800
1801               /* Are we moving the last element?  */
1802               if (G.page_tails[order] == p)
1803                 G.page_tails[order] = previous;
1804               p = previous;
1805             }
1806
1807           previous = p;
1808           p = next;
1809         }
1810       while (! done);
1811
1812       /* Now, restore the in_use_p vectors for any pages from contexts
1813          other than the current one.  */
1814       for (p = G.pages[order]; p; p = p->next)
1815         if (p->context_depth != G.context_depth)
1816           ggc_recalculate_in_use_p (p);
1817     }
1818 }
1819
1820 #ifdef ENABLE_GC_CHECKING
1821 /* Clobber all free objects.  */
1822
1823 static void
1824 poison_pages (void)
1825 {
1826   unsigned order;
1827
1828   for (order = 2; order < NUM_ORDERS; order++)
1829     {
1830       size_t size = OBJECT_SIZE (order);
1831       page_entry *p;
1832
1833       for (p = G.pages[order]; p != NULL; p = p->next)
1834         {
1835           size_t num_objects;
1836           size_t i;
1837
1838           if (p->context_depth != G.context_depth)
1839             /* Since we don't do any collection for pages in pushed
1840                contexts, there's no need to do any poisoning.  And
1841                besides, the IN_USE_P array isn't valid until we pop
1842                contexts.  */
1843             continue;
1844
1845           num_objects = OBJECTS_IN_PAGE (p);
1846           for (i = 0; i < num_objects; i++)
1847             {
1848               size_t word, bit;
1849               word = i / HOST_BITS_PER_LONG;
1850               bit = i % HOST_BITS_PER_LONG;
1851               if (((p->in_use_p[word] >> bit) & 1) == 0)
1852                 {
1853                   char *object = p->page + i * size;
1854
1855                   /* Keep poison-by-write when we expect to use Valgrind,
1856                      so the exact same memory semantics is kept, in case
1857                      there are memory errors.  We override this request
1858                      below.  */
1859                   VALGRIND_DISCARD (VALGRIND_MAKE_MEM_UNDEFINED (object,
1860                                                                  size));
1861                   memset (object, 0xa5, size);
1862
1863                   /* Drop the handle to avoid handle leak.  */
1864                   VALGRIND_DISCARD (VALGRIND_MAKE_MEM_NOACCESS (object, size));
1865                 }
1866             }
1867         }
1868     }
1869 }
1870 #else
1871 #define poison_pages()
1872 #endif
1873
1874 #ifdef ENABLE_GC_ALWAYS_COLLECT
1875 /* Validate that the reportedly free objects actually are.  */
1876
1877 static void
1878 validate_free_objects (void)
1879 {
1880   struct free_object *f, *next, *still_free = NULL;
1881
1882   for (f = G.free_object_list; f ; f = next)
1883     {
1884       page_entry *pe = lookup_page_table_entry (f->object);
1885       size_t bit, word;
1886
1887       bit = OFFSET_TO_BIT ((char *)f->object - pe->page, pe->order);
1888       word = bit / HOST_BITS_PER_LONG;
1889       bit = bit % HOST_BITS_PER_LONG;
1890       next = f->next;
1891
1892       /* Make certain it isn't visible from any root.  Notice that we
1893          do this check before sweep_pages merges save_in_use_p.  */
1894       gcc_assert (!(pe->in_use_p[word] & (1UL << bit)));
1895
1896       /* If the object comes from an outer context, then retain the
1897          free_object entry, so that we can verify that the address
1898          isn't live on the stack in some outer context.  */
1899       if (pe->context_depth != G.context_depth)
1900         {
1901           f->next = still_free;
1902           still_free = f;
1903         }
1904       else
1905         free (f);
1906     }
1907
1908   G.free_object_list = still_free;
1909 }
1910 #else
1911 #define validate_free_objects()
1912 #endif
1913
1914 /* Top level mark-and-sweep routine.  */
1915
1916 void
1917 ggc_collect (void)
1918 {
1919   /* Avoid frequent unnecessary work by skipping collection if the
1920      total allocations haven't expanded much since the last
1921      collection.  */
1922   float allocated_last_gc =
1923     MAX (G.allocated_last_gc, (size_t)PARAM_VALUE (GGC_MIN_HEAPSIZE) * 1024);
1924
1925   float min_expand = allocated_last_gc * PARAM_VALUE (GGC_MIN_EXPAND) / 100;
1926
1927   if (G.allocated < allocated_last_gc + min_expand && !ggc_force_collect)
1928     return;
1929
1930   timevar_push (TV_GC);
1931   if (!quiet_flag)
1932     fprintf (stderr, " {GC %luk -> ", (unsigned long) G.allocated / 1024);
1933   if (GGC_DEBUG_LEVEL >= 2)
1934     fprintf (G.debug_file, "BEGIN COLLECTING\n");
1935
1936   /* Zero the total allocated bytes.  This will be recalculated in the
1937      sweep phase.  */
1938   G.allocated = 0;
1939
1940   /* Release the pages we freed the last time we collected, but didn't
1941      reuse in the interim.  */
1942   release_pages ();
1943
1944   /* Indicate that we've seen collections at this context depth.  */
1945   G.context_depth_collections = ((unsigned long)1 << (G.context_depth + 1)) - 1;
1946
1947   invoke_plugin_callbacks (PLUGIN_GGC_START, NULL);
1948
1949   clear_marks ();
1950   ggc_mark_roots ();
1951 #ifdef GATHER_STATISTICS
1952   ggc_prune_overhead_list ();
1953 #endif
1954   poison_pages ();
1955   validate_free_objects ();
1956   sweep_pages ();
1957
1958   G.allocated_last_gc = G.allocated;
1959
1960   invoke_plugin_callbacks (PLUGIN_GGC_END, NULL);
1961
1962   timevar_pop (TV_GC);
1963
1964   if (!quiet_flag)
1965     fprintf (stderr, "%luk}", (unsigned long) G.allocated / 1024);
1966   if (GGC_DEBUG_LEVEL >= 2)
1967     fprintf (G.debug_file, "END COLLECTING\n");
1968 }
1969
1970 /* Print allocation statistics.  */
1971 #define SCALE(x) ((unsigned long) ((x) < 1024*10 \
1972                   ? (x) \
1973                   : ((x) < 1024*1024*10 \
1974                      ? (x) / 1024 \
1975                      : (x) / (1024*1024))))
1976 #define STAT_LABEL(x) ((x) < 1024*10 ? ' ' : ((x) < 1024*1024*10 ? 'k' : 'M'))
1977
1978 void
1979 ggc_print_statistics (void)
1980 {
1981   struct ggc_statistics stats;
1982   unsigned int i;
1983   size_t total_overhead = 0;
1984
1985   /* Clear the statistics.  */
1986   memset (&stats, 0, sizeof (stats));
1987
1988   /* Make sure collection will really occur.  */
1989   G.allocated_last_gc = 0;
1990
1991   /* Collect and print the statistics common across collectors.  */
1992   ggc_print_common_statistics (stderr, &stats);
1993
1994   /* Release free pages so that we will not count the bytes allocated
1995      there as part of the total allocated memory.  */
1996   release_pages ();
1997
1998   /* Collect some information about the various sizes of
1999      allocation.  */
2000   fprintf (stderr,
2001            "Memory still allocated at the end of the compilation process\n");
2002   fprintf (stderr, "%-5s %10s  %10s  %10s\n",
2003            "Size", "Allocated", "Used", "Overhead");
2004   for (i = 0; i < NUM_ORDERS; ++i)
2005     {
2006       page_entry *p;
2007       size_t allocated;
2008       size_t in_use;
2009       size_t overhead;
2010
2011       /* Skip empty entries.  */
2012       if (!G.pages[i])
2013         continue;
2014
2015       overhead = allocated = in_use = 0;
2016
2017       /* Figure out the total number of bytes allocated for objects of
2018          this size, and how many of them are actually in use.  Also figure
2019          out how much memory the page table is using.  */
2020       for (p = G.pages[i]; p; p = p->next)
2021         {
2022           allocated += p->bytes;
2023           in_use +=
2024             (OBJECTS_IN_PAGE (p) - p->num_free_objects) * OBJECT_SIZE (i);
2025
2026           overhead += (sizeof (page_entry) - sizeof (long)
2027                        + BITMAP_SIZE (OBJECTS_IN_PAGE (p) + 1));
2028         }
2029       fprintf (stderr, "%-5lu %10lu%c %10lu%c %10lu%c\n",
2030                (unsigned long) OBJECT_SIZE (i),
2031                SCALE (allocated), STAT_LABEL (allocated),
2032                SCALE (in_use), STAT_LABEL (in_use),
2033                SCALE (overhead), STAT_LABEL (overhead));
2034       total_overhead += overhead;
2035     }
2036   fprintf (stderr, "%-5s %10lu%c %10lu%c %10lu%c\n", "Total",
2037            SCALE (G.bytes_mapped), STAT_LABEL (G.bytes_mapped),
2038            SCALE (G.allocated), STAT_LABEL(G.allocated),
2039            SCALE (total_overhead), STAT_LABEL (total_overhead));
2040
2041 #ifdef GATHER_STATISTICS
2042   {
2043     fprintf (stderr, "\nTotal allocations and overheads during the compilation process\n");
2044
2045     fprintf (stderr, "Total Overhead:                        %10lld\n",
2046              G.stats.total_overhead);
2047     fprintf (stderr, "Total Allocated:                       %10lld\n",
2048              G.stats.total_allocated);
2049
2050     fprintf (stderr, "Total Overhead  under  32B:            %10lld\n",
2051              G.stats.total_overhead_under32);
2052     fprintf (stderr, "Total Allocated under  32B:            %10lld\n",
2053              G.stats.total_allocated_under32);
2054     fprintf (stderr, "Total Overhead  under  64B:            %10lld\n",
2055              G.stats.total_overhead_under64);
2056     fprintf (stderr, "Total Allocated under  64B:            %10lld\n",
2057              G.stats.total_allocated_under64);
2058     fprintf (stderr, "Total Overhead  under 128B:            %10lld\n",
2059              G.stats.total_overhead_under128);
2060     fprintf (stderr, "Total Allocated under 128B:            %10lld\n",
2061              G.stats.total_allocated_under128);
2062
2063     for (i = 0; i < NUM_ORDERS; i++)
2064       if (G.stats.total_allocated_per_order[i])
2065         {
2066           fprintf (stderr, "Total Overhead  page size %7lu:     %10lld\n",
2067                    (unsigned long) OBJECT_SIZE (i),
2068                    G.stats.total_overhead_per_order[i]);
2069           fprintf (stderr, "Total Allocated page size %7lu:     %10lld\n",
2070                    (unsigned long) OBJECT_SIZE (i),
2071                    G.stats.total_allocated_per_order[i]);
2072         }
2073   }
2074 #endif
2075 }
2076 \f
2077 struct ggc_pch_ondisk
2078 {
2079   unsigned totals[NUM_ORDERS];
2080 };
2081
2082 struct ggc_pch_data
2083 {
2084   struct ggc_pch_ondisk d;
2085   size_t base[NUM_ORDERS];
2086   size_t written[NUM_ORDERS];
2087 };
2088
2089 struct ggc_pch_data *
2090 init_ggc_pch (void)
2091 {
2092   return XCNEW (struct ggc_pch_data);
2093 }
2094
2095 void
2096 ggc_pch_count_object (struct ggc_pch_data *d, void *x ATTRIBUTE_UNUSED,
2097                       size_t size, bool is_string ATTRIBUTE_UNUSED,
2098                       enum gt_types_enum type ATTRIBUTE_UNUSED)
2099 {
2100   unsigned order;
2101
2102   if (size < NUM_SIZE_LOOKUP)
2103     order = size_lookup[size];
2104   else
2105     {
2106       order = 10;
2107       while (size > OBJECT_SIZE (order))
2108         order++;
2109     }
2110
2111   d->d.totals[order]++;
2112 }
2113
2114 size_t
2115 ggc_pch_total_size (struct ggc_pch_data *d)
2116 {
2117   size_t a = 0;
2118   unsigned i;
2119
2120   for (i = 0; i < NUM_ORDERS; i++)
2121     a += ROUND_UP (d->d.totals[i] * OBJECT_SIZE (i), G.pagesize);
2122   return a;
2123 }
2124
2125 void
2126 ggc_pch_this_base (struct ggc_pch_data *d, void *base)
2127 {
2128   size_t a = (size_t) base;
2129   unsigned i;
2130
2131   for (i = 0; i < NUM_ORDERS; i++)
2132     {
2133       d->base[i] = a;
2134       a += ROUND_UP (d->d.totals[i] * OBJECT_SIZE (i), G.pagesize);
2135     }
2136 }
2137
2138
2139 char *
2140 ggc_pch_alloc_object (struct ggc_pch_data *d, void *x ATTRIBUTE_UNUSED,
2141                       size_t size, bool is_string ATTRIBUTE_UNUSED,
2142                       enum gt_types_enum type ATTRIBUTE_UNUSED)
2143 {
2144   unsigned order;
2145   char *result;
2146
2147   if (size < NUM_SIZE_LOOKUP)
2148     order = size_lookup[size];
2149   else
2150     {
2151       order = 10;
2152       while (size > OBJECT_SIZE (order))
2153         order++;
2154     }
2155
2156   result = (char *) d->base[order];
2157   d->base[order] += OBJECT_SIZE (order);
2158   return result;
2159 }
2160
2161 void
2162 ggc_pch_prepare_write (struct ggc_pch_data *d ATTRIBUTE_UNUSED,
2163                        FILE *f ATTRIBUTE_UNUSED)
2164 {
2165   /* Nothing to do.  */
2166 }
2167
2168 void
2169 ggc_pch_write_object (struct ggc_pch_data *d ATTRIBUTE_UNUSED,
2170                       FILE *f, void *x, void *newx ATTRIBUTE_UNUSED,
2171                       size_t size, bool is_string ATTRIBUTE_UNUSED)
2172 {
2173   unsigned order;
2174   static const char emptyBytes[256] = { 0 };
2175
2176   if (size < NUM_SIZE_LOOKUP)
2177     order = size_lookup[size];
2178   else
2179     {
2180       order = 10;
2181       while (size > OBJECT_SIZE (order))
2182         order++;
2183     }
2184
2185   if (fwrite (x, size, 1, f) != 1)
2186     fatal_error ("can't write PCH file: %m");
2187
2188   /* If SIZE is not the same as OBJECT_SIZE(order), then we need to pad the
2189      object out to OBJECT_SIZE(order).  This happens for strings.  */
2190
2191   if (size != OBJECT_SIZE (order))
2192     {
2193       unsigned padding = OBJECT_SIZE(order) - size;
2194
2195       /* To speed small writes, we use a nulled-out array that's larger
2196          than most padding requests as the source for our null bytes.  This
2197          permits us to do the padding with fwrite() rather than fseek(), and
2198          limits the chance the OS may try to flush any outstanding writes.  */
2199       if (padding <= sizeof(emptyBytes))
2200         {
2201           if (fwrite (emptyBytes, 1, padding, f) != padding)
2202             fatal_error ("can't write PCH file");
2203         }
2204       else
2205         {
2206           /* Larger than our buffer?  Just default to fseek.  */
2207           if (fseek (f, padding, SEEK_CUR) != 0)
2208             fatal_error ("can't write PCH file");
2209         }
2210     }
2211
2212   d->written[order]++;
2213   if (d->written[order] == d->d.totals[order]
2214       && fseek (f, ROUND_UP_VALUE (d->d.totals[order] * OBJECT_SIZE (order),
2215                                    G.pagesize),
2216                 SEEK_CUR) != 0)
2217     fatal_error ("can't write PCH file: %m");
2218 }
2219
2220 void
2221 ggc_pch_finish (struct ggc_pch_data *d, FILE *f)
2222 {
2223   if (fwrite (&d->d, sizeof (d->d), 1, f) != 1)
2224     fatal_error ("can't write PCH file: %m");
2225   free (d);
2226 }
2227
2228 /* Move the PCH PTE entries just added to the end of by_depth, to the
2229    front.  */
2230
2231 static void
2232 move_ptes_to_front (int count_old_page_tables, int count_new_page_tables)
2233 {
2234   unsigned i;
2235
2236   /* First, we swap the new entries to the front of the varrays.  */
2237   page_entry **new_by_depth;
2238   unsigned long **new_save_in_use;
2239
2240   new_by_depth = XNEWVEC (page_entry *, G.by_depth_max);
2241   new_save_in_use = XNEWVEC (unsigned long *, G.by_depth_max);
2242
2243   memcpy (&new_by_depth[0],
2244           &G.by_depth[count_old_page_tables],
2245           count_new_page_tables * sizeof (void *));
2246   memcpy (&new_by_depth[count_new_page_tables],
2247           &G.by_depth[0],
2248           count_old_page_tables * sizeof (void *));
2249   memcpy (&new_save_in_use[0],
2250           &G.save_in_use[count_old_page_tables],
2251           count_new_page_tables * sizeof (void *));
2252   memcpy (&new_save_in_use[count_new_page_tables],
2253           &G.save_in_use[0],
2254           count_old_page_tables * sizeof (void *));
2255
2256   free (G.by_depth);
2257   free (G.save_in_use);
2258
2259   G.by_depth = new_by_depth;
2260   G.save_in_use = new_save_in_use;
2261
2262   /* Now update all the index_by_depth fields.  */
2263   for (i = G.by_depth_in_use; i > 0; --i)
2264     {
2265       page_entry *p = G.by_depth[i-1];
2266       p->index_by_depth = i-1;
2267     }
2268
2269   /* And last, we update the depth pointers in G.depth.  The first
2270      entry is already 0, and context 0 entries always start at index
2271      0, so there is nothing to update in the first slot.  We need a
2272      second slot, only if we have old ptes, and if we do, they start
2273      at index count_new_page_tables.  */
2274   if (count_old_page_tables)
2275     push_depth (count_new_page_tables);
2276 }
2277
2278 void
2279 ggc_pch_read (FILE *f, void *addr)
2280 {
2281   struct ggc_pch_ondisk d;
2282   unsigned i;
2283   char *offs = (char *) addr;
2284   unsigned long count_old_page_tables;
2285   unsigned long count_new_page_tables;
2286
2287   count_old_page_tables = G.by_depth_in_use;
2288
2289   /* We've just read in a PCH file.  So, every object that used to be
2290      allocated is now free.  */
2291   clear_marks ();
2292 #ifdef ENABLE_GC_CHECKING
2293   poison_pages ();
2294 #endif
2295   /* Since we free all the allocated objects, the free list becomes
2296      useless.  Validate it now, which will also clear it.  */
2297   validate_free_objects();
2298
2299   /* No object read from a PCH file should ever be freed.  So, set the
2300      context depth to 1, and set the depth of all the currently-allocated
2301      pages to be 1 too.  PCH pages will have depth 0.  */
2302   gcc_assert (!G.context_depth);
2303   G.context_depth = 1;
2304   for (i = 0; i < NUM_ORDERS; i++)
2305     {
2306       page_entry *p;
2307       for (p = G.pages[i]; p != NULL; p = p->next)
2308         p->context_depth = G.context_depth;
2309     }
2310
2311   /* Allocate the appropriate page-table entries for the pages read from
2312      the PCH file.  */
2313   if (fread (&d, sizeof (d), 1, f) != 1)
2314     fatal_error ("can't read PCH file: %m");
2315
2316   for (i = 0; i < NUM_ORDERS; i++)
2317     {
2318       struct page_entry *entry;
2319       char *pte;
2320       size_t bytes;
2321       size_t num_objs;
2322       size_t j;
2323
2324       if (d.totals[i] == 0)
2325         continue;
2326
2327       bytes = ROUND_UP (d.totals[i] * OBJECT_SIZE (i), G.pagesize);
2328       num_objs = bytes / OBJECT_SIZE (i);
2329       entry = XCNEWVAR (struct page_entry, (sizeof (struct page_entry)
2330                                             - sizeof (long)
2331                                             + BITMAP_SIZE (num_objs + 1)));
2332       entry->bytes = bytes;
2333       entry->page = offs;
2334       entry->context_depth = 0;
2335       offs += bytes;
2336       entry->num_free_objects = 0;
2337       entry->order = i;
2338
2339       for (j = 0;
2340            j + HOST_BITS_PER_LONG <= num_objs + 1;
2341            j += HOST_BITS_PER_LONG)
2342         entry->in_use_p[j / HOST_BITS_PER_LONG] = -1;
2343       for (; j < num_objs + 1; j++)
2344         entry->in_use_p[j / HOST_BITS_PER_LONG]
2345           |= 1L << (j % HOST_BITS_PER_LONG);
2346
2347       for (pte = entry->page;
2348            pte < entry->page + entry->bytes;
2349            pte += G.pagesize)
2350         set_page_table_entry (pte, entry);
2351
2352       if (G.page_tails[i] != NULL)
2353         G.page_tails[i]->next = entry;
2354       else
2355         G.pages[i] = entry;
2356       G.page_tails[i] = entry;
2357
2358       /* We start off by just adding all the new information to the
2359          end of the varrays, later, we will move the new information
2360          to the front of the varrays, as the PCH page tables are at
2361          context 0.  */
2362       push_by_depth (entry, 0);
2363     }
2364
2365   /* Now, we update the various data structures that speed page table
2366      handling.  */
2367   count_new_page_tables = G.by_depth_in_use - count_old_page_tables;
2368
2369   move_ptes_to_front (count_old_page_tables, count_new_page_tables);
2370
2371   /* Update the statistics.  */
2372   G.allocated = G.allocated_last_gc = offs - (char *)addr;
2373 }
2374
2375 struct alloc_zone
2376 {
2377   int dummy;
2378 };
2379
2380 struct alloc_zone rtl_zone;
2381 struct alloc_zone tree_zone;
2382 struct alloc_zone tree_id_zone;