Fix bug in stabs filename encoding where backslashes are present.
This commit is contained in:
parent
d9fcf2fb1c
commit
210dcc61df
2 changed files with 27 additions and 2 deletions
|
@ -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.
|
||||
|
|
23
gas/stabs.c
23
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
|
||||
|
|
Loading…
Reference in a new issue