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 >