* stringpool.c: Add comments to PCH saving/restoring routines.

From-SVN: r82380
This commit is contained in:
Geoffrey Keating 2004-05-28 21:41:42 +00:00 committed by Geoffrey Keating
parent 711e31876f
commit 4bb4ae964a
2 changed files with 25 additions and 2 deletions

View File

@ -1,3 +1,7 @@
2004-05-28 Geoffrey Keating <geoffk@apple.com>
* stringpool.c: Add comments to PCH saving/restoring routines.
2004-05-28 Andrew Pinski <pinskia@physics.uc.edu> 2004-05-28 Andrew Pinski <pinskia@physics.uc.edu>
* c-common.c (c_estimate_num_insns_1): Kill. * c-common.c (c_estimate_num_insns_1): Kill.

View File

@ -146,7 +146,7 @@ stringpool_statistics (void)
{ {
ht_dump_statistics (ident_hash); ht_dump_statistics (ident_hash);
} }
/* Mark an identifier for GC. */ /* Mark an identifier for GC. */
static int static int
@ -193,9 +193,12 @@ gt_pch_n_S (const void *x)
{ {
gt_pch_note_object ((void *)x, (void *)x, &gt_pch_p_S); gt_pch_note_object ((void *)x, (void *)x, &gt_pch_p_S);
} }
/* Handle saving and restoring the string pool for PCH. */ /* Handle saving and restoring the string pool for PCH. */
/* SPD is saved in the PCH file and holds the information needed
to restore the string pool. */
struct string_pool_data GTY(()) struct string_pool_data GTY(())
{ {
tree * GTY((length ("%h.nslots"))) entries; tree * GTY((length ("%h.nslots"))) entries;
@ -205,6 +208,9 @@ struct string_pool_data GTY(())
static GTY(()) struct string_pool_data * spd; static GTY(()) struct string_pool_data * spd;
/* Copy HP into the corresponding entry in HT2, and then clear
the cpplib parts of HP. */
static int static int
ht_copy_and_clear (cpp_reader *r ATTRIBUTE_UNUSED, hashnode hp, const void *ht2_p) ht_copy_and_clear (cpp_reader *r ATTRIBUTE_UNUSED, hashnode hp, const void *ht2_p)
{ {
@ -227,8 +233,15 @@ ht_copy_and_clear (cpp_reader *r ATTRIBUTE_UNUSED, hashnode hp, const void *ht2_
return 1; return 1;
} }
/* The hash table as it was before gt_pch_save_stringpool was called. */
static struct ht *saved_ident_hash; static struct ht *saved_ident_hash;
/* The hash table contains pointers to the cpp_hashnode inside the
lang_identifier. The PCH machinery can't handle pointers that refer
to the inside of an object, so to save the hash table for PCH the
pointers are adjusted and stored in the variable SPD. */
void void
gt_pch_save_stringpool (void) gt_pch_save_stringpool (void)
{ {
@ -249,6 +262,9 @@ gt_pch_save_stringpool (void)
ht_forall (ident_hash, ht_copy_and_clear, saved_ident_hash); ht_forall (ident_hash, ht_copy_and_clear, saved_ident_hash);
} }
/* Return the stringpool to its state before gt_pch_save_stringpool
was called. */
void void
gt_pch_fixup_stringpool (void) gt_pch_fixup_stringpool (void)
{ {
@ -257,6 +273,9 @@ gt_pch_fixup_stringpool (void)
saved_ident_hash = 0; saved_ident_hash = 0;
} }
/* A PCH file has been restored, which loaded SPD; fill the real hash table
with adjusted pointers from SPD. */
void void
gt_pch_restore_stringpool (void) gt_pch_restore_stringpool (void)
{ {