Re: How to compile Linux kernel to llvm bitcodes?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Apr 7, 2023 at 1:07 PM Nick Desaulniers <ndesaulniers@xxxxxxxxxx> wrote:
>
> On Fri, Apr 7, 2023 at 1:02 PM Bill Wendling <morbo@xxxxxxxxxx> wrote:
> >
> > On Fri, Apr 7, 2023 at 1:00 PM Nick Desaulniers <ndesaulniers@xxxxxxxxxx> wrote:
> > >
> > > On Mon, Mar 20, 2023 at 7:14 PM tr4v3ler <0xtr4v3ler@xxxxxxxxx> wrote:
> > > >
> > > > I would like to compile all C files into. ll or. bc to facilitate analyzing the entire kernel.
> > >
> > > So there's a make target compile_commands.json. That will give you a
> > > json list of triples that contain the exact command used to compile
> > > the kernel. It's probably 10 lines of python to parse that, then rerun
> > > the exact command used the build each translation unit with -emit-llvm
> > > and -S (or not depending on if you want .ll or .bc).  That will give
> > > you a .ll/.bc for everything that's built as part of your config for
> > > that configuration.
> > >
> > > Otherwise, kbuild has rules to do:
> > >
> > > $ make LLVM=1 lib/string.ll
> > >
> > > There's no support for .bc (would be trivial to add) because you
> > > typically end up running llvm-dis on .bc files to get .ll files
> > > anyways.  I almost never use .bc files.
> > >
> > If LTO is enabled, then the .o files are LLVM bitcode files by default.
>
> Ah right!
>
> (I wonder what would break if we changed this to use the expected file
> extension of .bc rather than .o.)
>
I'm sure it can be done, but it would require poking into a lot of
Makefiles. Ultimately, it might not be worth it...

The only situation where it might be beneficial is to compare ELF
files generated during ThinLTO to their bitcode counterparts---e.g. if
one wants to verify a livepatch and have a "paper trail" back to the
changed files (we do something similar to this internally, but I don't
think it's a widespread workflow).

-bw

> > > > Nick Desaulniers <ndesaulniers@xxxxxxxxxx> 于 2023年3月21日周二 01:12写道:
> > > >>
> > > >> On Mon, Mar 20, 2023 at 2:53 AM tr4v3ler <0xtr4v3ler@xxxxxxxxx> wrote:
> > > >> >
> > > >> > Hi,I found the following compilation targets in the makefile(https://github.com/torvalds/linux/blob/master/scripts/Makefile.build#L136) of the Linux kernel. However, I don't know how to make this goal effective, compile the Linux kernel, and generate llvm bitcodes. Do I need to specify specific parameters for the make command? Or through environment variables?
> > > >>
> > > >> What precisely are you looking for? A single .ll file? A single .bc
> > > >> file? .ll or .bc files for every translation unit?
> > > >> --
> > > >> Thanks,
> > > >> ~Nick Desaulniers
> > >
> > >
> > >
> > > --
> > > Thanks,
> > > ~Nick Desaulniers
> > >
>
>
>
> --
> Thanks,
> ~Nick Desaulniers
>




[Index of Archives]     [Linux&nblp;USB Development]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite Secrets]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux