[LLVMdev] How to compile this linux-driver like programme into .bc file?

Alexander Potapenko glider at google.com
Wed Apr 18 07:31:17 PDT 2012


I'd suggest you not mess up with the Makefile, but make a wrapper
script that pretends it is gcc.
For each source file it should invoke clang with the appropriate flags
and -emit-llvm -o filename.bc
It then should optionally run opt on that bc file in order to run your
instrumentation pass.
Then the instrumented file should be translated to assembly using llc,
and the the assembly code needs to be compiled into filename.o
In this case you'll have the working pipeline as well as all the
artifacts generated during the compilation (.bc, instrumented .bc, .S)

Because such a script might be tricky to write (you may want to take a
look at http://code.google.com/p/data-race-test/source/browse/#svn%2Ftrunk%2Fllvm%2Fscripts
to get the idea),
a better approach is to add your instrumentation pass to Clang driver
so that a special flag will invoke it (you can search the Clang source
for "faddress_sanitizer" to see how we do that for AddressSanitizer).

On Wed, Apr 18, 2012 at 6:11 PM, 15102925731 <zhenkaixd at 126.com> wrote:
> I may try to use the Makefile then.
>
> When using gcc
> the Makefile is
> CC := colorgcc
> obj-m := hello.o
> KERNELDIR := /lib/modules/2.6.36.1/build
> PWD := $(shell pwd)
> modules:
>     $(MAKE) -C $(KERNELDIR) M=$(PWD) modules
> #modules install:
> #    $(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install
>
> How to change it so the generating result is .bc file not the .o file?
> PLEASE BE KIND AND HELP ME~~
>
>
> --
>             祝好!
>
>   甄凯
> ------------------------------------------------------------------------------------------------------
> 2012-04-18
> ------------------------------------------------------------------------------------------------------
> Name: 甄凯(ZhenKai)
> Homepage:http://www.renren.com/262729393
> Email: zhenkaixd at 126.com or 846227103 at qq.com
> TEL: 15810729006(Beijing)
> Address: Room I-406, Central Building, Tsinghua University, Beijing, China.
> 100084.
>
> At 2012-04-18 21:56:43,15102925731 <zhenkaixd at 126.com> wrote:
>
> Dear Chen,
> I tried the command you told me. It turns out that clang use -I option
> rather then -isystem.
> But after I included the init.h file, it fired at me that "asm/processor.h"
> is not fount. Then I included that file
> using -I option and some other files were said not found! It's like I opened
> a can of worms...
>
> I can still continue to include the file that is said not found. But is it
> the right way ?
>
> Thank you!
>
> clang -O2 -DMODULE -D__KERNEL__ YOUR_MODULE.c \
>>>  -W -Wall -Wstrict-prototypes -Wmissing-prototypes \
>>>  -I /lib/modules/`uname -r`/build/include \
>>>  -emit-llvm -o YOUR_MODULE.bc
>
>
> --
>             祝好!
>
>   甄凯
> ------------------------------------------------------------------------------------------------------
> 2012-04-18
> ------------------------------------------------------------------------------------------------------
> Name: 甄凯(ZhenKai)
> Homepage:http://www.renren.com/262729393
> Email: zhenkaixd at 126.com or 846227103 at qq.com
> TEL: 15810729006(Beijing)
> Address: Room I-406, Central Building, Tsinghua University, Beijing, China.
> 100084.
>
>
> 在 2012-04-16 19:42:46,15102925731 <zhenkaixd at 126.com> 写道:
>>Thanks for your help and patience!
>>
>>Best regards,
>>Zhen Kai
>>At 2012-04-16 15:35:25,"陳韋任" <chenwj at iis.sinica.edu.tw> wrote:
>>>> The thing is that I know the Makefile to complete that task. But what  I want to know the clang command that can do that. Since the makefile will generate a .ko file while I can use the clang command "-O3-emit-llvm" to generate a corresponding .bc file so the pass can be run on that.
>>>
>>>  I guess you can use something like (I am not SURE if Clang support those GCC
>>>flags entirely, try it yourself),
>>>
>>>$ clang -O2 -DMODULE -D__KERNEL__ YOUR_MODULE.c \
>>>  -W -Wall -Wstrict-prototypes -Wmissing-prototypes \
>>>  -isystem /lib/modules/`uname -r`/build/include \
>>>  -emit-llvm -o YOUR_MODULE.bc
>>>
>>>Regards,
>>>chenwj
>>>
>>>--
>>>Wei-Ren Chen (陳韋任)
>>>Computer Systems Lab, Institute of Information Science,
>>>Academia Sinica, Taiwan (R.O.C.)
>>>Tel:886-2-2788-3799 #1667
>>>Homepage: http://people.cs.nctu.edu.tw/~chenwj
>
>
>
>
>
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>



-- 
Alexander Potapenko
Software Engineer
Google Moscow




More information about the llvm-dev mailing list