* s390-tdep.c: Tweak argument-passing to match GCC bugs.
[binutils-gdb.git] / gas / dwarf2dbg.c
index f902b153962696c2790f0bb9c01a88ee4676a0bc..9807e5eed8e315695ea000a3b89eb3b3a4c75ac2 100644 (file)
@@ -341,13 +341,13 @@ dwarf2_directive_file (dummy)
 
   if (num < 1)
     {
-      as_bad (_("File number less than one"));
+      as_bad (_("file number less than one"));
       return;
     }
 
-  if (num < files_in_use && files[num].filename != 0)
+  if (num < (int) files_in_use && files[num].filename != 0)
     {
-      as_bad (_("File number %ld already allocated"), (long) num);
+      as_bad (_("file number %ld already allocated"), (long) num);
       return;
     }
 
@@ -383,12 +383,12 @@ dwarf2_directive_loc (dummy)
 
   if (filenum < 1)
     {
-      as_bad (_("File number less than one"));
+      as_bad (_("file number less than one"));
       return;
     }
   if (filenum >= (int) files_in_use || files[filenum].filename == 0)
     {
-      as_bad (_("Unassigned file number %ld"), (long) filenum);
+      as_bad (_("unassigned file number %ld"), (long) filenum);
       return;
     }
 
@@ -524,8 +524,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 ();
@@ -772,7 +773,7 @@ dwarf2dbg_estimate_size_before_relax (frag)
   offsetT addr_delta;
   int size;
 
-  addr_delta = resolve_symbol_value (frag->fr_symbol, 0);
+  addr_delta = resolve_symbol_value (frag->fr_symbol);
   size = size_inc_line_addr (frag->fr_offset, addr_delta);
 
   frag->fr_subtype = size;
@@ -806,7 +807,7 @@ dwarf2dbg_convert_frag (frag)
 {
   offsetT addr_diff;
 
-  addr_diff = resolve_symbol_value (frag->fr_symbol, finalize_syms);
+  addr_diff = resolve_symbol_value (frag->fr_symbol);
 
   /* fr_var carries the max_chars that we created the fragment with.
      fr_subtype carries the current expected length.  We must, of
@@ -873,7 +874,11 @@ process_entries (seg, e)
          changed = 1;
        }
 
-      if (line != e->loc.line || changed)
+      /* Don't try to optimize away redundant entries; gdb wants two
+        entries for a function where the code starts on the same line as
+        the {, and there's no way to identify that case here.  Trust gcc
+        to optimize appropriately.  */
+      if (1 /* line != e->loc.line || changed */)
        {
          int line_delta = e->loc.line - line;
          if (frag == NULL)
@@ -929,7 +934,7 @@ out_file_list ()
     {
       if (files[i].filename == NULL)
        {
-         as_bad (_("Unassigned file number %u"), i);
+         as_bad (_("unassigned file number %ld"), (long) i);
          continue;
        }
 
@@ -1208,7 +1213,7 @@ dwarf2_finish ()
   struct line_seg *s;
 
   /* If no debug information was recorded, nothing to do.  */
-  if (all_segs == NULL)
+  if (all_segs == NULL && files_in_use <= 1)
     return;
 
   /* Calculate the size of an address for the target machine.  */
@@ -1235,7 +1240,7 @@ dwarf2_finish ()
 
   /* If this is assembler generated line info, we need .debug_info
      and .debug_abbrev sections as well.  */
-  if (debug_type == DEBUG_DWARF2)
+  if (all_segs != NULL && debug_type == DEBUG_DWARF2)
     {
       segT abbrev_seg;
       segT info_seg;