OSDN Git Service

* config/microblaze/microblaze.h (CC1_SPEC): Remove %{save-temps: }.
[pf3gnuchains/gcc-fork.git] / gcc / dwarf2asm.c
index 3657d0b..b480698 100644 (file)
@@ -1,5 +1,5 @@
 /* Dwarf2 assembler output helper routines.
-   Copyright (C) 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009
+   Copyright (C) 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010
    Free Software Foundation, Inc.
 
 This file is part of GCC.
@@ -80,14 +80,14 @@ dw2_asm_output_data_raw (int size, unsigned HOST_WIDE_INT value)
   if (BYTES_BIG_ENDIAN)
     {
       for (i = size - 1; i > 0; --i)
-       fprintf (asm_out_file, "0x%x,", bytes[i]);
-      fprintf (asm_out_file, "0x%x", bytes[0]);
+       fprintf (asm_out_file, "%#x,", bytes[i]);
+      fprintf (asm_out_file, "%#x", bytes[0]);
     }
   else
     {
       for (i = 0; i < size - 1; ++i)
-       fprintf (asm_out_file, "0x%x,", bytes[i]);
-      fprintf (asm_out_file, "0x%x", bytes[i]);
+       fprintf (asm_out_file, "%#x,", bytes[i]);
+      fprintf (asm_out_file, "%#x", bytes[i]);
     }
 }
 
@@ -152,6 +152,35 @@ dw2_asm_output_delta (int size, const char *lab1, const char *lab2,
   va_end (ap);
 }
 
+/* Output the difference between two symbols in instruction units
+   in a given size.  */
+
+void
+dw2_asm_output_vms_delta (int size ATTRIBUTE_UNUSED,
+                         const char *lab1, const char *lab2,
+                         const char *comment, ...)
+{
+  va_list ap;
+
+  va_start (ap, comment);
+
+#ifndef ASM_OUTPUT_DWARF_VMS_DELTA
+  /* VMS Delta is only special on ia64-vms, but this funtion also gets
+     called on alpha-vms so it has to do something sane.  */
+  dw2_asm_output_delta (size, lab1, lab2, comment);
+#else
+  ASM_OUTPUT_DWARF_VMS_DELTA (asm_out_file, size, lab1, lab2);
+  if (flag_debug_asm && comment)
+    {
+      fprintf (asm_out_file, "\t%s ", ASM_COMMENT_START);
+      vfprintf (asm_out_file, comment, ap);
+    }
+  fputc ('\n', asm_out_file);
+#endif
+
+  va_end (ap);
+}
+
 /* Output a section-relative reference to a LABEL, which was placed in
    BASE.  In general this can only be done for debugging symbols.
    E.g. on most targets with the GNU linker, this is accomplished with
@@ -549,7 +578,7 @@ dw2_asm_output_data_uleb128_raw (unsigned HOST_WIDE_INT value)
        /* More bytes to follow.  */
        byte |= 0x80;
 
-      fprintf (asm_out_file, "0x%x", byte);
+      fprintf (asm_out_file, "%#x", byte);
       if (value == 0)
        break;
       fputc (',', asm_out_file);
@@ -591,7 +620,7 @@ dw2_asm_output_data_uleb128 (unsigned HOST_WIDE_INT value,
 
        if (byte_op)
          {
-           fprintf (asm_out_file, "0x%x", byte);
+           fprintf (asm_out_file, "%#x", byte);
            if (work != 0)
              fputc (',', asm_out_file);
          }
@@ -633,7 +662,7 @@ dw2_asm_output_data_sleb128_raw (HOST_WIDE_INT value)
       if (more)
        byte |= 0x80;
 
-      fprintf (asm_out_file, "0x%x", byte);
+      fprintf (asm_out_file, "%#x", byte);
       if (!more)
        break;
       fputc (',', asm_out_file);
@@ -678,7 +707,7 @@ dw2_asm_output_data_sleb128 (HOST_WIDE_INT value,
 
        if (byte_op)
          {
-           fprintf (asm_out_file, "0x%x", byte);
+           fprintf (asm_out_file, "%#x", byte);
            if (more)
              fputc (',', asm_out_file);
          }
@@ -769,8 +798,8 @@ static GTY((param1_is (char *), param2_is (tree))) splay_tree indirect_pool;
 
 static GTY(()) int dw2_const_labelno;
 
-#if defined(HAVE_GAS_HIDDEN) && defined(SUPPORTS_ONE_ONLY)
-# define USE_LINKONCE_INDIRECT 1
+#if defined(HAVE_GAS_HIDDEN)
+# define USE_LINKONCE_INDIRECT (SUPPORTS_ONE_ONLY)
 #else
 # define USE_LINKONCE_INDIRECT 0
 #endif
@@ -816,7 +845,9 @@ dw2_force_const_mem (rtx x, bool is_public)
   if (! indirect_pool)
     /* 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);
+    indirect_pool = splay_tree_new_ggc (splay_tree_compare_strings,
+                                       ggc_alloc_splay_tree_str_tree_node_splay_tree_s,
+                                       ggc_alloc_splay_tree_str_tree_node_splay_tree_node_s);
 
   gcc_assert (GET_CODE (x) == SYMBOL_REF);
 
@@ -874,9 +905,11 @@ dw2_output_indirect_constant_1 (splay_tree_node node,
   id = (tree) node->value;
 
   decl = build_decl (UNKNOWN_LOCATION, VAR_DECL, id, ptr_type_node);
+  SET_DECL_ASSEMBLER_NAME (decl, id);
   DECL_ARTIFICIAL (decl) = 1;
   DECL_IGNORED_P (decl) = 1;
   DECL_INITIAL (decl) = decl;
+  TREE_READONLY (decl) = 1;
 
   if (TREE_PUBLIC (id))
     {