diff options
Diffstat (limited to 'contrib/binutils/gas/stabs.c')
-rw-r--r-- | contrib/binutils/gas/stabs.c | 47 |
1 files changed, 37 insertions, 10 deletions
diff --git a/contrib/binutils/gas/stabs.c b/contrib/binutils/gas/stabs.c index eed11b3..60b03c4 100644 --- a/contrib/binutils/gas/stabs.c +++ b/contrib/binutils/gas/stabs.c @@ -217,7 +217,7 @@ s_stab_generic (what, stab_secname, stabstr_secname) input_line_pointer++; else { - as_warn (_(".stabs: Missing comma")); + as_warn (_(".stab%c: missing comma"), what); ignore_rest_of_line (); return; } @@ -225,7 +225,7 @@ s_stab_generic (what, stab_secname, stabstr_secname) if (get_absolute_expression_and_terminator (&longint) != ',') { - as_warn (_(".stab%c: Missing comma"), what); + as_warn (_(".stab%c: missing comma"), what); ignore_rest_of_line (); return; } @@ -233,7 +233,7 @@ s_stab_generic (what, stab_secname, stabstr_secname) if (get_absolute_expression_and_terminator (&longint) != ',') { - as_warn (_(".stab%c: Missing comma"), what); + as_warn (_(".stab%c: missing comma"), what); ignore_rest_of_line (); return; } @@ -244,7 +244,7 @@ s_stab_generic (what, stab_secname, stabstr_secname) { if (*input_line_pointer != ',') { - as_warn (_(".stab%c: Missing comma"), what); + as_warn (_(".stab%c: missing comma"), what); ignore_rest_of_line (); return; } @@ -469,7 +469,7 @@ s_desc (ignore) if (*input_line_pointer != ',') { *p = 0; - as_bad (_("Expected comma after name \"%s\""), name); + as_bad (_("expected comma after \"%s\""), name); *p = c; ignore_rest_of_line (); } @@ -539,7 +539,7 @@ generate_asm_file (type, file) while (tmp < endp) { char *bslash = strchr (tmp, '\\'); - int len = (bslash ? (bslash - tmp + 1) : strlen (tmp)); + size_t len = (bslash) ? (size_t) (bslash - tmp + 1) : strlen (tmp); /* Double all backslashes, since demand_copy_C_string (used by s_stab to extract the part in quotes) will try to replace them as @@ -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); |