Commit d24ecd21 by Matt Austern Committed by Matt Austern

cpppch.c (reset_ht): Remove.

	* cpppch.c (reset_ht): Remove.
	(cpp_read_state): Remove loop to reset hashtable identifiers.
	* ggc-common.c (gt_pch_save): Add call to gt_pch_fixup_stringpool
	after pch file is written.
	* ggc.h (gt_pch_fixup_stringpool): Declare.
	* stringpool.c (ht_copy_and_clear): Define.  Callback.  Copy
	hashnode's value to another hashtable, then clear the original.
	(saved_ident_hash): Define.
	(gt_pch_save_stringpool): Create saved_ident_hash, use it to
	store definitions in ident_hash, and clear ident_hash.
	(gt_pch_fixup_stringpool): Define.  Restore definitions from
	saved_ident_hash to ident_hash, then destroy saved_ident_hash.

From-SVN: r65215
parent bcc53e2a
2003-04-03 Matt Austern <austern@apple.com>
* cpppch.c (reset_ht): Remove.
(cpp_read_state): Remove loop to reset hashtable identifiers.
* ggc-common.c (gt_pch_save): Add call to gt_pch_fixup_stringpool
after pch file is written.
* ggc.h (gt_pch_fixup_stringpool): Declare.
* stringpool.c (ht_copy_and_clear): Define. Callback. Copy
hashnode's value to another hashtable, then clear the original.
(saved_ident_hash): Define.
(gt_pch_save_stringpool): Create saved_ident_hash, use it to
store definitions in ident_hash, and clear ident_hash.
(gt_pch_fixup_stringpool): Define. Restore definitions from
saved_ident_hash to ident_hash, then destroy saved_ident_hash.
Thu Apr 3 22:27:40 CEST 2003 Jan Hubicka <jh@suse.cz> Thu Apr 3 22:27:40 CEST 2003 Jan Hubicka <jh@suse.cz>
* cfgrtl.c (update_bb_for_insn): Do not set block for barriers. * cfgrtl.c (update_bb_for_insn): Do not set block for barriers.
......
...@@ -34,7 +34,6 @@ static int comp_hashnodes PARAMS ((const void *, const void *)); ...@@ -34,7 +34,6 @@ static int comp_hashnodes PARAMS ((const void *, const void *));
static int collect_ht_nodes PARAMS ((cpp_reader *, cpp_hashnode *, void *)); static int collect_ht_nodes PARAMS ((cpp_reader *, cpp_hashnode *, void *));
static int write_defs PARAMS ((cpp_reader *, cpp_hashnode *, void *)); static int write_defs PARAMS ((cpp_reader *, cpp_hashnode *, void *));
static int save_macros PARAMS ((cpp_reader *, cpp_hashnode *, void *)); static int save_macros PARAMS ((cpp_reader *, cpp_hashnode *, void *));
static int reset_ht PARAMS ((cpp_reader *, cpp_hashnode *, void *));
/* This structure represents a macro definition on disk. */ /* This structure represents a macro definition on disk. */
struct macrodef_struct struct macrodef_struct
...@@ -628,23 +627,6 @@ cpp_prepare_state (r, data) ...@@ -628,23 +627,6 @@ cpp_prepare_state (r, data)
*data = d; *data = d;
} }
/* Erase all the existing macros and assertions. */
static int
reset_ht (r, h, unused)
cpp_reader *r ATTRIBUTE_UNUSED;
cpp_hashnode *h;
void *unused ATTRIBUTE_UNUSED;
{
if (h->type != NT_VOID
&& (h->flags & NODE_BUILTIN) == 0)
{
h->type = NT_VOID;
memset (&h->value, 0, sizeof (h->value));
}
return 1;
}
/* Given a precompiled header that was previously determined to be valid, /* Given a precompiled header that was previously determined to be valid,
apply all its definitions (and undefinitions) to the current state. apply all its definitions (and undefinitions) to the current state.
DEPNAME is passed to deps_restore. */ DEPNAME is passed to deps_restore. */
...@@ -664,11 +646,6 @@ cpp_read_state (r, name, f, data) ...@@ -664,11 +646,6 @@ cpp_read_state (r, name, f, data)
size_t i, mac_count; size_t i, mac_count;
int saved_line = r->line; int saved_line = r->line;
/* Erase all the existing hashtable entries for macros. At this
point, they're all from the PCH file, and their pointers won't be
valid. */
cpp_forall_identifiers (r, reset_ht, NULL);
/* Restore spec_nodes, which will be full of references to the old /* Restore spec_nodes, which will be full of references to the old
hashtable entries and so will now be invalid. */ hashtable entries and so will now be invalid. */
{ {
......
...@@ -543,6 +543,7 @@ gt_pch_save (f) ...@@ -543,6 +543,7 @@ gt_pch_save (f)
memcpy (state.ptrs[i]->obj, this_object, state.ptrs[i]->size); memcpy (state.ptrs[i]->obj, this_object, state.ptrs[i]->size);
} }
ggc_pch_finish (state.d, state.f); ggc_pch_finish (state.d, state.f);
gt_pch_fixup_stringpool ();
free (state.ptrs); free (state.ptrs);
htab_delete (saving_htab); htab_delete (saving_htab);
......
...@@ -124,6 +124,7 @@ extern void ggc_mark_roots PARAMS ((void)); ...@@ -124,6 +124,7 @@ extern void ggc_mark_roots PARAMS ((void));
/* Save and restore the string pool entries for PCH. */ /* Save and restore the string pool entries for PCH. */
extern void gt_pch_save_stringpool PARAMS ((void)); extern void gt_pch_save_stringpool PARAMS ((void));
extern void gt_pch_fixup_stringpool PARAMS ((void));
extern void gt_pch_restore_stringpool PARAMS ((void)); extern void gt_pch_restore_stringpool PARAMS ((void));
/* PCH and GGC handling for strings, mostly trivial. */ /* PCH and GGC handling for strings, mostly trivial. */
......
...@@ -34,6 +34,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA ...@@ -34,6 +34,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#include "ggc.h" #include "ggc.h"
#include "tree.h" #include "tree.h"
#include "hashtable.h" #include "hashtable.h"
#include "cpplib.h"
/* The "" allocated string. */ /* The "" allocated string. */
const char empty_string[] = ""; const char empty_string[] = "";
...@@ -50,6 +51,7 @@ static struct obstack string_stack; ...@@ -50,6 +51,7 @@ static struct obstack string_stack;
static hashnode alloc_node PARAMS ((hash_table *)); static hashnode alloc_node PARAMS ((hash_table *));
static int mark_ident PARAMS ((struct cpp_reader *, hashnode, const PTR)); static int mark_ident PARAMS ((struct cpp_reader *, hashnode, const PTR));
static int ht_copy_and_clear PARAMS ((struct cpp_reader *, hashnode, const void *));
/* Initialize the string pool. */ /* Initialize the string pool. */
void void
...@@ -214,6 +216,33 @@ struct string_pool_data GTY(()) ...@@ -214,6 +216,33 @@ struct string_pool_data GTY(())
static GTY(()) struct string_pool_data * spd; static GTY(()) struct string_pool_data * spd;
static int
ht_copy_and_clear (r, hp, ht2_p)
cpp_reader *r ATTRIBUTE_UNUSED;
hashnode hp;
const void *ht2_p;
{
cpp_hashnode *h = CPP_HASHNODE (hp);
struct ht *ht2 = (struct ht *) ht2_p;
if (h->type != NT_VOID
&& (h->flags & NODE_BUILTIN) == 0)
{
cpp_hashnode *h2 = CPP_HASHNODE (ht_lookup (ht2,
NODE_NAME (h),
NODE_LEN (h),
HT_ALLOC));
h2->type = h->type;
memcpy (&h2->value, &h->value, sizeof (h->value));
h->type = NT_VOID;
memset (&h->value, 0, sizeof (h->value));
}
return 1;
}
static struct ht *saved_ident_hash;
void void
gt_pch_save_stringpool () gt_pch_save_stringpool ()
{ {
...@@ -228,6 +257,18 @@ gt_pch_save_stringpool () ...@@ -228,6 +257,18 @@ gt_pch_save_stringpool ()
spd->entries[i] = HT_IDENT_TO_GCC_IDENT (ident_hash->entries[i]); spd->entries[i] = HT_IDENT_TO_GCC_IDENT (ident_hash->entries[i]);
else else
spd->entries[i] = NULL; spd->entries[i] = NULL;
saved_ident_hash = ht_create (14);
saved_ident_hash->alloc_node = alloc_node;
ht_forall (ident_hash, ht_copy_and_clear, saved_ident_hash);
}
void
gt_pch_fixup_stringpool ()
{
ht_forall (saved_ident_hash, ht_copy_and_clear, ident_hash);
ht_destroy (saved_ident_hash);
saved_ident_hash = 0;
} }
void void
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment