From 5cfb2bb20886a24dc7fb83a6bdcf2ac68b9d20b3 Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Sat, 21 Sep 2002 14:14:25 +0000 Subject: [PATCH] * ldmisc.c (vfinfo <%C,%D,%G>): Always output bfd, section and offset. --- ld/ChangeLog | 4 ++++ ld/ldmisc.c | 65 ++++++++++++++++++++-------------------------------- 2 files changed, 29 insertions(+), 40 deletions(-) diff --git a/ld/ChangeLog b/ld/ChangeLog index be11502c97e..ff657298166 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,7 @@ +2002-09-21 Alan Modra + + * ldmisc.c (vfinfo <%C,%D,%G>): Always output bfd, section and offset. + 2002-09-17 Stan Cox * emulparams/elf32bmipn32-defs.sh: New file. diff --git a/ld/ldmisc.c b/ld/ldmisc.c index 2869ba9233c..5661aca5767 100644 --- a/ld/ldmisc.c +++ b/ld/ldmisc.c @@ -236,9 +236,8 @@ vfinfo (fp, fmt, arg) case 'C': case 'D': case 'G': - /* Clever filename:linenumber with function name if possible, - or section name as a last resort. The arguments are a BFD, - a section, and an offset. */ + /* Clever filename:linenumber with function name if possible. + The arguments are a BFD, a section, and an offset. */ { static bfd *last_bfd; 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; if (bfd_find_nearest_line (abfd, section, asymbols, offset, &filename, &functionname, &linenumber)) { - if (functionname != NULL && fmt[-1] == 'G') - { - 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; + boolean need_colon = true; + if (functionname != NULL && fmt[-1] == 'C') + { if (last_bfd == NULL || last_file == NULL || last_function == NULL || last_bfd != abfd - || strcmp (last_file, filename) != 0 + || (filename != NULL + && strcmp (last_file, filename) != 0) || strcmp (last_function, functionname) != 0) { - /* We use abfd->filename in this initial line, - in case filename is a .h file or something - similarly unhelpful. */ - lfinfo (fp, _("%B: In function `%T':\n"), - abfd, functionname); + lfinfo (fp, _(": In function `%T':\n"), + functionname); + need_colon = false; last_bfd = abfd; if (last_file != NULL) free (last_file); - last_file = xstrdup (filename); + last_file = NULL; + if (filename) + last_file = xstrdup (filename); if (last_function != NULL) free (last_function); last_function = xstrdup (functionname); } 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, - offset); - if (linenumber != 0) - lfinfo (fp, ":%u", linenumber); + if (need_colon) + putc (':', fp); + fputs (filename, fp); } - else if (linenumber != 0) - lfinfo (fp, "%B:%s:%u", abfd, filename, linenumber); - else - lfinfo (fp, "%B(%s+0x%v):%s", abfd, section->name, - offset, filename); + + if (functionname != NULL && fmt[-1] == 'G') + lfinfo (fp, ":%T", functionname); + else if (filename != NULL && linenumber != 0) + fprintf (fp, ":%u", linenumber); } - else - lfinfo (fp, "%B(%s+0x%v)", abfd, section->name, offset); if (discard_last) { -- 2.30.2