OSDN Git Service

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