This is the mail archive of the
binutils@sources.redhat.com
mailing list for the binutils project.
ld error messages
- From: Alan Modra <amodra at bigpond dot net dot au>
- To: binutils at sources dot redhat dot com
- Date: Sat, 21 Sep 2002 23:46:12 +0930
- Subject: ld error messages
File, function and line number might be all users need to know to
correct such errors as undefined symbols, but sometimes section and
offset info are useful in tracking down bugs.
ld/ChangeLog
* ldmisc.c (vfinfo <%C,%D,%G>): Always output bfd, section and offset.
ld/testsuite/ChangeLog
* ld-undefined/undefined.exp: Adjust function test.
Index: ld/ldmisc.c
===================================================================
RCS file: /cvs/src/src/ld/ldmisc.c,v
retrieving revision 1.11
diff -c -r1.11 ldmisc.c
*** ld/ldmisc.c 2 Jul 2002 04:21:57 -0000 1.11
--- ld/ldmisc.c 21 Sep 2002 13:57:22 -0000
***************
*** 236,244 ****
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. */
{
static bfd *last_bfd;
static char *last_file = NULL;
--- 236,243 ----
case 'C':
case 'D':
case 'G':
! /* 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,347 ****
}
}
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;
if (last_bfd == NULL
|| last_file == NULL
|| last_function == NULL
|| last_bfd != abfd
! || 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);
last_bfd = abfd;
if (last_file != NULL)
free (last_file);
! 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)
{
! lfinfo (fp, "%B(%s+0x%v)", abfd, section->name,
! offset);
! if (linenumber != 0)
! lfinfo (fp, ":%u", linenumber);
}
! 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);
}
- else
- lfinfo (fp, "%B(%s+0x%v)", abfd, section->name, offset);
if (discard_last)
{
--- 279,332 ----
}
}
+ 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))
{
! boolean need_colon = true;
+ if (functionname != NULL && fmt[-1] == 'C')
+ {
if (last_bfd == NULL
|| last_file == NULL
|| last_function == NULL
|| last_bfd != abfd
! || (filename != NULL
! && strcmp (last_file, filename) != 0)
|| strcmp (last_function, functionname) != 0)
{
! lfinfo (fp, _(": In function `%T':\n"),
! functionname);
! need_colon = false;
last_bfd = abfd;
if (last_file != NULL)
free (last_file);
! last_file = NULL;
! if (filename)
! last_file = xstrdup (filename);
if (last_function != NULL)
free (last_function);
last_function = xstrdup (functionname);
}
discard_last = false;
}
!
! if (filename != NULL)
{
! if (need_colon)
! putc (':', fp);
! fputs (filename, fp);
}
!
! if (functionname != NULL && fmt[-1] == 'G')
! lfinfo (fp, ":%T", functionname);
! else if (filename != NULL && linenumber != 0)
! fprintf (fp, ":%u", linenumber);
}
if (discard_last)
{
Index: ld/testsuite/ld-undefined/undefined.exp
===================================================================
RCS file: /cvs/src/src/ld/testsuite/ld-undefined/undefined.exp,v
retrieving revision 1.14
diff -c -r1.14 undefined.exp
*** ld/testsuite/ld-undefined/undefined.exp 11 Jun 2002 09:50:44 -0000 1.14
--- ld/testsuite/ld-undefined/undefined.exp 21 Sep 2002 13:57:23 -0000
***************
*** 79,85 ****
setup_xfail "mn10300-*-elf"
setup_xfail "sh-*-*"
! set mf "tmpdir/undefined.o: In function `function':"
checkund $mf $testfn
# COFF SH gets this test wrong--it reports line 10, because although
--- 79,85 ----
setup_xfail "mn10300-*-elf"
setup_xfail "sh-*-*"
! set mf "tmpdir/undefined.o* In function `function':"
checkund $mf $testfn
# COFF SH gets this test wrong--it reports line 10, because although
--
Alan Modra
IBM OzLabs - Linux Technology Centre