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