On Wed, Dec 8, 2010 at 5:54 AM, H.J. Lu <[email protected]> wrote:
> On Wed, Dec 8, 2010 at 1:19 AM, Andi Kleen <[email protected]> wrote:
>>> On 12/07/2010 04:20 PM, Andi Kleen wrote:
>>>>
>>>> The only problem left is mixing of lto and non lto objects. this right
>>>> now is not handled. IMHO still the best way to handle it is to use
>>>> slim lto and then simply separate link the "left overs" after deleting
>>>> the LTO objects. This can be actually done with objcopy (with some
>>>> limitations), doesn't even need linker support.
>>>>
>>>
>>> Quite possibly a better way to deal with that is to provide a mechanism
>>> for encapsulating arbitrary binary code objects inside the LTO IR.
>>
>> Then you would need to teach your assembler and everything
>
> The magic section is generated by linker directly. No changes to
> assembler is required.
>
>> else that may generate ELF objects to generate this magic object. But why
>> not just ELF directly? that is what it is after all.
>
> My proposal isn't specific to ELF.
>
>>
>> To be honest I don't really see the point of all this complexity you
>> guys are proposing just to save fat LTO. Fat LTO is always a bad idea
>> because it's slow and does lots of redundant work. If LTO is to become
>> a more wide spread mode it has to go simply because of the poor
>> performance.
>>
>> With slim LTO passthrough is very straight-forward: simple pass
>> through every section that is not LTO and generate code for the LTO
>> sections. No new magic sections needed at all.
>>
>
> My proposal works on both fat and slim LTO objects. The idea is
> you can use "ld -r" on any combination of inputs and its output
> still works as before "ld -r".
>
Here is the revised proposal.
--
H.J.
Link with mixed IR/non-IR objects
* 2 kinds of object files
o non-IR object file has
* non-IR sections
o IR object file has
* IR sections
* non-IR sections
* The output of "ld -r" with mixed IR/non-IR objects should work with:
o Compilers/linkers with IR support.
o Compilers/linkers without IR support.
* Add the mixed object file which has
o IR sections
o non-IR sections:
* Object codes from IR sections.
* Object codes from non-IR object files.
o Object-only section:
* With section name ".gnu_object_only" and SHT_GNU_OBJECT_ONLY
(0x6ffffff8) type on ELF.
* Contain non-IR object file.
* Input is discarded after link.
* Linker action:
o Classify each input object file:
* If there is a ".gnu_object_only" section, it is a mixed object file.
* If there is a IR section, it is an IR object file.
* Otherwise, it is a non-IR object file.
o Relocatable non-IR link:
* Prepare for an object-only output.
* Prepare for a regular output.
* For each mixed object file:
* Add IR and non-IR sections to the regular output.
* For object-only section:
* Extract object only file.
* Add it to the object-only output.
* Discard object-only section.
* For each IR object file:
* Add IR and non-IR sections to the regular output.
* For each non-IR object file:
* Add non-IR sections to the regular output.
* Add non-IR sections to the object-only output.
* Final output:
* If there are IR objects, non-IR objects and the object-only
output isn't empty:
* Put the object-only output into the object-only section.
* Add the object-only section to the regular output.
* Remove the object-only output.
o Normal link and relocatable IR link:
* Prepare for output.
* IR link:
* For each mixed object file:
* Compile and add IR sections to the output.
* Discard non-IR sections.
* Object-only section:
* Extract object only file.
* Add it to the output.
* Discard object-only section.
* For each IR object file:
* Compile and add IR sections to the output.
* Discard non-IR sections.
* For each non-IR object file:
* Add non-IR sections to the output.
* Non-IR link:
* For each mixed object file:
* Add non-IR sections to the output.
* Discard IR sections and object-only section.
* For each IR object file:
* Add non-IR sections to the output.
* Discard IR sections.
* For each non-IR object file:
* Add non-IR sections to the output.