How to configure clang_complete to develop Linux kernel module?

I tried to get gcc to reset the inclusion paths and .clang_complete now looks like this:

 -std=gnu89 -nostdinc -I/usr/src/linux-headers-3.0.0-16-generic/arch/x86/include -I/lib/modules/3.0.0-16-generic/build/arch/x86/include/generated -I/lib/modules/3.0.0-16-generic/build/include -I/lib/modules/3.0.0-16-generic/build/ubuntu/include -I/usr/lib/gcc/i686-linux-gnu/4.6.1/include -D__KERNEL__ -DMODULE 

But libclang still complains about a lot of errors and warnings when editing a simple kernel hello module.

 1 /lib/modules/3.0.0-16-generic/build/include/linux/list.h|24 col 42 warning| declaration of 'struct list_head' will not be visible outside of this function 2 /lib/modules/3.0.0-16-generic/build/include/linux/list.h|26 col 6 error| incomplete definition of type 'struct list_head' 3 /lib/modules/3.0.0-16-generic/build/include/linux/list.h|24 col 42 info| forward declaration of 'struct list_head' 4 /lib/modules/3.0.0-16-generic/build/include/linux/list.h|27 col 6 error| incomplete definition of type 'struct list_head' 5 /lib/modules/3.0.0-16-generic/build/include/linux/list.h|24 col 42 info| forward declaration of 'struct list_head' 6 /lib/modules/3.0.0-16-generic/build/include/linux/list.h|37 col 38 warning| declaration of 'struct list_head' will not be visible outside of this function ... 

the definition of struct list_head from <linux/types.h> already included <linux/list.h> . Both are inside /lib/modules/3.0.0-16-generic/build/include

+4
source share
1 answer

cc_args.py bundled with clang_complete may be useful to you. It should create a valid .clang_complete file. Unfortunately (I just tested it and I will try to fix it), it does not work here (the .clang_complete file cannot be created).

However, by changing the script and its result, I was able to create a valid .clang_complete file:

 -D__KERNEL__ -DCONFIG_AS_CFI=1 -DCONFIG_AS_CFI_SIGNAL_FRAME=1 -DCONFIG_AS_CFI_SECTIONS=1 -DCONFIG_AS_FXSAVEQ=1 -nostdinc -I/usr/lib/gcc/x86_64-unknown-linux-gnu/4.6.3/include -I/usr/src/linux-3.2.12-1-ARCH/arch/x86/include -I/usr/src/linux-3.2.12-1-ARCH/arch/x86/include/generated -I/usr/src/linux-3.2.12-1-ARCH/include -DMODULE -DKBUILD_STR(s)=#s -include /usr/src/linux-3.2.12-1-ARCH/include/linux/kconfig.h 

With this .clang_complete, for more information about this, there is only one error related to __kfree_rcu: https://lkml.org/lkml/2012/1/12/2

+4
source

Source: https://habr.com/ru/post/1402882/


All Articles