summaryrefslogtreecommitdiff
path: root/gcc/dwarfout.c
diff options
context:
space:
mode:
authorrms <rms@138bc75d-0d04-0410-961f-82ee72b054a4>1992-10-05 08:04:57 +0000
committerrms <rms@138bc75d-0d04-0410-961f-82ee72b054a4>1992-10-05 08:04:57 +0000
commit017ffcef0ca013451d333ebf51b5ac9a27866209 (patch)
tree86c8af7503386e0f81971c81007c743fa5000b20 /gcc/dwarfout.c
parent3e775099185761dda57c2c7387d734323f08a94f (diff)
downloadgcc-017ffcef0ca013451d333ebf51b5ac9a27866209.tar.gz
(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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@2325 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/dwarfout.c')
-rw-r--r--gcc/dwarfout.c68
1 files 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;