aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/vmsdbgout.c50
2 files changed, 57 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 7822e8c..ea4b468 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,14 @@
2010-06-29 Douglas B Rupp <rupp@gnat.com>
+ * vmsdbgout.c (vmsdbgout_begin_epilogue): Declare
+ (vmsdbgout_type_decl): Declare
+ (vmsdbg_debug_hooks): Add entry for type_decl and begin_epilogue.
+ (FUNC_EPILOGUE_LABEL): New macro
+ (vmsdbgout_begin_epilogue): New function.
+ (vmsdbgout_type_decl): New function.
+
+2010-06-29 Douglas B Rupp <rupp@gnat.com>
+
* vmsdbg.h: Update copyright.
2010-06-29 Douglas B Rupp <rupp@gnat.com>
diff --git a/gcc/vmsdbgout.c b/gcc/vmsdbgout.c
index 2bf0aff..e6968a5 100644
--- a/gcc/vmsdbgout.c
+++ b/gcc/vmsdbgout.c
@@ -179,10 +179,12 @@ static void vmsdbgout_source_line (unsigned int, const char *, int, bool);
static void vmsdbgout_begin_prologue (unsigned int, const char *);
static void vmsdbgout_end_prologue (unsigned int, const char *);
static void vmsdbgout_end_function (unsigned int);
+static void vmsdbgout_begin_epilogue (unsigned int, const char *);
static void vmsdbgout_end_epilogue (unsigned int, const char *);
static void vmsdbgout_begin_function (tree);
static void vmsdbgout_decl (tree);
static void vmsdbgout_global_decl (tree);
+static void vmsdbgout_type_decl (tree, int);
static void vmsdbgout_abstract_function (tree);
/* The debug hooks structure. */
@@ -201,13 +203,13 @@ const struct gcc_debug_hooks vmsdbg_debug_hooks
vmsdbgout_source_line,
vmsdbgout_begin_prologue,
vmsdbgout_end_prologue,
- debug_nothing_int_charstar, /* begin_epilogue */
+ vmsdbgout_begin_epilogue,
vmsdbgout_end_epilogue,
vmsdbgout_begin_function,
vmsdbgout_end_function,
vmsdbgout_decl,
vmsdbgout_global_decl,
- debug_nothing_tree_int, /* type_decl */
+ vmsdbgout_type_decl, /* type_decl */
debug_nothing_tree_tree_tree_bool, /* imported_module_or_decl */
debug_nothing_tree, /* deferred_inline_function */
vmsdbgout_abstract_function,
@@ -285,6 +287,9 @@ static char text_end_label[MAX_ARTIFICIAL_LABEL_BYTES];
#ifndef FUNC_PROLOG_LABEL
#define FUNC_PROLOG_LABEL "LVFP"
#endif
+#ifndef FUNC_EPILOG_LABEL
+#define FUNC_EPILOG_LABEL "LVEB"
+#endif
#ifndef FUNC_END_LABEL
#define FUNC_END_LABEL "LVFE"
#endif
@@ -1188,6 +1193,38 @@ vmsdbgout_end_function (unsigned int line)
(*dwarf2_debug_hooks.end_function) (line);
}
+/* Output a marker (i.e. a label) for the beginning of the epilogue.
+ This gets called *before* the epilogue code has been generated. */
+
+static void
+vmsdbgout_begin_epilogue (unsigned int line, const char *file)
+{
+ char label[MAX_ARTIFICIAL_LABEL_BYTES];
+ static int save_current_function_funcdef_no = -1;
+
+ if (write_symbols == VMS_AND_DWARF2_DEBUG)
+ (*dwarf2_debug_hooks.begin_epilogue) (line, file);
+
+ if (debug_info_level > DINFO_LEVEL_NONE)
+ {
+ if (save_current_function_funcdef_no != current_function_funcdef_no)
+ {
+ /* Output a label to mark the endpoint of the code generated for this
+ function. */
+ ASM_GENERATE_INTERNAL_LABEL (label, FUNC_EPILOG_LABEL,
+ current_function_funcdef_no);
+
+ ASM_OUTPUT_LABEL (asm_out_file, label);
+
+ save_current_function_funcdef_no = current_function_funcdef_no;
+
+ /* VMS PCA expects every PC range to correlate to some line and
+ file. */
+ vmsdbgout_source_line (line, file, 0, true);
+ }
+ }
+}
+
/* Output a marker (i.e. a label) for the absolute end of the generated code
for a function definition. This gets called *after* the epilogue code has
been generated. */
@@ -1536,6 +1573,15 @@ vmsdbgout_global_decl (tree decl)
/* Not implemented in VMS Debug. */
static void
+vmsdbgout_type_decl (tree decl, int local)
+{
+ if (write_symbols == VMS_AND_DWARF2_DEBUG)
+ (*dwarf2_debug_hooks.type_decl) (decl, local);
+}
+
+/* Not implemented in VMS Debug. */
+
+static void
vmsdbgout_abstract_function (tree decl)
{
if (write_symbols == VMS_AND_DWARF2_DEBUG)