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