/* Generic stabs parsing for gas.
- Copyright (C) 1989, 90, 91, 93, 94, 95, 96, 97, 1998
+ Copyright (C) 1989, 90, 91, 93, 94, 95, 96, 97, 98, 1999
Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
#define OBJ_PROCESS_STAB(SEG,W,S,T,O,D) aout_process_stab(W,S,T,O,D)
#endif
-static void aout_process_stab PARAMS ((int, const char *, int, int, int));
-
-static void
+/* Here instead of obj-aout.c because other formats use it too. */
+void
aout_process_stab (what, string, type, other, desc)
int what;
const char *string;
if (what == 's' || what == 'n')
{
/* Pick up the value from the input line. */
- symbol->sy_frag = &zero_address_frag;
+ symbol_set_frag (symbol, &zero_address_frag);
pseudo_set (symbol);
}
else
{
/* .stabd sets the name to NULL. Why? */
S_SET_NAME (symbol, NULL);
- symbol->sy_frag = frag_now;
+ symbol_set_frag (symbol, frag_now);
S_SET_VALUE (symbol, (valueT) frag_now_fix ());
}
void
s_desc (ignore)
- int ignore;
+ int ignore ATTRIBUTE_UNUSED;
{
char *name;
char c;
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
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);
}
input_line_pointer = hold;
+ free (buf);
}
/* Generate stabs debugging information for the current line. This is
void
stabs_generate_asm_endfunc (funcname, startlabname)
- const char *funcname;
+ const char *funcname ATTRIBUTE_UNUSED;
const char *startlabname;
{
static int label_count;