On Wed, Dec 8, 2010 at 5:54 AM, H.J. Lu <hjl.to...@gmail.com> wrote:
> On Wed, Dec 8, 2010 at 1:19 AM, Andi Kleen <a...@firstfloor.org> 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.

Reply via email to