(root)/
gcc-13.2.0/
gcc/
ggc-internal.h
       1  /* Garbage collection for the GNU compiler.  Internal definitions
       2     for ggc-*.c and stringpool.cc.
       3  
       4     Copyright (C) 2009-2023 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  extern void ggc_record_overhead (size_t, size_t, void * FINAL_MEM_STAT_DECL);
      92  
      93  extern void ggc_free_overhead (void *);
      94  
      95  extern void ggc_prune_overhead_list (void);
      96  
      97  /* Return the number of bytes allocated at the indicated address.  */
      98  extern size_t ggc_get_size (const void *);
      99  
     100  
     101  /* Statistics.  */
     102  
     103  /* This structure contains the statistics common to all collectors.
     104     Particular collectors can extend this structure.  */
     105  struct ggc_statistics
     106  {
     107    /* At present, we don't really gather any interesting statistics.  */
     108    int unused;
     109  };
     110  
     111  /* Used by the various collectors to gather and print statistics that
     112     do not depend on the collector in use.  */
     113  extern void ggc_print_common_statistics (FILE *, ggc_statistics *);
     114  
     115  #endif