From 7f7429ca2ca16ccd9c2af06b8a3b048e94ed563e Mon Sep 17 00:00:00 2001 From: Richard Stallman Date: Mon, 5 Oct 1992 08:04:57 +0000 Subject: [PATCH] (hard-reg-set.h): Included to get decl of `reg_names'. (PRINT_REG): Default definition added. (dwarf_last_decl): Variable declaration added. (output_reg_number): New function; handle -fverbose-asm reg printing. (output_mem_loc_descriptor, output_loc_descriptor): Call it. (output_decl): Set `dwarf_last_decl' each time this fn is called. From-SVN: r2325 --- gcc/dwarfout.c | 68 ++++++++++++++++++++++++++++++++------------------ 1 file changed, 44 insertions(+), 24 deletions(-) diff --git a/gcc/dwarfout.c b/gcc/dwarfout.c index 98f82a4d3a9..0774ca085b5 100644 --- a/gcc/dwarfout.c +++ b/gcc/dwarfout.c @@ -28,6 +28,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "tree.h" #include "flags.h" #include "rtl.h" +#include "hard-reg-set.h" #include "insn-config.h" #include "reload.h" #include "output.h" @@ -80,6 +81,12 @@ extern char *rindex (); #define ASM_COMMENT_START ";#" #endif +/* How to print out a register name. */ +#ifndef PRINT_REG +#define PRINT_REG(RTX, CODE, FILE) \ + fprintf ((FILE), "%s", reg_names[REGNO (RTX)]) +#endif + /* Define a macro which returns non-zero for any tagged type which is used (directly or indirectly) in the specification of either some function's return type or some formal parameter of some function. @@ -277,6 +284,13 @@ static tree fake_containing_scope; static unsigned current_funcdef_number = 1; +/* A pointer to the ..._DECL node which we have most recently been working + on. We keep this around just in case something about it looks screwy + and we want to tell the user what the source coordinates for the actual + declaration are. */ + +static tree dwarf_last_decl; + /* Forward declarations for functions defined in this file. */ static void output_type (); @@ -1438,6 +1452,28 @@ equate_type_number_to_die_number (type) ASM_OUTPUT_DEF (asm_out_file, type_label, die_label); } +static void +output_reg_number (rtl) + register rtx rtl; +{ + register unsigned regno = REGNO (rtl); + + if (regno >= FIRST_PSEUDO_REGISTER) + { + warning_with_decl (dwarf_last_decl, "internal regno botch: regno = %d\n", + regno); + regno = 0; + } + fprintf (asm_out_file, "\t%s\t0x%x", + UNALIGNED_INT_ASM_OP, DBX_REGISTER_NUMBER (regno)); + if (flag_verbose_asm) + { + fprintf (asm_out_file, "\t%s ", ASM_COMMENT_START); + PRINT_REG (rtl, 0, asm_out_file); + } + fputc ('\n', asm_out_file); +} + /* The following routine is a nice and simple transducer. It converts the RTL for a variable or parameter (resident in memory) into an equivalent Dwarf representation of a mechanism for getting the address of that same @@ -1492,18 +1528,7 @@ output_mem_loc_descriptor (rtl) distinction between OP_REG and OP_BASEREG. */ ASM_OUTPUT_DWARF_STACK_OP (asm_out_file, OP_BASEREG); - { - register unsigned regno = REGNO (rtl); - - if (regno >= FIRST_PSEUDO_REGISTER) - { - fprintf (stderr, "%s: regno botch detected: dwarfout.c:%u\n", - language_string, __LINE__); - debug_rtx(rtl); - regno = 0; - } - ASM_OUTPUT_DWARF_DATA4 (asm_out_file, DBX_REGISTER_NUMBER (regno)); - } + output_reg_number (rtl); break; case MEM: @@ -1558,18 +1583,7 @@ output_loc_descriptor (rtl) case REG: ASM_OUTPUT_DWARF_STACK_OP (asm_out_file, OP_REG); - { - register unsigned regno = REGNO (rtl); - - if (regno >= FIRST_PSEUDO_REGISTER) - { - fprintf (stderr, "%s: regno botch detected: dwarfout.c:%u\n", - language_string, __LINE__); - debug_rtx(rtl); - regno = 0; - } - ASM_OUTPUT_DWARF_DATA4 (asm_out_file, DBX_REGISTER_NUMBER (regno)); - } + output_reg_number (rtl); break; case MEM: @@ -4212,6 +4226,12 @@ output_decl (decl, containing_scope) register tree decl; register tree containing_scope; { + /* Make a note of the decl node we are going to be working on. We may + need to give the user the source coordinates of where it appeared in + case we notice (later on) that something about it looks screwy. */ + + dwarf_last_decl = decl; + if (TREE_CODE (decl) == ERROR_MARK) return;