Merge branch 'misc' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild
Pull misc kbuild updates from Michal Marek: "This is the non-critical part of kbuild for 3.17-rc1: - make help hint to use make -s with make kernelrelease et al. - moved a kbuild document to Documentation/kbuild where it belongs - four new Coccinelle scripts, one dropped and one fixed - new make kselftest target to run various tests on the kernel" * 'misc' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild: kbuild: kselftest - new make target to build and run kernel selftests Coccinelle: Script to replace if and BUG with BUG_ON Coccinelle: Script to detect incorrect argument to sizeof Coccinelle: Script to use ARRAY_SIZE instead of division of two sizeofs Coccinelle: Script to detect cast after memory allocation coccinelle/null: solve parse error Documentation: headers_install.txt is part of kbuild kbuild: make -s should be used with kernelrelease/kernelversion/image_name
This commit is contained in:
commit
899552d6e8
|
@ -1,5 +1,7 @@
|
||||||
00-INDEX
|
00-INDEX
|
||||||
- this file: info on the kernel build process
|
- this file: info on the kernel build process
|
||||||
|
headers_install.txt
|
||||||
|
- how to export Linux headers for use by userspace
|
||||||
kbuild.txt
|
kbuild.txt
|
||||||
- developer information on kbuild
|
- developer information on kbuild
|
||||||
kconfig.txt
|
kconfig.txt
|
||||||
|
|
18
Makefile
18
Makefile
|
@ -1063,6 +1063,13 @@ headers_check: headers_install
|
||||||
$(Q)$(MAKE) $(hdr-inst)=include/uapi HDRCHECK=1
|
$(Q)$(MAKE) $(hdr-inst)=include/uapi HDRCHECK=1
|
||||||
$(Q)$(MAKE) $(hdr-inst)=arch/$(hdr-arch)/include/uapi/asm $(hdr-dst) HDRCHECK=1
|
$(Q)$(MAKE) $(hdr-inst)=arch/$(hdr-arch)/include/uapi/asm $(hdr-dst) HDRCHECK=1
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# Kernel selftest
|
||||||
|
|
||||||
|
PHONY += kselftest
|
||||||
|
kselftest:
|
||||||
|
$(Q)$(MAKE) -C tools/testing/selftests run_tests
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
# Modules
|
# Modules
|
||||||
|
|
||||||
|
@ -1250,9 +1257,9 @@ help:
|
||||||
@echo ' tags/TAGS - Generate tags file for editors'
|
@echo ' tags/TAGS - Generate tags file for editors'
|
||||||
@echo ' cscope - Generate cscope index'
|
@echo ' cscope - Generate cscope index'
|
||||||
@echo ' gtags - Generate GNU GLOBAL index'
|
@echo ' gtags - Generate GNU GLOBAL index'
|
||||||
@echo ' kernelrelease - Output the release version string'
|
@echo ' kernelrelease - Output the release version string (use with make -s)'
|
||||||
@echo ' kernelversion - Output the version stored in Makefile'
|
@echo ' kernelversion - Output the version stored in Makefile (use with make -s)'
|
||||||
@echo ' image_name - Output the image name'
|
@echo ' image_name - Output the image name (use with make -s)'
|
||||||
@echo ' headers_install - Install sanitised kernel headers to INSTALL_HDR_PATH'; \
|
@echo ' headers_install - Install sanitised kernel headers to INSTALL_HDR_PATH'; \
|
||||||
echo ' (default: $(INSTALL_HDR_PATH))'; \
|
echo ' (default: $(INSTALL_HDR_PATH))'; \
|
||||||
echo ''
|
echo ''
|
||||||
|
@ -1266,6 +1273,11 @@ help:
|
||||||
@echo ' headerdep - Detect inclusion cycles in headers'
|
@echo ' headerdep - Detect inclusion cycles in headers'
|
||||||
@$(MAKE) -f $(srctree)/scripts/Makefile.help checker-help
|
@$(MAKE) -f $(srctree)/scripts/Makefile.help checker-help
|
||||||
@echo ''
|
@echo ''
|
||||||
|
@echo 'Kernel selftest'
|
||||||
|
@echo ' kselftest - Build and run kernel selftest (run as root)'
|
||||||
|
@echo ' Build, install, and boot kernel before'
|
||||||
|
@echo ' running kselftest on it'
|
||||||
|
@echo ''
|
||||||
@echo 'Kernel packaging:'
|
@echo 'Kernel packaging:'
|
||||||
@$(MAKE) $(build)=$(package-dir) help
|
@$(MAKE) $(build)=$(package-dir) help
|
||||||
@echo ''
|
@echo ''
|
||||||
|
|
|
@ -0,0 +1,72 @@
|
||||||
|
/// Remove casting the values returned by memory allocation functions
|
||||||
|
/// like kmalloc, kzalloc, kmem_cache_alloc, kmem_cache_zalloc etc.
|
||||||
|
///
|
||||||
|
//# This makes an effort to find cases of casting of values returned by
|
||||||
|
//# kmalloc, kzalloc, kcalloc, kmem_cache_alloc, kmem_cache_zalloc,
|
||||||
|
//# kmem_cache_alloc_node, kmalloc_node and kzalloc_node and removes
|
||||||
|
//# the casting as it is not required. The result in the patch case may
|
||||||
|
//#need some reformatting.
|
||||||
|
//
|
||||||
|
// Confidence: High
|
||||||
|
// Copyright: 2014, Himangi Saraogi GPLv2.
|
||||||
|
// Comments:
|
||||||
|
// Options: --no-includes --include-headers
|
||||||
|
//
|
||||||
|
|
||||||
|
virtual context
|
||||||
|
virtual patch
|
||||||
|
virtual org
|
||||||
|
virtual report
|
||||||
|
|
||||||
|
//----------------------------------------------------------
|
||||||
|
// For context mode
|
||||||
|
//----------------------------------------------------------
|
||||||
|
|
||||||
|
@depends on context@
|
||||||
|
type T;
|
||||||
|
@@
|
||||||
|
|
||||||
|
* (T *)
|
||||||
|
\(kmalloc\|kzalloc\|kcalloc\|kmem_cache_alloc\|kmem_cache_zalloc\|
|
||||||
|
kmem_cache_alloc_node\|kmalloc_node\|kzalloc_node\)(...)
|
||||||
|
|
||||||
|
//----------------------------------------------------------
|
||||||
|
// For patch mode
|
||||||
|
//----------------------------------------------------------
|
||||||
|
|
||||||
|
@depends on patch@
|
||||||
|
type T;
|
||||||
|
@@
|
||||||
|
|
||||||
|
- (T *)
|
||||||
|
(\(kmalloc\|kzalloc\|kcalloc\|kmem_cache_alloc\|kmem_cache_zalloc\|
|
||||||
|
kmem_cache_alloc_node\|kmalloc_node\|kzalloc_node\)(...))
|
||||||
|
|
||||||
|
//----------------------------------------------------------
|
||||||
|
// For org and report mode
|
||||||
|
//----------------------------------------------------------
|
||||||
|
|
||||||
|
@r depends on org || report@
|
||||||
|
type T;
|
||||||
|
position p;
|
||||||
|
@@
|
||||||
|
|
||||||
|
(T@p *)\(kmalloc\|kzalloc\|kcalloc\|kmem_cache_alloc\|kmem_cache_zalloc\|
|
||||||
|
kmem_cache_alloc_node\|kmalloc_node\|kzalloc_node\)(...)
|
||||||
|
|
||||||
|
@script:python depends on org@
|
||||||
|
p << r.p;
|
||||||
|
t << r.T;
|
||||||
|
@@
|
||||||
|
|
||||||
|
coccilib.org.print_safe_todo(p[0], t)
|
||||||
|
|
||||||
|
@script:python depends on report@
|
||||||
|
p << r.p;
|
||||||
|
t << r.T;
|
||||||
|
@@
|
||||||
|
|
||||||
|
msg="WARNING: casting value returned by memory allocation function to (%s *) is useless." % (t)
|
||||||
|
coccilib.report.print_report(p[0], msg)
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,87 @@
|
||||||
|
/// Use ARRAY_SIZE instead of dividing sizeof array with sizeof an element
|
||||||
|
///
|
||||||
|
//# This makes an effort to find cases where ARRAY_SIZE can be used such as
|
||||||
|
//# where there is a division of sizeof the array by the sizeof its first
|
||||||
|
//# element or by any indexed element or the element type. It replaces the
|
||||||
|
//# division of the two sizeofs by ARRAY_SIZE.
|
||||||
|
//
|
||||||
|
// Confidence: High
|
||||||
|
// Copyright: (C) 2014 Himangi Saraogi. GPLv2.
|
||||||
|
// Comments:
|
||||||
|
// Options: --no-includes --include-headers
|
||||||
|
|
||||||
|
virtual patch
|
||||||
|
virtual context
|
||||||
|
virtual org
|
||||||
|
virtual report
|
||||||
|
|
||||||
|
@i@
|
||||||
|
@@
|
||||||
|
|
||||||
|
#include <linux/kernel.h>
|
||||||
|
|
||||||
|
//----------------------------------------------------------
|
||||||
|
// For context mode
|
||||||
|
//----------------------------------------------------------
|
||||||
|
|
||||||
|
@depends on i&&context@
|
||||||
|
type T;
|
||||||
|
T[] E;
|
||||||
|
@@
|
||||||
|
(
|
||||||
|
* (sizeof(E)/sizeof(*E))
|
||||||
|
|
|
||||||
|
* (sizeof(E)/sizeof(E[...]))
|
||||||
|
|
|
||||||
|
* (sizeof(E)/sizeof(T))
|
||||||
|
)
|
||||||
|
|
||||||
|
//----------------------------------------------------------
|
||||||
|
// For patch mode
|
||||||
|
//----------------------------------------------------------
|
||||||
|
|
||||||
|
@depends on i&&patch@
|
||||||
|
type T;
|
||||||
|
T[] E;
|
||||||
|
@@
|
||||||
|
(
|
||||||
|
- (sizeof(E)/sizeof(*E))
|
||||||
|
+ ARRAY_SIZE(E)
|
||||||
|
|
|
||||||
|
- (sizeof(E)/sizeof(E[...]))
|
||||||
|
+ ARRAY_SIZE(E)
|
||||||
|
|
|
||||||
|
- (sizeof(E)/sizeof(T))
|
||||||
|
+ ARRAY_SIZE(E)
|
||||||
|
)
|
||||||
|
|
||||||
|
//----------------------------------------------------------
|
||||||
|
// For org and report mode
|
||||||
|
//----------------------------------------------------------
|
||||||
|
|
||||||
|
@r@
|
||||||
|
type T;
|
||||||
|
T[] E;
|
||||||
|
position p;
|
||||||
|
@@
|
||||||
|
(
|
||||||
|
(sizeof(E)@p /sizeof(*E))
|
||||||
|
|
|
||||||
|
(sizeof(E)@p /sizeof(E[...]))
|
||||||
|
|
|
||||||
|
(sizeof(E)@p /sizeof(T))
|
||||||
|
)
|
||||||
|
|
||||||
|
@script:python depends on i&&org@
|
||||||
|
p << r.p;
|
||||||
|
@@
|
||||||
|
|
||||||
|
coccilib.org.print_todo(p[0], "WARNING should use ARRAY_SIZE")
|
||||||
|
|
||||||
|
@script:python depends on i&&report@
|
||||||
|
p << r.p;
|
||||||
|
@@
|
||||||
|
|
||||||
|
msg="WARNING: Use ARRAY_SIZE"
|
||||||
|
coccilib.report.print_report(p[0], msg)
|
||||||
|
|
|
@ -0,0 +1,76 @@
|
||||||
|
/// Use ARRAY_SIZE instead of dividing sizeof array with sizeof an element
|
||||||
|
///
|
||||||
|
//# This makes an effort to find cases where the argument to sizeof is wrong
|
||||||
|
//# in memory allocation functions by checking the type of the allocated memory
|
||||||
|
//# when it is a double pointer and ensuring the sizeof argument takes a pointer
|
||||||
|
//# to the the memory being allocated. There are false positives in cases the
|
||||||
|
//# sizeof argument is not used in constructing the return value. The result
|
||||||
|
//# may need some reformatting.
|
||||||
|
//
|
||||||
|
// Confidence: Moderate
|
||||||
|
// Copyright: (C) 2014 Himangi Saraogi. GPLv2.
|
||||||
|
// Comments:
|
||||||
|
// Options:
|
||||||
|
|
||||||
|
virtual patch
|
||||||
|
virtual context
|
||||||
|
virtual org
|
||||||
|
virtual report
|
||||||
|
|
||||||
|
//----------------------------------------------------------
|
||||||
|
// For context mode
|
||||||
|
//----------------------------------------------------------
|
||||||
|
|
||||||
|
@depends on context disable sizeof_type_expr@
|
||||||
|
type T;
|
||||||
|
T **x;
|
||||||
|
@@
|
||||||
|
|
||||||
|
x =
|
||||||
|
<+...sizeof(
|
||||||
|
* T
|
||||||
|
)...+>
|
||||||
|
|
||||||
|
//----------------------------------------------------------
|
||||||
|
// For patch mode
|
||||||
|
//----------------------------------------------------------
|
||||||
|
|
||||||
|
@depends on patch disable sizeof_type_expr@
|
||||||
|
type T;
|
||||||
|
T **x;
|
||||||
|
@@
|
||||||
|
|
||||||
|
x =
|
||||||
|
<+...sizeof(
|
||||||
|
- T
|
||||||
|
+ *x
|
||||||
|
)...+>
|
||||||
|
|
||||||
|
//----------------------------------------------------------
|
||||||
|
// For org and report mode
|
||||||
|
//----------------------------------------------------------
|
||||||
|
|
||||||
|
@r disable sizeof_type_expr@
|
||||||
|
type T;
|
||||||
|
T **x;
|
||||||
|
position p;
|
||||||
|
@@
|
||||||
|
|
||||||
|
x =
|
||||||
|
<+...sizeof(
|
||||||
|
T@p
|
||||||
|
)...+>
|
||||||
|
|
||||||
|
@script:python depends on org@
|
||||||
|
p << r.p;
|
||||||
|
@@
|
||||||
|
|
||||||
|
coccilib.org.print_todo(p[0], "WARNING sizeof argument should be pointer type, not structure type")
|
||||||
|
|
||||||
|
@script:python depends on report@
|
||||||
|
p << r.p;
|
||||||
|
@@
|
||||||
|
|
||||||
|
msg="WARNING: Use correct pointer type argument for sizeof"
|
||||||
|
coccilib.report.print_report(p[0], msg)
|
||||||
|
|
|
@ -1,20 +1,17 @@
|
||||||
|
/// Use BUG_ON instead of a if condition followed by BUG.
|
||||||
///
|
///
|
||||||
/// Casting (void *) value returned by kmalloc is useless
|
//# This makes an effort to find cases where BUG() follows an if
|
||||||
/// as mentioned in Documentation/CodingStyle, Chap 14.
|
//# condition on an expression and replaces the if condition and BUG()
|
||||||
///
|
//# with a BUG_ON having the conditional expression of the if statement
|
||||||
|
//# as argument.
|
||||||
|
//
|
||||||
// Confidence: High
|
// Confidence: High
|
||||||
// Copyright: 2009,2010 Nicolas Palix, DIKU. GPLv2.
|
// Copyright: (C) 2014 Himangi Saraogi. GPLv2.
|
||||||
// URL: http://coccinelle.lip6.fr/
|
// Comments:
|
||||||
// Options: --no-includes --include-headers
|
// Options: --no-includes, --include-headers
|
||||||
//
|
|
||||||
// Keywords: kmalloc, kzalloc, kcalloc
|
|
||||||
// Version min: < 2.6.12 kmalloc
|
|
||||||
// Version min: < 2.6.12 kcalloc
|
|
||||||
// Version min: 2.6.14 kzalloc
|
|
||||||
//
|
|
||||||
|
|
||||||
virtual context
|
|
||||||
virtual patch
|
virtual patch
|
||||||
|
virtual context
|
||||||
virtual org
|
virtual org
|
||||||
virtual report
|
virtual report
|
||||||
|
|
||||||
|
@ -23,45 +20,43 @@ virtual report
|
||||||
//----------------------------------------------------------
|
//----------------------------------------------------------
|
||||||
|
|
||||||
@depends on context@
|
@depends on context@
|
||||||
type T;
|
expression e;
|
||||||
@@
|
@@
|
||||||
|
|
||||||
* (T *)
|
*if (e) BUG();
|
||||||
\(kmalloc\|kzalloc\|kcalloc\)(...)
|
|
||||||
|
|
||||||
//----------------------------------------------------------
|
//----------------------------------------------------------
|
||||||
// For patch mode
|
// For patch mode
|
||||||
//----------------------------------------------------------
|
//----------------------------------------------------------
|
||||||
|
|
||||||
@depends on patch@
|
@depends on patch@
|
||||||
type T;
|
expression e;
|
||||||
@@
|
@@
|
||||||
|
|
||||||
- (T *)
|
-if (e) BUG();
|
||||||
\(kmalloc\|kzalloc\|kcalloc\)(...)
|
+BUG_ON(e);
|
||||||
|
|
||||||
//----------------------------------------------------------
|
//----------------------------------------------------------
|
||||||
// For org and report mode
|
// For org and report mode
|
||||||
//----------------------------------------------------------
|
//----------------------------------------------------------
|
||||||
|
|
||||||
@r depends on org || report@
|
@r@
|
||||||
type T;
|
expression e;
|
||||||
position p;
|
position p;
|
||||||
@@
|
@@
|
||||||
|
|
||||||
(T@p *)\(kmalloc\|kzalloc\|kcalloc\)(...)
|
if (e) BUG@p ();
|
||||||
|
|
||||||
@script:python depends on org@
|
@script:python depends on org@
|
||||||
p << r.p;
|
p << r.p;
|
||||||
t << r.T;
|
|
||||||
@@
|
@@
|
||||||
|
|
||||||
coccilib.org.print_safe_todo(p[0], t)
|
coccilib.org.print_todo(p[0], "WARNING use BUG_ON")
|
||||||
|
|
||||||
@script:python depends on report@
|
@script:python depends on report@
|
||||||
p << r.p;
|
p << r.p;
|
||||||
t << r.T;
|
|
||||||
@@
|
@@
|
||||||
|
|
||||||
msg="WARNING: casting value returned by k[cmz]alloc to (%s *) is useless." % (t)
|
msg="WARNING: Use BUG_ON"
|
||||||
coccilib.report.print_report(p[0], msg)
|
coccilib.report.print_report(p[0], msg)
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
// Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. GPLv2.
|
// Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. GPLv2.
|
||||||
// Copyright: (C) 2012 Gilles Muller, INRIA/LiP6. GPLv2.
|
// Copyright: (C) 2012 Gilles Muller, INRIA/LiP6. GPLv2.
|
||||||
// URL: http://coccinelle.lip6.fr/
|
// URL: http://coccinelle.lip6.fr/
|
||||||
// Comments:
|
// Comments: Requires Coccinelle version 1.0.0-rc20 or later
|
||||||
// Options:
|
// Options:
|
||||||
|
|
||||||
virtual patch
|
virtual patch
|
||||||
|
@ -19,6 +19,7 @@ virtual org
|
||||||
virtual report
|
virtual report
|
||||||
|
|
||||||
@initialize:ocaml@
|
@initialize:ocaml@
|
||||||
|
@@
|
||||||
let negtable = Hashtbl.create 101
|
let negtable = Hashtbl.create 101
|
||||||
|
|
||||||
@depends on patch@
|
@depends on patch@
|
||||||
|
|
Loading…
Reference in New Issue