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