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:
Коммит
899552d6e8
|
@ -1,5 +1,7 @@
|
|||
00-INDEX
|
||||
- this file: info on the kernel build process
|
||||
headers_install.txt
|
||||
- how to export Linux headers for use by userspace
|
||||
kbuild.txt
|
||||
- developer information on kbuild
|
||||
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)=arch/$(hdr-arch)/include/uapi/asm $(hdr-dst) HDRCHECK=1
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Kernel selftest
|
||||
|
||||
PHONY += kselftest
|
||||
kselftest:
|
||||
$(Q)$(MAKE) -C tools/testing/selftests run_tests
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Modules
|
||||
|
||||
|
@ -1250,9 +1257,9 @@ help:
|
|||
@echo ' tags/TAGS - Generate tags file for editors'
|
||||
@echo ' cscope - Generate cscope index'
|
||||
@echo ' gtags - Generate GNU GLOBAL index'
|
||||
@echo ' kernelrelease - Output the release version string'
|
||||
@echo ' kernelversion - Output the version stored in Makefile'
|
||||
@echo ' image_name - Output the image name'
|
||||
@echo ' kernelrelease - Output the release version string (use with make -s)'
|
||||
@echo ' kernelversion - Output the version stored in Makefile (use with make -s)'
|
||||
@echo ' image_name - Output the image name (use with make -s)'
|
||||
@echo ' headers_install - Install sanitised kernel headers to INSTALL_HDR_PATH'; \
|
||||
echo ' (default: $(INSTALL_HDR_PATH))'; \
|
||||
echo ''
|
||||
|
@ -1266,6 +1273,11 @@ help:
|
|||
@echo ' headerdep - Detect inclusion cycles in headers'
|
||||
@$(MAKE) -f $(srctree)/scripts/Makefile.help checker-help
|
||||
@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:'
|
||||
@$(MAKE) $(build)=$(package-dir) help
|
||||
@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
|
||||
/// as mentioned in Documentation/CodingStyle, Chap 14.
|
||||
///
|
||||
//# This makes an effort to find cases where BUG() follows an if
|
||||
//# 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
|
||||
// Copyright: 2009,2010 Nicolas Palix, DIKU. GPLv2.
|
||||
// URL: http://coccinelle.lip6.fr/
|
||||
// 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
|
||||
//
|
||||
// Copyright: (C) 2014 Himangi Saraogi. GPLv2.
|
||||
// Comments:
|
||||
// Options: --no-includes, --include-headers
|
||||
|
||||
virtual context
|
||||
virtual patch
|
||||
virtual context
|
||||
virtual org
|
||||
virtual report
|
||||
|
||||
|
@ -23,45 +20,43 @@ virtual report
|
|||
//----------------------------------------------------------
|
||||
|
||||
@depends on context@
|
||||
type T;
|
||||
expression e;
|
||||
@@
|
||||
|
||||
* (T *)
|
||||
\(kmalloc\|kzalloc\|kcalloc\)(...)
|
||||
*if (e) BUG();
|
||||
|
||||
//----------------------------------------------------------
|
||||
// For patch mode
|
||||
//----------------------------------------------------------
|
||||
|
||||
@depends on patch@
|
||||
type T;
|
||||
expression e;
|
||||
@@
|
||||
|
||||
- (T *)
|
||||
\(kmalloc\|kzalloc\|kcalloc\)(...)
|
||||
-if (e) BUG();
|
||||
+BUG_ON(e);
|
||||
|
||||
//----------------------------------------------------------
|
||||
// For org and report mode
|
||||
//----------------------------------------------------------
|
||||
|
||||
@r depends on org || report@
|
||||
type T;
|
||||
@r@
|
||||
expression e;
|
||||
position p;
|
||||
@@
|
||||
|
||||
(T@p *)\(kmalloc\|kzalloc\|kcalloc\)(...)
|
||||
if (e) BUG@p ();
|
||||
|
||||
@script:python depends on org@
|
||||
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@
|
||||
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)
|
||||
|
|
@ -10,7 +10,7 @@
|
|||
// Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. GPLv2.
|
||||
// Copyright: (C) 2012 Gilles Muller, INRIA/LiP6. GPLv2.
|
||||
// URL: http://coccinelle.lip6.fr/
|
||||
// Comments:
|
||||
// Comments: Requires Coccinelle version 1.0.0-rc20 or later
|
||||
// Options:
|
||||
|
||||
virtual patch
|
||||
|
@ -19,6 +19,7 @@ virtual org
|
|||
virtual report
|
||||
|
||||
@initialize:ocaml@
|
||||
@@
|
||||
let negtable = Hashtbl.create 101
|
||||
|
||||
@depends on patch@
|
||||
|
|
Загрузка…
Ссылка в новой задаче