Commit a5dc7f88 by Cary Coutant Committed by Cary Coutant

dwarf2out.c (hash_external_ref): Use die_symbol or signature for hash so that…

dwarf2out.c (hash_external_ref): Use die_symbol or signature for hash so that hash table traversal order is...

2013-06-10  Cary Coutant  <ccoutant@google.com>

gcc/
	* dwarf2out.c (hash_external_ref): Use die_symbol or signature
	for hash so that hash table traversal order is deterministic.

From-SVN: r199927
parent 00b8517d
2013-06-10 Cary Coutant <ccoutant@google.com>
* dwarf2out.c (hash_external_ref): Use die_symbol or signature
for hash so that hash table traversal order is deterministic.
2013-06-10 Michael Meissner <meissner@linux.vnet.ibm.com> 2013-06-10 Michael Meissner <meissner@linux.vnet.ibm.com>
Pat Haugen <pthaugen@us.ibm.com> Pat Haugen <pthaugen@us.ibm.com>
Peter Bergner <bergner@vnet.ibm.com> Peter Bergner <bergner@vnet.ibm.com>
......
...@@ -7388,7 +7388,22 @@ struct external_ref_hasher : typed_free_remove <external_ref> ...@@ -7388,7 +7388,22 @@ struct external_ref_hasher : typed_free_remove <external_ref>
inline hashval_t inline hashval_t
external_ref_hasher::hash (const value_type *r) external_ref_hasher::hash (const value_type *r)
{ {
return htab_hash_pointer (r->type); dw_die_ref die = r->type;
hashval_t h = 0;
/* We can't use the address of the DIE for hashing, because
that will make the order of the stub DIEs non-deterministic. */
if (! die->comdat_type_p)
/* We have a symbol; use it to compute a hash. */
h = htab_hash_string (die->die_id.die_symbol);
else
{
/* We have a type signature; use a subset of the bits as the hash.
The 8-byte signature is at least as large as hashval_t. */
comdat_type_node_ref type_node = die->die_id.die_type_node;
memcpy (&h, type_node->signature, sizeof (h));
}
return h;
} }
inline bool inline bool
......
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