[llvm-dev] [RFC] Support embedding bitcodes in LLD with LTO

Rui Ueyama via llvm-dev llvm-dev at lists.llvm.org
Thu Jan 31 11:04:40 PST 2019

That feature is probably too specific to your project. Most projects that
use LTO are using LTO just because it generates better code. Your project
is special as your program itself can also interpret LLVM bitcode, but
that's not the case for most other programs.

I think the option that's closest to the one you are looking for is
`--plugin-opt=emit-llvm`. That option makes lld to make an output file in
the bitcode file format (so lld doesn't do LTO if the option is given and
instead writes a raw bitcode as an output). With that option, I don't think
it's too hard to embed bitcode file to your executable. Run the linker
twice, with and without `--plugin-opt=emit-llvm`, and embed the generated
bitcode file using objcopy.

Does that work for you?

On Thu, Jan 31, 2019 at 4:18 AM Josef Eisl <josef.eisl at oracle.com> wrote:

> Thanks for your response!
> On 30/01/2019 20:18, Rui Ueyama wrote:
> > Hi Josef,
> >
> > Let me clarify my understanding. Do you want to keep original bitcode
> > files in the output executable when doing LTO, so that the resulting
> > executable contains both compiled bitcode (which is in native machine
> > instructions) and original bitcode files?
> Exactly! Kind of analogous to what `clang -fembed-bitcode -c` does, but
> for executables.
> >
> > Did you try embedding bitcode files into existing ELF files using
> > objcopy or linker option `--format=binary`?
> Yes, that is the alternative. However, having support in the linker for
> that would require less tweaking of exiting build systems. Adding an
> option to CFLAGS/LDFLAGS would then be sufficient.
> >
> > On Mon, Jan 28, 2019 at 6:41 AM Josef Eisl via llvm-dev
> > <llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>> wrote:
> >
> >     Hi everybody!
> >
> >     I'm Josef and I'm working at Oracle Labs on Sulong [1,2], the LLVM IR
> >     execution engine in GraalVM [3]. In addition to executing bare
> bitcode
> >     files, Sulong also accepts ELF files with embedded bitcode sections.
> >     Therefore, it would be great if LLD in (Full)LTO mode would support
> >     embedding bitcode sections to the resulting object file. Is that
> >     something that would be considered useful and worth contributing?
> >
> >     Thanks,
> >     Josef
> >
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20190131/d295744d/attachment.html>

More information about the llvm-dev mailing list