diff mbox

ptx debugging patch

Message ID 5466473A.1090809@codesourcery.com
State New
Headers show

Commit Message

Bernd Schmidt Nov. 14, 2014, 6:17 p.m. UTC
The situation with debugging on ptx is a little strange - it allows 
.file and .loc directives for line numbers, and it provides a way to 
define dwarf2 debug sections - but as far as I can tell, there's no way 
of putting useful or accurate information into the latter. There's also 
the slight problem that the data output directives used within those 
sections differ from the ones used everywhere else in ptx code.

The following patch adds a variant of dwarf2 debugging that supports 
just line numbers. I'll need to update the nvptx-as from my tools 
package, since ptxas is picky and does not allow .file directives within 
functions, so some more reordering of the assembly output is required.

How does this look? Testing currently in progress. An alternative would 
be to make a PTX_DEBUGGING_OUTPUT macro and a corresponding file cut 
down from dwarf2out.


Bernd

Comments

Jeff Law Dec. 5, 2014, 11:38 p.m. UTC | #1
On 11/14/14 11:17, Bernd Schmidt wrote:
> The situation with debugging on ptx is a little strange - it allows
> .file and .loc directives for line numbers, and it provides a way to
> define dwarf2 debug sections - but as far as I can tell, there's no way
> of putting useful or accurate information into the latter. There's also
> the slight problem that the data output directives used within those
> sections differ from the ones used everywhere else in ptx code.
>
> The following patch adds a variant of dwarf2 debugging that supports
> just line numbers. I'll need to update the nvptx-as from my tools
> package, since ptxas is picky and does not allow .file directives within
> functions, so some more reordering of the assembly output is required.
>
> How does this look? Testing currently in progress. An alternative would
> be to make a PTX_DEBUGGING_OUTPUT macro and a corresponding file cut
> down from dwarf2out.
>
>
> Bernd
>
> ptx-debug.diff
>
>
> 	* config/nvptx/nvptx.c (nvptx_option_override): Don't override
> 	debug options.
> 	* config/nvptx/nvptx.h (DWARF2_LINENO_DEBUGGING_INFO): Define.
> 	* config/nvptx/nvptx.h (DWARF2_DEBUGGING_INFO): Don't define.
> 	* debug.h (dwarf2_lineno_debug_hooks): Declare.
> 	* toplev.c (process_options): Add a case for it.
> 	* dwarf2out.c (dwarf2_lineno_debug_hooks): New variable.
> 	(dwarf2out_init): Skip most initializations if
> 	DWARF2_LINENO_DEBUGGING_INFO, but set cur_line_info_table in
> 	that case.
> 	* defaults.h (PREFERRED_DEBUGGING_TYPE): Also use DWARF2_DEBUG
> 	if DWARF2_LINENO_DEBUGGING_INFO.
> 	* opts.c (set_debug_level): Likewise.
I'll resist the temptation to bikeshed on the name :-)

OK.

jeff
diff mbox

Patch

	* config/nvptx/nvptx.c (nvptx_option_override): Don't override
	debug options.
	* config/nvptx/nvptx.h (DWARF2_LINENO_DEBUGGING_INFO): Define.
	* config/nvptx/nvptx.h (DWARF2_DEBUGGING_INFO): Don't define.
	* debug.h (dwarf2_lineno_debug_hooks): Declare.
	* toplev.c (process_options): Add a case for it.
	* dwarf2out.c (dwarf2_lineno_debug_hooks): New variable.
	(dwarf2out_init): Skip most initializations if
	DWARF2_LINENO_DEBUGGING_INFO, but set cur_line_info_table in
	that case.
	* defaults.h (PREFERRED_DEBUGGING_TYPE): Also use DWARF2_DEBUG
	if DWARF2_LINENO_DEBUGGING_INFO.
	* opts.c (set_debug_level): Likewise.

diff --git a/gcc/config/nvptx/nvptx.c b/gcc/config/nvptx/nvptx.c
index c1fd271..1778570 100644
--- a/gcc/config/nvptx/nvptx.c
+++ b/gcc/config/nvptx/nvptx.c
@@ -83,8 +83,6 @@  nvptx_option_override (void)
   flag_toplevel_reorder = 1;
   /* Assumes that it will see only hard registers.  */
   flag_var_tracking = 0;
-  write_symbols = NO_DEBUG;
-  debug_info_level = DINFO_LEVEL_NONE;
 
   declared_fndecls_htab
     = htab_create_ggc (17, htab_hash_pointer, htab_eq_pointer, NULL);
diff --git a/gcc/config/nvptx/nvptx.h b/gcc/config/nvptx/nvptx.h
index c222375..3d874b4 100644
--- a/gcc/config/nvptx/nvptx.h
+++ b/gcc/config/nvptx/nvptx.h
@@ -333,7 +333,7 @@  struct GTY(()) machine_function
 
 /* Misc.  */
 
-#define DWARF2_DEBUGGING_INFO 1
+#define DWARF2_LINENO_DEBUGGING_INFO 1
 
 #define CLZ_DEFINED_VALUE_AT_ZERO(MODE, VALUE) \
   ((VALUE) = GET_MODE_BITSIZE ((MODE)), 2)
diff --git a/gcc/debug.h b/gcc/debug.h
index 3ac7976..7a351bd 100644
--- a/gcc/debug.h
+++ b/gcc/debug.h
@@ -169,6 +169,7 @@  extern const struct gcc_debug_hooks dbx_debug_hooks;
 extern const struct gcc_debug_hooks sdb_debug_hooks;
 extern const struct gcc_debug_hooks xcoff_debug_hooks;
 extern const struct gcc_debug_hooks dwarf2_debug_hooks;
