2001-11-16 Michael Snyder <msnyder@redhat.com>
authorMichael Snyder <msnyder@vmware.com>
Tue, 4 Dec 2001 23:07:26 +0000 (23:07 +0000)
committerMichael Snyder <msnyder@vmware.com>
Tue, 4 Dec 2001 23:07:26 +0000 (23:07 +0000)
* stabs.c (stabs_generate_asm_lineno): Remember file and line number
from one call to the next, and eliminate consecutive duplicates
(thereby emitting only one line symbol per source line).
* dwarf2dbg.c (dwarf2_gen_line_info): Ditto.

gas/ChangeLog
gas/dwarf2dbg.c
gas/stabs.c

index b0e1b24..c413729 100644 (file)
        * config/tc-cris.c (md_apply_fix3): Cast value, not pointer, in
        val assignment.
 
+2001-11-16  Michael Snyder  <msnyder@redhat.com>
+
+       * stabs.c (stabs_generate_asm_lineno): Remember file and line number
+       from one call to the next, and eliminate consecutive duplicates
+       (thereby emitting only one line symbol per source line).
+       * dwarf2dbg.c (dwarf2_gen_line_info): Ditto.    
+
 2001-11-16  Alan Modra  <amodra@bigpond.net.au>
 
        * config/tc-m68k.c (md_apply_fix3): Change val back to a signed type.
index 9807e5e..6e62206 100644 (file)
@@ -230,11 +230,20 @@ dwarf2_gen_line_info (ofs, loc)
 {
   struct line_subseg *ss;
   struct line_entry *e;
+  static unsigned int line = -1;
+  static unsigned int filenum = -1;
 
   /* Early out for as-yet incomplete location information.  */
   if (loc->filenum == 0 || loc->line == 0)
     return;
 
+  /* Don't emit sequences of line symbols for the same line. */
+  if (line == loc->line && filenum == loc->filenum)
+    return;
+
+  line = loc->line;
+  filenum = loc->filenum;
+
   e = (struct line_entry *) xmalloc (sizeof (*e));
   e->next = NULL;
   e->frag = frag_now;
index cd5a705..60b03c4 100644 (file)
@@ -580,10 +580,9 @@ stabs_generate_asm_lineno ()
   unsigned int lineno;
   char *buf;
   char sym[30];
-
-  /* Let the world know that we are in the middle of generating a
-     piece of stabs line debugging information.  */
-  outputting_stabs_line_debug = 1;
+  /* Remember the last file/line and avoid duplicates. */
+  static unsigned int prev_lineno = -1;
+  static char *prev_file = NULL;
 
   /* Rather than try to do this in some efficient fashion, we just
      generate a string and then parse it again.  That lets us use the
@@ -594,6 +593,34 @@ stabs_generate_asm_lineno ()
 
   as_where (&file, &lineno);
 
+  /* Don't emit sequences of stabs for the same line. */
+  if (prev_file == NULL)
+    {
+      /* First time thru. */
+      prev_file = xstrdup (file);
+      prev_lineno = lineno;
+    }
+  else if (lineno == prev_lineno
+          && strcmp (file, prev_file) == 0)
+    {
+      /* Same file/line as last time. */
+      return;
+    }
+  else
+    {
+      /* Remember file/line for next time. */
+      prev_lineno = lineno;
+      if (strcmp (file, prev_file) != 0)
+       {
+         free (prev_file);
+         prev_file = xstrdup (file);
+       }
+    }
+
+  /* Let the world know that we are in the middle of generating a
+     piece of stabs line debugging information.  */
+  outputting_stabs_line_debug = 1;
+
   generate_asm_file (N_SOL, file);
 
   sprintf (sym, "%sL%d", FAKE_LABEL_NAME, label_count);