This is the mail archive of the binutils@sources.redhat.com mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]