diff options
author | Timothy Wall <twall@alum.mit.edu> | 2000-02-02 00:24:17 +0000 |
---|---|---|
committer | Timothy Wall <twall@alum.mit.edu> | 2000-02-02 00:24:17 +0000 |
commit | 392c52aeadb5d1c017849e6cb65beffb351a3593 (patch) | |
tree | aacae8aa8c4623026949df02373b2777fcee2967 | |
parent | c7674676c16adc5d0d8bde204f06aaed9ab2b2d4 (diff) | |
download | binutils-redhat-392c52aeadb5d1c017849e6cb65beffb351a3593.tar.gz |
Fix bug in stabs filename encoding where backslashes are present.
-rw-r--r-- | gas/ChangeLog | 6 | ||||
-rw-r--r-- | gas/stabs.c | 23 |
2 files changed, 27 insertions, 2 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog index 19711d3095..49709ab827 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,9 @@ +2000-02-01 Timothy Wall <twall@cygnus.com> + + * stabs.c (generate_asm_file): Escape backslashes in stabs file + entries, matching the way GCC generates them. If not escaped, the + filename is encoded incorrectly. + 2000-01-31 Nick Clifton <nickc@cygnus.com> * config/tc-arm.c (reg_table): Add support for ATPCS register naming conventions. diff --git a/gas/stabs.c b/gas/stabs.c index c8d9a0bc5c..7c13c2f1e0 100644 --- a/gas/stabs.c +++ b/gas/stabs.c @@ -498,7 +498,7 @@ generate_asm_file (type, file) static char *last_file; static int label_count; char *hold; - char buf[100]; + char *buf = xmalloc (2 * strlen (file) + 10); char sym[30]; /* Rather than try to do this in some efficient fashion, we just @@ -511,10 +511,28 @@ generate_asm_file (type, file) if (last_file == NULL || strcmp (last_file, file) != 0) { + char *tmp = file; + char *endp = file + strlen(file); + char *bufp = buf; + sprintf (sym, "%sF%d", FAKE_LABEL_NAME, label_count); ++label_count; - sprintf (buf, "\"%s\",%d,0,0,%s\n", file, type, sym); + *bufp++ = '"'; + while (tmp < endp) + { + char *bslash = strchr (tmp, '\\'); + int len = (bslash ? (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 + escape sequences. backslash may appear in a filespec. */ + strncpy (bufp, tmp, len); + tmp += len; + bufp += len; + if (bslash != NULL) + *bufp++ = '\\'; + } + sprintf (bufp, "\",%d,0,0,%s\n", type, sym); input_line_pointer = buf; s_stab ('s'); colon (sym); @@ -525,6 +543,7 @@ generate_asm_file (type, file) } input_line_pointer = hold; + free (buf); } /* Generate stabs debugging information for the current line. This is |