* ldmisc.c (vfinfo <%C,%D,%G>): Always output bfd, section and offset.

This commit is contained in:
Alan Modra 2002-09-21 14:14:25 +00:00
parent 344897cceb
commit 5cfb2bb208
2 changed files with 29 additions and 40 deletions

View File

@ -1,3 +1,7 @@
2002-09-21 Alan Modra <amodra@bigpond.net.au>
* ldmisc.c (vfinfo <%C,%D,%G>): Always output bfd, section and offset.
2002-09-17 Stan Cox <scox@redhat.com> 2002-09-17 Stan Cox <scox@redhat.com>
* emulparams/elf32bmipn32-defs.sh: New file. * emulparams/elf32bmipn32-defs.sh: New file.

View File

@ -236,9 +236,8 @@ vfinfo (fp, fmt, arg)
case 'C': case 'C':
case 'D': case 'D':
case 'G': case 'G':
/* Clever filename:linenumber with function name if possible, /* Clever filename:linenumber with function name if possible.
or section name as a last resort. The arguments are a BFD, The arguments are a BFD, a section, and an offset. */
a section, and an offset. */
{ {
static bfd *last_bfd; static bfd *last_bfd;
static char *last_file = NULL; static char *last_file = NULL;
@ -280,68 +279,54 @@ vfinfo (fp, fmt, arg)
} }
} }
lfinfo (fp, "%B(%s+0x%v)", abfd, section->name, offset);
discard_last = true; discard_last = true;
if (bfd_find_nearest_line (abfd, section, asymbols, offset, if (bfd_find_nearest_line (abfd, section, asymbols, offset,
&filename, &functionname, &filename, &functionname,
&linenumber)) &linenumber))
{ {
if (functionname != NULL && fmt[-1] == 'G') boolean need_colon = true;
{
lfinfo (fp, "%B:", abfd);
if (filename != NULL
&& strcmp (filename, bfd_get_filename (abfd)) != 0)
fprintf (fp, "%s:", filename);
lfinfo (fp, "%T", functionname);
}
else if (functionname != NULL && fmt[-1] == 'C')
{
if (filename == (char *) NULL)
filename = abfd->filename;
if (functionname != NULL && fmt[-1] == 'C')
{
if (last_bfd == NULL if (last_bfd == NULL
|| last_file == NULL || last_file == NULL
|| last_function == NULL || last_function == NULL
|| last_bfd != abfd || last_bfd != abfd
|| strcmp (last_file, filename) != 0 || (filename != NULL
&& strcmp (last_file, filename) != 0)
|| strcmp (last_function, functionname) != 0) || strcmp (last_function, functionname) != 0)
{ {
/* We use abfd->filename in this initial line, lfinfo (fp, _(": In function `%T':\n"),
in case filename is a .h file or something functionname);
similarly unhelpful. */ need_colon = false;
lfinfo (fp, _("%B: In function `%T':\n"),
abfd, functionname);
last_bfd = abfd; last_bfd = abfd;
if (last_file != NULL) if (last_file != NULL)
free (last_file); free (last_file);
last_file = xstrdup (filename); last_file = NULL;
if (filename)
last_file = xstrdup (filename);
if (last_function != NULL) if (last_function != NULL)
free (last_function); free (last_function);
last_function = xstrdup (functionname); last_function = xstrdup (functionname);
} }
discard_last = false; discard_last = false;
if (linenumber != 0)
fprintf (fp, "%s:%u", filename, linenumber);
else
lfinfo (fp, "%s(%s+0x%v)", filename, section->name,
offset);
} }
else if (filename == NULL
|| strcmp (filename, abfd->filename) == 0) if (filename != NULL)
{ {
lfinfo (fp, "%B(%s+0x%v)", abfd, section->name, if (need_colon)
offset); putc (':', fp);
if (linenumber != 0) fputs (filename, fp);
lfinfo (fp, ":%u", linenumber);
} }
else if (linenumber != 0)
lfinfo (fp, "%B:%s:%u", abfd, filename, linenumber); if (functionname != NULL && fmt[-1] == 'G')
else lfinfo (fp, ":%T", functionname);
lfinfo (fp, "%B(%s+0x%v):%s", abfd, section->name, else if (filename != NULL && linenumber != 0)
offset, filename); fprintf (fp, ":%u", linenumber);
} }
else
lfinfo (fp, "%B(%s+0x%v)", abfd, section->name, offset);
if (discard_last) if (discard_last)
{ {