[patch] MIPS: Fix synthesized doubleword transfers (ping)
Richard Sandiford
rsandifo@redhat.com
Fri Feb 25 13:36:00 GMT 2005
cgd@broadcom.com writes:
> At Thu, 24 Feb 2005 22:20:30 +0000, Richard Sandiford wrote:
>> cgd@broadcom.com writes:
>> > At Thu, 24 Feb 2005 21:05:49 +0000 (UTC), "Richard Sandiford" wrote:
>> >> I suppose bad things could happen if you composed an aligned
>> >> address from an unaligned symbol and an unaligned offset,
>> >> but is that allowed?
>> >
>> > yes, at least as far as the ISA is concerned.
>>
>> I don't follow. The ISA has no concept of symbols vs. offsets.
>
> right, but to some degree symbol + offset -> base reg + offset, since
> the offsets in the base regs come directly from the relocs.
Not really. ld is the equivalent of:
lui tmp,%hi(foo)
lw w1,%lo(foo)(tmp)
lw w2,%lo(foo+4)(tmp)
where the base register (tmp) is the high part of "sym + offset"
(lowest 16 bits all 0). We don't load the symbol part into a
temporary register and then add the offset.
For example, the linker will generate the same output for:
foo = sym + offset, sym = 0x10004, offset = 4
foo = sym + offset, sym = 0x10008, offset = 0
Richard
More information about the Binutils
mailing list