On Mon, Dec 6, 2010 at 4:05 PM, H.J. Lu <[email protected]> wrote:
>>
>> Without slim lto you never know if a duplicate symbol is a mistake
>> of the programmer or just the "fat lto" copy. Also ELF semantics
>> like weak are hard if you have multiple copies.
>>
>
> It isn't easy, but doable.
>
Here is my proposal. Any comments?
Thanks.
--
H.J.
---
• 2 kinds of object files
○ non-IR object file has
§ non-IR sections
○ IR object file has
§ IR sections
§ non-IR sections
• The output of "ld -r" with mixed IR/non-IR objects should work with:
○ Compilers/linkers with IR support.
○ Compilers/linkers without IR support.
• Add the mixed object file has
○ IR sections
○ non-IR sections:
§ Object codes from IR sections.
§ Object codes from non-IR object files.
○ Object-only section:
§ Section name won't be generated by any tools, something like
".objectonly\004".
§ Contains non-IR object file.
§ Input is discarded after link.
• Linker action:
○ Classify each input object file:
□ If there is a ".objectonly\004" 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.
○ Relocatable 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.
○ Normal link
§ Prepare for output.
§ For each mixed object file,
□ Compile and add IR sections to the output.
□ For 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.
§ For each non-IR object file,
□ Add non-IR sections to the output.