On Mon, Dec 6, 2010 at 4:05 PM, H.J. Lu <hjl.to...@gmail.com> 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.