aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTimothy Wall <twall@alum.mit.edu>2000-02-02 00:24:17 +0000
committerTimothy Wall <twall@alum.mit.edu>2000-02-02 00:24:17 +0000
commit210dcc61df37037ce2bd0dbf2792b4f69f29dfec (patch)
treeb7570cdfca9865155071f8be061dd5e111640e80
parentd9fcf2fb1c12d48f657c974dc5b6898022bf9ccf (diff)
downloadgdb-210dcc61df37037ce2bd0dbf2792b4f69f29dfec.zip
gdb-210dcc61df37037ce2bd0dbf2792b4f69f29dfec.tar.gz
gdb-210dcc61df37037ce2bd0dbf2792b4f69f29dfec.tar.bz2
Fix bug in stabs filename encoding where backslashes are present.
-rw-r--r--gas/ChangeLog6
-rw-r--r--gas/stabs.c23
2 files changed, 27 insertions, 2 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 19711d3..49709ab 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 c8d9a0b..7c13c2f 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