2002-04-20 David S. Miller <davem@redhat.com>
[deliverable/binutils-gdb.git] / gas / dwarf2dbg.c
index 55a5205fac0aa21fd6aa130a75689d126844a8bc..81cbf8a7d2572d3dab51a71ad469c9892d9d149f 100644 (file)
@@ -230,11 +230,24 @@ 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 when the
+     symbols apply to assembler code.  It is necessary to emit
+     duplicate line symbols when a compiler asks for them, because GDB
+     uses them to determine the end of the prologue.  */
+  if (debug_type == DEBUG_DWARF2 
+      && 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;
@@ -524,8 +537,9 @@ get_frag_fix (frag)
   for (fr = frchain_root; fr; fr = fr->frch_next)
     if (fr->frch_last == frag)
       {
-       return ((char *) obstack_next_free (&fr->frch_obstack)
-               - frag->fr_literal);
+       long align_mask = -1 << get_recorded_alignment (fr->frch_seg);
+       return (((char *) obstack_next_free (&fr->frch_obstack)
+                - frag->fr_literal) + ~align_mask) & align_mask;
       }
 
   abort ();
This page took 0.023793 seconds and 4 git commands to generate.