* config/tc-ppc.c (md_apply_fix3): Allow BRTAKEN, BRNTAKEN relocs.
[deliverable/binutils-gdb.git] / gas / stabs.c
index cd5a705ff23ef209ea25c45a01bb773499341f8e..900826b231f278755b5c3affed0d67336b751b45 100644 (file)
@@ -240,6 +240,14 @@ s_stab_generic (what, stab_secname, stabstr_secname)
   other = longint;
 
   desc = get_absolute_expression ();
+
+  if ((desc > 0xffff) || (desc < -0x8000))
+    /* This could happen for example with a source file with a huge
+       number of lines.  The only cure is to use a different debug
+       format, probably DWARF.  */
+    as_warn (_(".stab%c: description field '%x' too big, try a different debug format"),
+            what, desc);
+
   if (what == 's' || what == 'n')
     {
       if (*input_line_pointer != ',')
@@ -343,7 +351,7 @@ s_stab_generic (what, stab_secname, stabstr_secname)
       if (what == 's')
        {
          /* Release the string, if nobody else has used the obstack.  */
-         if (saved_string_obstack_end == notes.next_free) 
+         if (saved_string_obstack_end == notes.next_free)
            obstack_free (&notes, string);
        }
 
@@ -363,13 +371,11 @@ s_stab_generic (what, stab_secname, stabstr_secname)
        }
       else
        {
-         const char *fake;
          symbolS *symbol;
          expressionS exp;
 
          /* Arrange for a value representing the current location.  */
-         fake = FAKE_LABEL_NAME;
-         symbol = symbol_new (fake, saved_seg, dot, saved_frag);
+         symbol = symbol_temp_new (saved_seg, dot, saved_frag);
 
          exp.X_op = O_symbol;
          exp.X_add_symbol = symbol;
@@ -580,10 +586,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 +599,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);
This page took 0.023474 seconds and 4 git commands to generate.