[llvm-dev] whole linux kernel bitcode

Kai Wang via llvm-dev llvm-dev at lists.llvm.org
Mon Jan 11 16:36:30 PST 2016


I got a link error when I'm trying to use llvm-link to link all those
bitcode files.
For example,

*AS usr/initramfs_data.o*
*LD usr/built-in.o*

initramfs_data.o is generated by initramfs_data.S, and ld
links initramfs_data.o to build-in.o.
But clang can not generate bitcode file "*initramfs_data.bc*"
from initramfs_data.S. When I use llvm-link to link *initramfs_data.bc* to
built-in.bc, an error comes out because *initramfs_data.bc* is missing.

Any suggestions? Is it possible that clang can compile *.S to *.bc? If not,
how should I get rid of the missing bitcode file?

Thank you.

On Thu, Jan 7, 2016 at 4:24 PM, Kai Wang <wangkai.cas at gmail.com> wrote:

>  First, you can use llvm-link to link the bitcode files together.  This
>> will require some manual changes to the Linux Makefiles.  Once you get a
>> single bitcode file, you can run your analysis pass via opt.  This is the
>> approach that I used for the original SVA system for Linux 2.4.22 back
>> before we had libLTO.
>
>
>
> When I generate bitcode files,  I pass -emit-llvm flag to compiler command
> line ( clang -emit-llvm "a long list of parms"  *.c ) so that it generates
> .bc files during compilation.  Since -emit-llvm doesn't change the name of
> file output, I rename *.o file to *.bc file.
> Then I run compiler  again ( clang "a long list of parms" *.c ) to
> generate *.o file otherwise Kbuild would break. So basically I create *.bc
> files next to all the  *.o files (where possible)
>
> How should I modify Makefiles to link all the bitcode files together?
> Could you share with me some experience?
> My guess is to use llvm-link to link bitcode files along with every ld
> command line?
> For example,
> For " ld -r -o init/mounts.o init/do_mounts.o init/do_mounts_initrd.o
> init/do_mounts_md.o; "
> I'll have something like " llvm-link -o init/mounts.bc init/do_mounts.bc
> init/do_mounts_initrd.bc init/do_mounts_md.bc; " ?
>
> Thank you!
>
> Kai
>
> On Wed, Jan 6, 2016 at 7:53 AM, John Criswell <jtcriswel at gmail.com> wrote:
>
>> On 1/6/16 9:41 AM, Kai Wang via llvm-dev wrote:
>>
>>
>> Hi all,
>>
>> I'm trying to generate whole program bitcode files for linux kernel and
>> do interprocedural analysis on kernel.
>>
>> I use llvmlinux to compile kernel with clang and  generate a bunch of
>> bitcode files successfully.
>> I need to link all these bitcode files together into a single bitcode
>> file, so that I can run whole program analysis.
>>
>> Should I use libLTO to link all these bitcode files together? I guess I
>> have to modify the linux kernel's build scripts and Makefiles?
>> I'm kind of confused. Any suggestions?
>>
>>
>> There are two ways to do it.
>>
>> First, you can use llvm-link to link the bitcode files together.  This
>> will require some manual changes to the Linux Makefiles.  Once you get a
>> single bitcode file, you can run your analysis pass via opt.  This is the
>> approach that I used for the original SVA system for Linux 2.4.22 back
>> before we had libLTO.
>>
>> Second, you could add your pass to libLTO and change the Linux Makefiles
>> to use the -flto option.  This method should require fewer Makefile changes
>> but will require you to build and install your own libLTO library.
>>
>> Regards,
>>
>> John Criswell
>>
>>
>>
>> Thank you
>>
>> Regards,
>> Kai
>>
>>
>>
>> _______________________________________________
>> LLVM Developers mailing listllvm-dev at lists.llvm.orghttp://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>>
>>
>>
>> --
>> John Criswell
>> Assistant Professor
>> Department of Computer Science, University of Rochesterhttp://www.cs.rochester.edu/u/criswell
>>
>>
>
>
> --
> Regards,
> Kai
>



-- 
Regards,
Kai
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20160111/b0c8067f/attachment.html>


More information about the llvm-dev mailing list