+extern const struct gcc_debug_hooks dwarf2_lineno_debug_hooks;
 extern const struct gcc_debug_hooks vmsdbg_debug_hooks;
 
 /* Dwarf2 frame information.  */
diff --git a/gcc/defaults.h b/gcc/defaults.h
index d2609e7..1ad257a 100644
--- a/gcc/defaults.h
+++ b/gcc/defaults.h
@@ -912,7 +912,7 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #elif defined SDB_DEBUGGING_INFO
 #define PREFERRED_DEBUGGING_TYPE SDB_DEBUG
 
-#elif defined DWARF2_DEBUGGING_INFO
+#elif defined DWARF2_DEBUGGING_INFO || defined DWARF2_LINENO_DEBUGGING_INFO
 #define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG
 
 #elif defined VMS_DEBUGGING_INFO
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
index b16883f..ac7968a 100644
--- a/gcc/dwarf2out.c
+++ b/gcc/dwarf2out.c
@@ -2497,6 +2497,40 @@  const struct gcc_debug_hooks dwarf2_debug_hooks =
   1,                            /* start_end_main_source_file */
   TYPE_SYMTAB_IS_DIE            /* tree_type_symtab_field */
 };
+
+const struct gcc_debug_hooks dwarf2_lineno_debug_hooks =
+{
+  dwarf2out_init,
+  debug_nothing_charstar,
+  debug_nothing_void,
+  debug_nothing_int_charstar,
+  debug_nothing_int_charstar,
+  debug_nothing_int_charstar,
+  debug_nothing_int,
+  debug_nothing_int_int,	         /* begin_block */
+  debug_nothing_int_int,	         /* end_block */
+  debug_true_const_tree,	         /* ignore_block */
+  dwarf2out_source_line,	 /* source_line */
+  debug_nothing_int_charstar,	         /* begin_prologue */
+  debug_nothing_int_charstar,	         /* end_prologue */
+  debug_nothing_int_charstar,	         /* begin_epilogue */
+  debug_nothing_int_charstar,	         /* end_epilogue */
+  debug_nothing_tree,		         /* begin_function */
+  debug_nothing_int,		         /* end_function */
+  debug_nothing_tree,		         /* function_decl */
+  debug_nothing_tree,		         /* global_decl */
+  debug_nothing_tree_int,		 /* type_decl */
+  debug_nothing_tree_tree_tree_bool,	 /* imported_module_or_decl */
+  debug_nothing_tree,		         /* deferred_inline_function */
+  debug_nothing_tree,		         /* outlining_inline_function */
+  debug_nothing_rtx_code_label,	         /* label */
+  debug_nothing_int,		         /* handle_pch */
+  debug_nothing_rtx_insn,	         /* var_location */
+  debug_nothing_void,                    /* switch_text_section */
+  debug_nothing_tree_tree,		 /* set_name */
+  0,                                     /* start_end_main_source_file */
+  TYPE_SYMTAB_IS_ADDRESS                 /* tree_type_symtab_field */
+};
 
 /* NOTE: In the comments in this file, many references are made to
    "Debugging Information Entries".  This term is abbreviated as `DIE'
@@ -22363,6 +22397,7 @@  dwarf2out_init (const char *filename ATTRIBUTE_UNUSED)
   /* Allocate the file_table.  */
   file_table = hash_table<dwarf_file_hasher>::create_ggc (50);
 
+#ifndef DWARF2_LINENO_DEBUGGING_INFO
   /* Allocate the decl_die_table.  */
   decl_die_table = hash_table<decl_die_hasher>::create_ggc (10);
 
@@ -22478,10 +22513,15 @@  dwarf2out_init (const char *filename ATTRIBUTE_UNUSED)
 
   switch_to_section (text_section);
   ASM_OUTPUT_LABEL (asm_out_file, text_section_label);
+#endif
 
   /* Make sure the line number table for .text always exists.  */
   text_section_line_info = new_line_info_table ();
   text_section_line_info->end_label = text_end_label;
+
+#ifdef DWARF2_LINENO_DEBUGGING_INFO
+  cur_line_info_table = text_section_line_info;
+#endif
 }
 
 /* Called before compile () starts outputtting functions, variables
diff --git a/gcc/opts.c b/gcc/opts.c
index d22882b..d25852b 100644
--- a/gcc/opts.c
+++ b/gcc/opts.c
@@ -2194,7 +2194,7 @@  set_debug_level (enum debug_info_type type, int extended, const char *arg,
 
 	  if (extended == 2)
 	    {
-#ifdef DWARF2_DEBUGGING_INFO
+#if defined DWARF2_DEBUGGING_INFO || defined DWARF2_LINENO_DEBUGGING_INFO
 	      opts->x_write_symbols = DWARF2_DEBUG;
 #elif defined DBX_DEBUGGING_INFO
 	      opts->x_write_symbols = DBX_DEBUG;
diff --git a/gcc/toplev.c b/gcc/toplev.c
index 2ed76bc..a809a36 100644
--- a/gcc/toplev.c
+++ b/gcc/toplev.c
@@ -1488,6 +1488,10 @@  process_options (void)
   else if (write_symbols == VMS_DEBUG || write_symbols == VMS_AND_DWARF2_DEBUG)
     debug_hooks = &vmsdbg_debug_hooks;
 #endif
+#ifdef DWARF2_LINENO_DEBUGGING_INFO
+  else if (write_symbols == DWARF2_DEBUG)
+    debug_hooks = &dwarf2_lineno_debug_hooks;
+#endif
   else
     error ("target system does not support the %qs debug format",
 	   debug_type_names[write_symbols]);