[llvm-commits] [LLD] Patch to tie Atoms in a section together
Shankar Easwaran
shankare at codeaurora.org
Thu Oct 25 11:48:35 PDT 2012
Hi Nick,
I had a chat with Michael and I will resubmit the patch for review with
the below changes :-
1) Add Follow on reference functionality in Core
2) Use the follow on reference in ReaderELF
3) Change the testcase
Thanks
Shankar Easwaran
On 10/25/2012 6:57 AM, Shankar Easwaran wrote:
> On 10/24/2012 8:59 PM, Shankar Easwaran wrote:
>> On 10/24/2012 8:44 PM, Nick Kledzik wrote:
>>> On Oct 24, 2012, at 6:25 PM, Shankar Easwaran wrote:
>>>
>>>>>>> This requires some more explanation. Are you trying to prevent
>>>>>>> them from ever being removed? Or they can only be removed is
>>>>>>> everything is the section is removed? If the former, the
>>>>>>> dead-strip setting would do the same. If the latter, if you are
>>>>>>> trying to keep the order of the functions, do you want something
>>>>>>> stronger which says they cannot be reordered too? The "none"
>>>>>>> reference just keeps them alive.
>>>>>> I am trying to do the latter, they can only be removed only if
>>>>>> the section is removed. I couldnt follow why the 'none' reference
>>>>>> would not keep the functions together though.
>>>>> If someone were to write a Pass which re-ordered functions based.
>>>>> How would the pass know to not re-order those functions?
>>>>>
>>>> I will go ahead and create a reference from the current symbol to
>>>> the next symbol too, so that they dont get reordered.
>>> Shankar,
>>>
>>> I think you are missing my point. Garbage collection (aka dead
>>> stripping) and atom re-ordering are different things. They both will
>>> cause problems with assembly code written assuming only whole
>>> sections will copied to output files. But, adding a reference only
>>> prevents garbage collection. It does not stop re-ordering of atoms.
>>>
>>> To stop re-ordering of atoms, the darwin linker uses a special
>>> reference kind called a follow-on. The re-ordering pass knows it
>>> cannot move an atom relative to another atom that has a follow-on
>>> reference to it. More specifically, if A has a follow-on reference
>>> to B, then atom B must immediately follow (be laid out) after atom A.
>>>
>>> Currently in lld, all References are platform specific. We don't
>>> yet have a way that generic Passes can infer meaning from reference
>>> kind
>>>
>> Hi Nick,
>>
>> Thanks for your reply.
>>
>> Currently the writer creates the output ELF file in file order and in
>> the order that atoms appeared in the input file(sorted by ordinality).
>>
>> My thought is we can use the 'none' reference as a follow on
>> reference as it is in the MachO linker so that we know what atoms
>> come next. Will this not be true ? Do you see a possibility of a
>> relocation type 'none' being used elsewhere too.
>>
>> Let me know your thoughts.
>>
>> Thanks
>>
>> Shankar Easwaran
>>
>>
> Hi Nick,
>
> I wanted to understand the design choice in the darwin linker, that
>
> 1) Was the follow-on reference added in the relocation entries for
> each Atom ?
> 2) Why wasnt it added as a private member for each Atom, If there is a
> follow on reference, Each atom could contain a reference to another
> atom in the follow on member for that Atom.
> Advantages are
>
> a) When the writer tries to write the Atoms, it would write all
> atoms that follow in order, if it contains a follow on Atom
> b) This is platform neutral
> c) Easy to resolve Atoms and support Atom groups
>
> Let me know your thoughts on either approaches with the current lld
> model. I will change the code accordingly.
>
> Thanks
>
> Shankar Easwaran
>
>
--
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by the Linux Foundation
More information about the llvm-commits
mailing list