Multiple relocation in ELF
Michael Eager
eager@eagercon.com
Tue Jul 25 12:53:00 GMT 2006
Richard Earnshaw wrote:
> On Mon, 2006-07-24 at 19:26, Michael Eager wrote:
>> Alan Modra wrote:
>>> On Mon, Jul 24, 2006 at 04:22:41PM +0530, Santosh wrote:
>>>> ADDIU r2, RELOCATABLE_SYMBOL + RELOCATABLE_SYMBOL
>>>>
>>>> In ELF, we can emit relocation information for only one symbol having
>>>> its symbol index, offset and relocation value to apply. But when I try
>>>> to give more than one relocatable symbol, it cannot be represented by
>>>> ELF format.
>>> ELF can support multiple symbols in a relocation expression. The trick
>>> is to apply multiple suitably defined relocations to the one location.
>> Alan --
>>
>> Can you give an example of how this might be done? I don't think that
>> it is possible to apply two relocations to a single location in ELF.
>>
>> I can think of one way that this might work, but it's problematic:
>>
>> If the relocations are in REL format, the addend is saved in the
>> object file. (If RELA is used, the addend is in the reloc entry.)
>> In either case, it seems that the result value from the first
>> relocation will computed and stored in the output, then overwritten
>> by the computation of the second relocation. The only way that
>> these two relocations could be composed is if REL format is used,
>> and the result of the relocation overwrote the value in the *input*
>> object file, so that the result value from the first relocation
>> is used as the addend of the second.
>>
>> If this is the scheme, I don't think that this behavior is defined
>> by the ELF spec.
>
> The ELF spec is pretty specific on this issue. It's known as a composed
> sequence
>
> - Multiple relocations on the same place must all be of the same type
> (all REL or all RELA).
> - Composed relocations are processed in order in the table
> - The initial addend for the first relocation in the sequence is
> extracted as normal
> - Subsequent relocations use the result of the previous relocation
> calculation as the initial addend value.
>
> The result is only written back at the end of the composed sequence.
>
> Note, however, that since all relocations are machine specific the rules
> can be varied somewhat. In particular a relocation code can be
> specified to terminate a sequence or to start a new one.
Thanks. You're right -- it is specified in the ELF 4.1 draft.
--
Michael Eager eager@eagercon.com
1960 Park Blvd., Palo Alto, CA 94306 650-325-8077
More information about the Binutils
mailing list