This is the mail archive of the
binutils@sources.redhat.com
mailing list for the binutils project.
Fix gas testsuite unexpected failures for mn10200-elf port
- From: Nick Clifton <nickc at redhat dot com>
- To: binutils at sources dot redhat dot com
- Date: Thu, 03 Mar 2005 14:00:58 +0000
- Subject: Fix gas testsuite unexpected failures for mn10200-elf port
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);