X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=gcc%2Fdwarf2asm.c;h=11903fe81a9b0921fcb0237986500484168f475d;hb=2c3b9819e0da54d2cfab55c2e8d16d6364692ce3;hp=59c5e29c2f9d2b57dd7b18f86a55f92fcab72da7;hpb=083659692e38253d70e2c465e2c896460df2b43e;p=pf3gnuchains%2Fgcc-fork.git diff --git a/gcc/dwarf2asm.c b/gcc/dwarf2asm.c index 59c5e29c2f9..11903fe81a9 100644 --- a/gcc/dwarf2asm.c +++ b/gcc/dwarf2asm.c @@ -1,11 +1,11 @@ /* Dwarf2 assembler output helper routines. - Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. + Copyright (C) 2001, 2002, 2003, 2004, 2005, 2007 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later +Software Foundation; either version 3, or (at your option) any later version. GCC is distributed in the hope that it will be useful, but WITHOUT ANY @@ -14,9 +14,8 @@ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License -along with GCC; see the file COPYING. If not, write to the Free -Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA -02110-1301, USA. */ +along with GCC; see the file COPYING3. If not see +. */ #include "config.h" @@ -702,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 @@ -716,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);