<div dir="ltr">All,<div><br></div><div><div class="gmail_extra">I asked Intel GCC guys who implemented OpenMP offloading support in GCC, and as they told me, GCC also employs option #4 from Hal's list -- it puts both host and target code in a single ELF file. "Code" in GCC case is always GCC's IR (Gimple), though -- they require GCC invocation from linker in order to produce a multi-target executable. This makes GCC non-interoperable with any other offloading compiler and effectively produces its own standard.</div></div><div class="gmail_extra"><br></div><div class="gmail_extra">Thus, prior art from:</div><div class="gmail_extra">* nvcc</div><div class="gmail_extra">* Pathscale</div><div class="gmail_extra">* GCC</div><div class="gmail_extra">* ICC</div><div class="gmail_extra"><br></div><div class="gmail_extra">indicates only one direction -- compiler driver produces a single object file with target code embedded in data section.</div><div class="gmail_extra"><br></div><div class="gmail_extra">Justin, is this convincing enough? I don't see any good reasons why clang should go against what every other compiler on the planet does.</div><div class="gmail_extra"><br></div><div class="gmail_extra">Re: objdump doesn't understand ELF format with code for multiple targets. The same is true for fat executable files as well, isn't? So if we need to teach objdump how to recognize fat files, we already have this problem.</div><div class="gmail_extra"><br></div><div class="gmail_extra">Yours,</div><div class="gmail_extra">Andrey</div><div class="gmail_extra">=====</div><div class="gmail_extra">Software Engineer</div><div class="gmail_extra">Intel Compiler Team</div><div class="gmail_extra"><br></div><div class="gmail_extra"><br></div></div>