Patchwork [vms/committed] : fix crash in vmsdbgout.c

login
register
mail settings
Submitter Tristan Gingold
Date Dec. 13, 2011, 1:29 p.m.
Message ID <F100379F-519F-4062-8480-4C12775F3EE9@adacore.com>
Download mbox | patch
Permalink /patch/131083/
State New
Headers show

Comments

Tristan Gingold - Dec. 13, 2011, 1:29 p.m.
Hi,

there were calls in vmsdbgout.c to dwarf2out_source_line outside the normal flow: in end_prologue, begin_epilogue, end_epilogue.  This is useless and not not expected by dwarf2out.  This patch removes these extra calls, and fixes a crash.

Tested by building c+ada for alpha64-dec-openvms.

Committed to trunk.

Tristan.

2011-12-13  Tristan Gingold  <gingold@adacore.com>

	* vmsdbgout.c (vmsdbgout_write_source_line): New function.
	(vmsdbgout_end_prologue): Call vmsdbgout_write_source_line.
	(vmsdbgout_begin_epilogue): Likewise.
	(vmsdbgout_end_epilogue): Likewise.
	(vmsdbgout_source_line): Move code to vmsdbgout_write_source_line.

-         vmsdbgout_source_line (line, file, 0, true);
+         vmsdbgout_write_source_line (line, file, 0, true);
        }
     }
 }
@@ -1228,7 +1229,7 @@
       ASM_OUTPUT_LABEL (asm_out_file, label);
 
       /* VMS PCA expects every PC range to correlate to some line and file.  */
-      vmsdbgout_source_line (line, file, 0, true);
+      vmsdbgout_write_source_line (line, file, 0, true);
     }
 }
 
@@ -1388,6 +1389,31 @@
    'line_info_table' for later output of the .debug_line section.  */
 
 static void
+vmsdbgout_write_source_line (unsigned line, const char *filename,
+                             int discriminator, bool is_stmt)
+{
+  dst_line_info_ref line_info;
+
+  targetm.asm_out.internal_label (asm_out_file, LINE_CODE_LABEL,
+                                  line_info_table_in_use);
+
+  /* Expand the line info table if necessary.  */
+  if (line_info_table_in_use == line_info_table_allocated)
+    {
+      line_info_table_allocated += LINE_INFO_TABLE_INCREMENT;
+      line_info_table = XRESIZEVEC (dst_line_info_entry, line_info_table,
+                                    line_info_table_allocated);
+    }
+
+  /* Add the new entry at the end of the line_info_table.  */
+  line_info = &line_info_table[line_info_table_in_use++];
+  line_info->dst_file_num = lookup_filename (filename);
+  line_info->dst_line_num = line;
+  if (line > file_info_table[line_info->dst_file_num].max_line)
+    file_info_table[line_info->dst_file_num].max_line = line;
+}
+
+static void
-
-      targetm.asm_out.internal_label (asm_out_file, LINE_CODE_LABEL,
-                                     line_info_table_in_use);
-
-      /* Expand the line info table if necessary.  */
-      if (line_info_table_in_use == line_info_table_allocated)
-       {
-         line_info_table_allocated += LINE_INFO_TABLE_INCREMENT;
-         line_info_table = XRESIZEVEC (dst_line_info_entry, line_info_table,
-                                       line_info_table_allocated);
-       }
-
-      /* Add the new entry at the end of the line_info_table.  */
-      line_info = &line_info_table[line_info_table_in_use++];
-      line_info->dst_file_num = lookup_filename (filename);
-      line_info->dst_line_num = line;
-      if (line > file_info_table[line_info->dst_file_num].max_line)
-       file_info_table[line_info->dst_file_num].max_line = line;
-    }
+    vmsdbgout_write_source_line (line, filename, discriminator, is_stmt);
 }
 
 /* Record the beginning of a new source file, for later output.

Patch

Index: vmsdbgout.c
===================================================================
--- vmsdbgout.c (revision 182280)
+++ vmsdbgout.c (working copy)
@@ -158,6 +158,7 @@ 
 static void vmsdbgout_end_block (unsigned int, unsigned int);
 static bool vmsdbgout_ignore_block (const_tree);
 static void vmsdbgout_source_line (unsigned int, const char *, int, bool);
+static void vmsdbgout_write_source_line (unsigned, 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);
@@ -1162,7 +1163,7 @@ 
       ASM_OUTPUT_LABEL (asm_out_file, label);
 
       /* VMS PCA expects every PC range to correlate to some line and file.  */
-      vmsdbgout_source_line (line, file, 0, true);
+      vmsdbgout_write_source_line (line, file, 0, true);
     }
 }
 
@@ -1202,7 +1203,7 @@ 
 
 }
 
@@ -1202,7 +1203,7 @@ 
 
          /* VMS PCA expects every PC range to correlate to some line and
             file.  */