diff options
author | Alexandre Oliva <aoliva@redhat.com> | 2007-11-26 06:38:30 +0000 |
---|---|---|
committer | Alexandre Oliva <aoliva@gcc.gnu.org> | 2007-11-26 06:38:30 +0000 |
commit | dc1327cda3ef343633313e19982dd5634dbc5028 (patch) | |
tree | 8603c261d78b0df67dcd921e5c5d0bcdd1c7cb45 /gcc/dwarf2asm.c | |
parent | 0043f60679c6c6b8b76acb75cf8a7e363aca1d06 (diff) | |
download | gcc-dc1327cda3ef343633313e19982dd5634dbc5028.tar.gz |
dwarf2asm.c (splay_tree_compare_strings): New function.
* dwarf2asm.c (splay_tree_compare_strings): New function.
(dw2_force_const_mem): Use it.
From-SVN: r130430
Diffstat (limited to 'gcc/dwarf2asm.c')
-rw-r--r-- | gcc/dwarf2asm.c | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/gcc/dwarf2asm.c b/gcc/dwarf2asm.c index ac789f97038..11903fe81a9 100644 --- a/gcc/dwarf2asm.c +++ b/gcc/dwarf2asm.c @@ -701,6 +701,31 @@ static GTY(()) int dw2_const_labelno; # define USE_LINKONCE_INDIRECT 0 #endif +/* Comparison function for a splay tree in which the keys are strings. + K1 and K2 have the dynamic type "const char *". Returns <0, 0, or + >0 to indicate whether K1 is less than, equal to, or greater than + K2, respectively. */ + +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); + + /* The strings are always those from IDENTIFIER_NODEs, and, + therefore, we should never have two copies of the same + string. */ + 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 +740,9 @@ dw2_force_const_mem (rtx x, bool public) tree decl; if (! indirect_pool) - indirect_pool = splay_tree_new_ggc (splay_tree_compare_pointers); + /* We use strcmp, rather than just comparing pointers, so that the + sort order will not depend on the host system. */ + indirect_pool = splay_tree_new_ggc (splay_tree_compare_strings); gcc_assert (GET_CODE (x) == SYMBOL_REF); |