Fix gas testsuite unexpected failures for mn10200-elf port

Nick Clifton nickc@redhat.com
Thu Mar 3 13:49:00 GMT 2005


Hi Guys,

  The mn10200-elf target is currently failing to assemble some of the
  gas testcases because it cannot resolve a difference of symbols
  defined in the same section.  I am therefore applying the patch
  below to give the port this capability.  It could be extended to
  handle absolute symbols as well, but for now this is enough.

Cheers
  Nick

gas/ChangeLog
2005-03-03  Nick Clifton  <nickc@redhat.com>

	* config/tc-mn10200.c (tc_gen_reloc): Handle the case where the
	reloc is the difference of two symbols defined in the same
	section.

Index: gas/config/tc-mn10200.c
===================================================================
RCS file: /cvs/src/src/gas/config/tc-mn10200.c,v
retrieving revision 1.15
diff -c -3 -p -r1.15 tc-mn10200.c
*** gas/config/tc-mn10200.c	3 Mar 2005 11:47:54 -0000	1.15
--- gas/config/tc-mn10200.c	3 Mar 2005 13:46:30 -0000
*************** tc_gen_reloc (seg, fixp)
*** 1235,1251 ****
  
    if (fixp->fx_subsy != NULL)
      {
!       /* FIXME: We should resolve difference expressions if possible
! 	 here.  At least this is better than silently ignoring the
! 	 subtrahend.  */
!       as_bad_where (fixp->fx_file, fixp->fx_line,
! 		    _("can't resolve `%s' {%s section} - `%s' {%s section}"),
! 		    fixp->fx_addsy ? S_GET_NAME (fixp->fx_addsy) : "0",
! 		    segment_name (fixp->fx_addsy
! 				  ? S_GET_SEGMENT (fixp->fx_addsy)
! 				  : absolute_section),
! 		    S_GET_NAME (fixp->fx_subsy),
! 		    segment_name (S_GET_SEGMENT (fixp->fx_addsy)));
      }
  
    reloc->howto = bfd_reloc_type_lookup (stdoutput, fixp->fx_r_type);
--- 1235,1258 ----
  
    if (fixp->fx_subsy != NULL)
      {
!       if (S_GET_SEGMENT (fixp->fx_addsy) == S_GET_SEGMENT (fixp->fx_subsy)
! 	  && S_IS_DEFINED (fixp->fx_subsy))
! 	{
! 	  fixp->fx_offset -= S_GET_VALUE (fixp->fx_subsy);
! 	  fixp->fx_subsy = NULL;
! 	}
!       else
! 	/* FIXME: We should try more ways to resolve difference expressions
! 	   here.  At least this is better than silently ignoring the
! 	   subtrahend.  */
! 	as_bad_where (fixp->fx_file, fixp->fx_line,
! 		      _("can't resolve `%s' {%s section} - `%s' {%s section}"),
! 		      fixp->fx_addsy ? S_GET_NAME (fixp->fx_addsy) : "0",
! 		      segment_name (fixp->fx_addsy
! 				    ? S_GET_SEGMENT (fixp->fx_addsy)
! 				    : absolute_section),
! 		      S_GET_NAME (fixp->fx_subsy),
! 		      segment_name (S_GET_SEGMENT (fixp->fx_addsy)));
      }
  
    reloc->howto = bfd_reloc_type_lookup (stdoutput, fixp->fx_r_type);



More information about the Binutils mailing list