aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog10
-rw-r--r--gcc/config/ia64/ia64.h12
-rw-r--r--gcc/defaults.h9
-rw-r--r--gcc/dwarf2out.c6
-rw-r--r--gcc/final.c2
-rw-r--r--gcc/tm.texi13
6 files changed, 48 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 21b94a3..830088c 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,13 @@
+2000-10-31 Jim Wilson <wilson@redhat.com>
+
+ * defaults.h (ASM_OUTPUT_DEBUG_LABEL): New.
+ * tm.texi (ASM_OUTPUT_DEBUG_LABEL): Document.
+ * dwarf2out.c (dwarf2out_begin_block): Use ASM_OUTPUT_DEBUG_LABEL
+ instead of ASM_OUTPUT_INTERNAL_LABEL.
+ (dwarf2out_end_block, dwarf2out_label): Likewise.
+ * final.c (final_scan_insn, case NOTE_INSN_DELETED_LABEL): Likewise
+ * config/ia64/ia64.h (ASM_OUTPUT_DEBUG_LABEL): Define.
+
2000-10-31 Richard Henderson <rth@redhat.com>
* dwarf2out.c (struct dw_loc_descr_struct): Add dw_loc_addr.
diff --git a/gcc/config/ia64/ia64.h b/gcc/config/ia64/ia64.h
index d94491f..a3aca05 100644
--- a/gcc/config/ia64/ia64.h
+++ b/gcc/config/ia64/ia64.h
@@ -2637,6 +2637,18 @@ do { \
#define DWARF2_ASM_LINE_DEBUG_INFO (TARGET_DWARF2_ASM)
+/* Use tags for debug info labels, so that they don't break instruction
+ bundles. This also avoids getting spurious DV warnings from the
+ assembler. This is similar to ASM_OUTPUT_INTERNAL_LABEL, except that we
+ add brackets around the label. */
+
+#define ASM_OUTPUT_DEBUG_LABEL(FILE, PREFIX, NUM) \
+ do \
+ { \
+ fprintf (FILE, "[.%s%d:]\n", PREFIX, NUM); \
+ } \
+ while (0)
+
/* Cross Compilation and Floating Point. */
diff --git a/gcc/defaults.h b/gcc/defaults.h
index d5e8884..b6fe9ec 100644
--- a/gcc/defaults.h
+++ b/gcc/defaults.h
@@ -133,6 +133,15 @@ do { ASM_OUTPUT_LABEL(FILE,LABEL_ALTERNATE_NAME (INSN)); } while (0)
#define ASM_OUTPUT_LABELREF(FILE,NAME) asm_fprintf ((FILE), "%U%s", (NAME))
#endif
+/* Allow target to print debug info labels specially. This is useful for
+ VLIW targets, since debug info labels should go into the middle of
+ instruction bundles instead of breaking them. */
+
+#ifndef ASM_OUTPUT_DEBUG_LABEL
+#define ASM_OUTPUT_DEBUG_LABEL(FILE, PREFIX, NUM) \
+ ASM_OUTPUT_INTERNAL_LABEL (FILE, PREFIX, NUM)
+#endif
+
/* This determines whether or not we support weak symbols. */
#ifndef SUPPORTS_WEAK
#ifdef ASM_WEAKEN_LABEL
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
index 02ec9ce..77cda64 100644
--- a/gcc/dwarf2out.c
+++ b/gcc/dwarf2out.c
@@ -10929,7 +10929,7 @@ dwarf2out_begin_block (blocknum)
register unsigned blocknum;
{
function_section (current_function_decl);
- ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, BLOCK_BEGIN_LABEL, blocknum);
+ ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_BEGIN_LABEL, blocknum);
}
/* Output a marker (i.e. a label) for the end of the generated code for a
@@ -10940,7 +10940,7 @@ dwarf2out_end_block (blocknum)
register unsigned blocknum;
{
function_section (current_function_decl);
- ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, BLOCK_END_LABEL, blocknum);
+ ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_END_LABEL, blocknum);
}
/* Returns nonzero if it is appropriate not to emit any debugging
@@ -10975,7 +10975,7 @@ dwarf2out_label (insn)
{
function_section (current_function_decl);
sprintf (label, INSN_LABEL_FMT, current_funcdef_number);
- ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, label,
+ ASM_OUTPUT_DEBUG_LABEL (asm_out_file, label,
(unsigned) INSN_UID (insn));
}
}
diff --git a/gcc/final.c b/gcc/final.c
index 0e22b06..ae2864ae 100644
--- a/gcc/final.c
+++ b/gcc/final.c
@@ -2270,7 +2270,7 @@ final_scan_insn (insn, file, optimize, prescan, nopeepholes)
referenced (in the form of having its address taken. */
/* ??? Figure out how not to do this unconditionally. This
interferes with bundling on LIW targets. */
- ASM_OUTPUT_INTERNAL_LABEL (file, "L", CODE_LABEL_NUMBER (insn));
+ ASM_OUTPUT_DEBUG_LABEL (file, "L", CODE_LABEL_NUMBER (insn));
if (debug_info_level == DINFO_LEVEL_NORMAL
|| debug_info_level == DINFO_LEVEL_VERBOSE)
diff --git a/gcc/tm.texi b/gcc/tm.texi
index b47842e..87228a4 100644
--- a/gcc/tm.texi
+++ b/gcc/tm.texi
@@ -5945,6 +5945,19 @@ The usual definition of this macro is as follows:
fprintf (@var{stream}, "L%s%d:\n", @var{prefix}, @var{num})
@end example
+@findex ASM_OUTPUT_DEBUG_LABEL
+@item ASM_OUTPUT_DEBUG_LABEL (@var{stream}, @var{prefix}, @var{num})
+A C statement to output to the stdio stream @var{stream} a debug info
+label whose name is made from the string @var{prefix} and the number
+@var{num}. This is useful for VLIW targets, where debug info labels
+may need to be treated differently than branch target labels. On some
+systems, branch target labels must be at the beginning of instruction
+bundles, but debug info labels can occur in the middle of instruction
+bundles.
+
+If this macro is not defined, then @code{ASM_OUTPUT_INTERNAL_LABEL} will be
+used.
+
@findex ASM_OUTPUT_ALTERNATE_LABEL_NAME
@item ASM_OUTPUT_ALTERNATE_LABEL_NAME (@var{stream}, @var{string})
A C statement to output to the stdio stream @var{stream} the string