This is the mail archive of the binutils@sourceware.org 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]

Re: S_FORCE_RELOC intended behavior?


On Fri, Aug 21, 2015 at 04:42:05PM -0400, Rich Felker wrote:
> A while back I reported issue #18561 which I thought was sh-specific,
> but discussion on the bug tracker with Nick Clifton, who found a way
> to make gas behave correctly, has revealed that the issue might be
> deeper and affecting other targets too. The following commit:
> 
> https://sourceware.org/git/?p=binutils-gdb.git;a=commitdiff;h=ae6063d440ba5ec28af81e9fc899cc099561339e;hp=f0abc2a11f47c3ecdfe0b54421092d17c70fc5f2
> 
> changed S_FORCE_RELOC so that, for some callers, it reports
> expressions based on weak symbol definitions as being able to be
> handled with fixups rather than requiring relocations to be emitted.
> As far as I can tell, this is always incorrect; a weak definition can
> always be replaced at link time.
> 
> Is anyone familiar with the code affected by the above commit able to
> confirm whether my interpretation is correct and make sense of why the
> changes in that commit were made?

I commented in the bugzilla before seeing this email.

Basically, your claim that it is always incorrect to resolve an
expression involving a weak symbol, is wrong.  Counter example:
 .size foo, . - foo
OK, perhaps not the best example, but the point is that subtraction of
two symbols is often used in expressions involving some *local*
property of the function/object involved.

Long-standing gas behaviour is to resolve expressions involving
unadorned subtraction of defined symbols at assembly time.  I don't
think that can be changed without breaking things.

-- 
Alan Modra
Australia Development Lab, IBM


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