From 8215347ec3d842c217c911c23d01540da7a8fa7c Mon Sep 17 00:00:00 2001 From: Jim Wilson Date: Wed, 1 Nov 2000 00:20:34 +0000 Subject: [PATCH] Make ia64 port use tags instead of labels for debug info labels. * 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. From-SVN: r37174 --- gcc/ChangeLog | 10 ++++++++++ gcc/config/ia64/ia64.h | 12 ++++++++++++ gcc/defaults.h | 9 +++++++++ gcc/dwarf2out.c | 6 +++--- gcc/final.c | 2 +- gcc/tm.texi | 13 +++++++++++++ 6 files changed, 48 insertions(+), 4 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 21b94a3529d..830088c5cfe 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +2000-10-31 Jim Wilson + + * 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 * 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 d94491ff4fa..a3aca050fa6 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 d5e88845115..b6fe9ec8c86 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 02ec9ce3fad..77cda6453d0 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 0e22b069461..ae2864aec0a 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 b47842e9496..87228a45c3b 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