diff options
-rw-r--r-- | gcc/ChangeLog | 10 | ||||
-rw-r--r-- | gcc/config/ia64/ia64.h | 12 | ||||
-rw-r--r-- | gcc/defaults.h | 9 | ||||
-rw-r--r-- | gcc/dwarf2out.c | 6 | ||||
-rw-r--r-- | gcc/final.c | 2 | ||||
-rw-r--r-- | gcc/tm.texi | 13 |
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 |