This is the mail archive of the
mailing list for the binutils project.
Re: Commit: Patch: GAS: Fix DWARF line number generation for target that use linker relaxation
On Thu, Jun 28, 2012 at 05:03:21PM +0100, nick clifton wrote:
> Hi Alan,
> >>+ else
> >>+ /* If the fix is valid, subtract fx_subsy here. The addition of
> >>+ fx_addsy will be performed below. Doing this prevents bogus
> >>+ warnings from the range check below. */
> >>+ add_number -= S_GET_VALUE (fixP->fx_subsy);
> >This looks suspicious to me, as it applies a symbol value without any
> >sort of notification to the backend. This ought to result in the
> >value being subtracted twice, unless the backend is buggy.
> Hmm, are you saying that TC_VALIDATE_FIX_SUB ought to modify
> add_number directly, even though it is not an argument to the macro
> The problem I was trying to fix was that (for the mn10300-elf
> toolchain) if TC_VALIDATE_FIX_SUB is invoked then, without my patch,
> add_number is left unmodified. All the other alternatives in the
> if-statement from that code block update add_number (unless there is
> an error), so it seemed the correct thing to do.
When the other alternatives subtract the value from add_number, they
also set fx_subsy NULL. Your patch will break eg. tc-xtensa.c
md_apply_fix as the fx_subsy value is subtracted there too.
> Also, without this patch, the mn10300-elf toolchain fails the
> gas/lns/lns-big-delta test because fixup_segment() erroneously
> complains that the value 75004 is being written to a 2-byte wide
> field. The error is bogus because the actual value being written is
> 0. The value of 75004 is obtained from fixp->fx_addsy, without the
> value of fixp->fx_subsy being subtracted.
tc-mn10300.c:md_apply_fix doesn't even consider fx_subsy when applying
a fully resolved fixup, so that's why you see a problem. On looking
again, I see that mn10300 expects fx_addsy symbol values to be added
too (MD_APPLY_SYM_VALUE is 1). So I think the correct solution is to
apply the fx_subsy values depending on MD_APPLY_SYM_VALUE, just as we
do for fx_addsy.
Australia Development Lab, IBM