1/* Garbage collection for the GNU compiler. Internal definitions 2 for ggc-*.c and stringpool.c. 3 4 Copyright (C) 2009-2015 Free Software Foundation, Inc. 5 6This file is part of GCC. 7 8GCC is free software; you can redistribute it and/or modify it under 9the terms of the GNU General Public License as published by the Free 10Software Foundation; either version 3, or (at your option) any later 11version. 12 13GCC is distributed in the hope that it will be useful, but WITHOUT ANY 14WARRANTY; without even the implied warranty of MERCHANTABILITY or 15FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 16for more details. 17 18You should have received a copy of the GNU General Public License 19along with GCC; see the file COPYING3. If not see 20<http://www.gnu.org/licenses/>. */ 21 22#ifndef GCC_GGC_INTERNAL_H 23#define GCC_GGC_INTERNAL_H 24 25#include "ggc.h" 26 27/* Call ggc_set_mark on all the roots. */ 28extern void ggc_mark_roots (void); 29 30/* Stringpool. */ 31 32/* Mark the entries in the string pool. */ 33extern void ggc_mark_stringpool (void); 34 35/* Purge the entries in the string pool. */ 36extern void ggc_purge_stringpool (void); 37 38/* Save and restore the string pool entries for PCH. */ 39 40extern void gt_pch_save_stringpool (void); 41extern void gt_pch_fixup_stringpool (void); 42extern void gt_pch_restore_stringpool (void); 43 44/* PCH and GGC handling for strings, mostly trivial. */ 45extern void gt_pch_p_S (void *, void *, gt_pointer_operator, void *); 46 47/* PCH. */ 48 49struct ggc_pch_data; 50 51/* Return a new ggc_pch_data structure. */ 52extern struct ggc_pch_data *init_ggc_pch (void); 53 54/* The second parameter and third parameters give the address and size 55 of an object. Update the ggc_pch_data structure with as much of 56 that information as is necessary. The bool argument should be true 57 if the object is a string. */ 58extern void ggc_pch_count_object (struct ggc_pch_data *, void *, size_t, bool); 59 60/* Return the total size of the data to be written to hold all 61 the objects previously passed to ggc_pch_count_object. */ 62extern size_t ggc_pch_total_size (struct ggc_pch_data *); 63 64/* The objects, when read, will most likely be at the address 65 in the second parameter. */ 66extern void ggc_pch_this_base (struct ggc_pch_data *, void *); 67 68/* Assuming that the objects really do end up at the address 69 passed to ggc_pch_this_base, return the address of this object. 70 The bool argument should be true if the object is a string. */ 71extern char *ggc_pch_alloc_object (struct ggc_pch_data *, void *, size_t, bool); 72 73/* Write out any initial information required. */ 74extern void ggc_pch_prepare_write (struct ggc_pch_data *, FILE *); 75 76/* Write out this object, including any padding. The last argument should be 77 true if the object is a string. */ 78extern void ggc_pch_write_object (struct ggc_pch_data *, FILE *, void *, 79 void *, size_t, bool); 80 81/* All objects have been written, write out any final information 82 required. */ 83extern void ggc_pch_finish (struct ggc_pch_data *, FILE *); 84 85/* A PCH file has just been read in at the address specified second 86 parameter. Set up the GC implementation for the new objects. */ 87extern void ggc_pch_read (FILE *, void *); 88 89 90/* Allocation and collection. */ 91 92/* When set, ggc_collect will do collection. */ 93extern bool ggc_force_collect; 94 95extern void ggc_record_overhead (size_t, size_t, void * FINAL_MEM_STAT_DECL); 96 97extern void ggc_free_overhead (void *); 98 99extern void ggc_prune_overhead_list (void); 100 101/* Return the number of bytes allocated at the indicated address. */ 102extern size_t ggc_get_size (const void *); 103 104 105/* Statistics. */ 106 107/* This structure contains the statistics common to all collectors. 108 Particular collectors can extend this structure. */ 109struct ggc_statistics 110{ 111 /* At present, we don't really gather any interesting statistics. */ 112 int unused; 113}; 114 115/* Used by the various collectors to gather and print statistics that 116 do not depend on the collector in use. */ 117extern void ggc_print_common_statistics (FILE *, ggc_statistics *); 118 119#endif 120