for gcc/ChangeLog .vta? from Alexandre Oliva * dwarf2asm.c (splay_tree_compare_strings): New function. (dw2_force_const_mem): Use it. Index: gcc/dwarf2asm.c =================================================================== --- gcc/dwarf2asm.c.orig 2007-11-05 04:51:08.000000000 -0200 +++ gcc/dwarf2asm.c 2007-11-05 02:20:11.000000000 -0200 @@ -701,6 +701,28 @@ static GTY(()) int dw2_const_labelno; # define USE_LINKONCE_INDIRECT 0 #endif +/* Compare C strings used as keys in a splay tree, optimizing the case + in which the pointers are identical. We need to use string rather + than pointer comparison in order to make Java exception action + records stable in the presence of different debug info options. */ + +static int +splay_tree_compare_strings (splay_tree_key k1, splay_tree_key k2) +{ + const char *s1 = (const char *)k1; + const char *s2 = (const char *)k2; + int ret; + + if (s1 == s2) + return 0; + + ret = strcmp (s1, s2); + + gcc_assert (ret); + + return ret; +} + /* Put X, a SYMBOL_REF, in memory. Return a SYMBOL_REF to the allocated memory. Differs from force_const_mem in that a single pool is used for the entire unit of translation, and the memory is not guaranteed to be @@ -715,7 +737,7 @@ dw2_force_const_mem (rtx x, bool public) tree decl; if (! indirect_pool) - indirect_pool = splay_tree_new_ggc (splay_tree_compare_pointers); + indirect_pool = splay_tree_new_ggc (splay_tree_compare_strings); gcc_assert (GET_CODE (x) == SYMBOL_REF);