/* 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.
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]);
}
}
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
If COMMENT is not NULL and comments in the debug information
have been requested by the user, append the given COMMENT
to the generated output. */
-
+
void
dw2_asm_output_nstring (const char *str, size_t orig_len,
const char *comment, ...)
S(DW_EH_PE_sdata4 | DW_EH_PE_funcrel, "funcrel sdata4")
S(DW_EH_PE_sdata8 | DW_EH_PE_funcrel, "funcrel sdata8")
+ S(DW_EH_PE_indirect | DW_EH_PE_absptr, "indirect absolute")
+
S(DW_EH_PE_indirect | DW_EH_PE_absptr | DW_EH_PE_pcrel,
"indirect pcrel")
S(DW_EH_PE_indirect | DW_EH_PE_uleb128 | DW_EH_PE_pcrel,
};
gcc_assert (format >= 0 && format < 0x100 && format_names[format]);
-
+
return format_names[format];
#else
}
/* 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);
if (byte_op)
{
- fprintf (asm_out_file, "0x%x", byte);
+ fprintf (asm_out_file, "%#x", byte);
if (work != 0)
fputc (',', asm_out_file);
}
if (more)
byte |= 0x80;
- fprintf (asm_out_file, "0x%x", byte);
+ fprintf (asm_out_file, "%#x", byte);
if (!more)
break;
fputc (',', asm_out_file);
if (byte_op)
{
- fprintf (asm_out_file, "0x%x", byte);
+ fprintf (asm_out_file, "%#x", byte);
if (more)
fputc (',', asm_out_file);
}
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
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);
DECL_ARTIFICIAL (decl) = 1;
DECL_IGNORED_P (decl) = 1;
DECL_INITIAL (decl) = decl;
+ TREE_READONLY (decl) = 1;
if (TREE_PUBLIC (id))
{