Merge branch 'misc' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild
Pull non-critical part of kbuild from Michal Marek: - New semantic patches, make coccicheck M= fix - make gtags speedup - make tags/TAGS always removes struct forward declarations - make deb-pkg fixes (some patches are still pending, I know) - scripts/patch-kernel fix from the last user of this script ;) * 'misc' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild: scripts/patch-kernel: digest kernel.org hosted .xz patches scripts/coccinelle/api/ptr_ret.cocci: semantic patch for ptr_err scripts: refactor remove structure forward declarations kbuild: incremental tags update for GNU Global coccinelle: semantic patch for bool issues coccinelle: semantic patch to check for PTR_ERR after reassignment coccinelle: semantic patch converting 0 test to null test coccinelle: semantic patch for missing iounmap coccinelle: semantic patch for missing clk_put kbuild: Fix out-of-tree build for 'make deb-pkg' kbuild: Only build linux-image package for UML kbuild: Fix link to headers in 'make deb-pkg' coccicheck: change handling of C={1,2} when M= is set
This commit is contained in:
Коммит
a7697b945e
|
@ -0,0 +1,70 @@
|
||||||
|
///
|
||||||
|
/// Use PTR_RET rather than if(IS_ERR(...)) + PTR_ERR
|
||||||
|
///
|
||||||
|
// Confidence: High
|
||||||
|
// Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. GPLv2.
|
||||||
|
// Copyright: (C) 2012 Gilles Muller, INRIA/LiP6. GPLv2.
|
||||||
|
// URL: http://coccinelle.lip6.fr/
|
||||||
|
// Options: -no_includes -include_headers
|
||||||
|
//
|
||||||
|
// Keywords: ERR_PTR, PTR_ERR, PTR_RET
|
||||||
|
// Version min: 2.6.39
|
||||||
|
//
|
||||||
|
|
||||||
|
virtual context
|
||||||
|
virtual patch
|
||||||
|
virtual org
|
||||||
|
virtual report
|
||||||
|
|
||||||
|
@depends on patch@
|
||||||
|
expression ptr;
|
||||||
|
@@
|
||||||
|
|
||||||
|
- if (IS_ERR(ptr)) return PTR_ERR(ptr); else return 0;
|
||||||
|
+ return PTR_RET(ptr);
|
||||||
|
|
||||||
|
@depends on patch@
|
||||||
|
expression ptr;
|
||||||
|
@@
|
||||||
|
|
||||||
|
- if (IS_ERR(ptr)) return PTR_ERR(ptr); return 0;
|
||||||
|
+ return PTR_RET(ptr);
|
||||||
|
|
||||||
|
@r1 depends on !patch@
|
||||||
|
expression ptr;
|
||||||
|
position p1;
|
||||||
|
@@
|
||||||
|
|
||||||
|
* if@p1 (IS_ERR(ptr)) return PTR_ERR(ptr); else return 0;
|
||||||
|
|
||||||
|
@r2 depends on !patch@
|
||||||
|
expression ptr;
|
||||||
|
position p2;
|
||||||
|
@@
|
||||||
|
|
||||||
|
* if@p2 (IS_ERR(ptr)) return PTR_ERR(ptr); return 0;
|
||||||
|
|
||||||
|
@script:python depends on org@
|
||||||
|
p << r1.p1;
|
||||||
|
@@
|
||||||
|
|
||||||
|
coccilib.org.print_todo(p[0], "WARNING: PTR_RET can be used")
|
||||||
|
|
||||||
|
|
||||||
|
@script:python depends on org@
|
||||||
|
p << r2.p2;
|
||||||
|
@@
|
||||||
|
|
||||||
|
coccilib.org.print_todo(p[0], "WARNING: PTR_RET can be used")
|
||||||
|
|
||||||
|
@script:python depends on report@
|
||||||
|
p << r1.p1;
|
||||||
|
@@
|
||||||
|
|
||||||
|
coccilib.report.print_report(p[0], "WARNING: PTR_RET can be used")
|
||||||
|
|
||||||
|
@script:python depends on report@
|
||||||
|
p << r2.p2;
|
||||||
|
@@
|
||||||
|
|
||||||
|
coccilib.report.print_report(p[0], "WARNING: PTR_RET can be used")
|
|
@ -0,0 +1,67 @@
|
||||||
|
/// Find missing clk_puts.
|
||||||
|
///
|
||||||
|
//# This only signals a missing clk_put when there is a clk_put later
|
||||||
|
//# in the same function.
|
||||||
|
//# False positives can be due to loops.
|
||||||
|
//
|
||||||
|
// Confidence: Moderate
|
||||||
|
// Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. GPLv2.
|
||||||
|
// Copyright: (C) 2012 Gilles Muller, INRIA/LiP6. GPLv2.
|
||||||
|
// URL: http://coccinelle.lip6.fr/
|
||||||
|
// Comments:
|
||||||
|
// Options:
|
||||||
|
|
||||||
|
virtual context
|
||||||
|
virtual org
|
||||||
|
virtual report
|
||||||
|
|
||||||
|
@clk@
|
||||||
|
expression e;
|
||||||
|
statement S,S1;
|
||||||
|
int ret;
|
||||||
|
position p1,p2,p3;
|
||||||
|
@@
|
||||||
|
|
||||||
|
e = clk_get@p1(...)
|
||||||
|
... when != clk_put(e)
|
||||||
|
if (<+...e...+>) S
|
||||||
|
... when any
|
||||||
|
when != clk_put(e)
|
||||||
|
when != if (...) { ... clk_put(e); ... }
|
||||||
|
(
|
||||||
|
if (ret == 0) S1
|
||||||
|
|
|
||||||
|
if (...)
|
||||||
|
{ ...
|
||||||
|
return 0; }
|
||||||
|
|
|
||||||
|
if (...)
|
||||||
|
{ ...
|
||||||
|
return <+...e...+>; }
|
||||||
|
|
|
||||||
|
*if@p2 (...)
|
||||||
|
{ ... when != clk_put(e)
|
||||||
|
when forall
|
||||||
|
return@p3 ...; }
|
||||||
|
)
|
||||||
|
... when any
|
||||||
|
clk_put(e);
|
||||||
|
|
||||||
|
@script:python depends on org@
|
||||||
|
p1 << clk.p1;
|
||||||
|
p2 << clk.p2;
|
||||||
|
p3 << clk.p3;
|
||||||
|
@@
|
||||||
|
|
||||||
|
cocci.print_main("clk_get",p1)
|
||||||
|
cocci.print_secs("if",p2)
|
||||||
|
cocci.print_secs("needed clk_put",p3)
|
||||||
|
|
||||||
|
@script:python depends on report@
|
||||||
|
p1 << clk.p1;
|
||||||
|
p2 << clk.p2;
|
||||||
|
p3 << clk.p3;
|
||||||
|
@@
|
||||||
|
|
||||||
|
msg = "ERROR: missing clk_put; clk_get on line %s and execution via conditional on line %s" % (p1[0].line,p2[0].line)
|
||||||
|
coccilib.report.print_report(p3[0],msg)
|
|
@ -0,0 +1,67 @@
|
||||||
|
/// Find missing iounmaps.
|
||||||
|
///
|
||||||
|
//# This only signals a missing iounmap when there is an iounmap later
|
||||||
|
//# in the same function.
|
||||||
|
//# False positives can be due to loops.
|
||||||
|
//
|
||||||
|
// Confidence: Moderate
|
||||||
|
// Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. GPLv2.
|
||||||
|
// Copyright: (C) 2012 Gilles Muller, INRIA/LiP6. GPLv2.
|
||||||
|
// URL: http://coccinelle.lip6.fr/
|
||||||
|
// Comments:
|
||||||
|
// Options:
|
||||||
|
|
||||||
|
virtual context
|
||||||
|
virtual org
|
||||||
|
virtual report
|
||||||
|
|
||||||
|
@iom@
|
||||||
|
expression e;
|
||||||
|
statement S,S1;
|
||||||
|
int ret;
|
||||||
|
position p1,p2,p3;
|
||||||
|
@@
|
||||||
|
|
||||||
|
e = \(ioremap@p1\|ioremap_nocache@p1\)(...)
|
||||||
|
... when != iounmap(e)
|
||||||
|
if (<+...e...+>) S
|
||||||
|
... when any
|
||||||
|
when != iounmap(e)
|
||||||
|
when != if (...) { ... iounmap(e); ... }
|
||||||
|
(
|
||||||
|
if (ret == 0) S1
|
||||||
|
|
|
||||||
|
if (...)
|
||||||
|
{ ...
|
||||||
|
return 0; }
|
||||||
|
|
|
||||||
|
if (...)
|
||||||
|
{ ...
|
||||||
|
return <+...e...+>; }
|
||||||
|
|
|
||||||
|
*if@p2 (...)
|
||||||
|
{ ... when != iounmap(e)
|
||||||
|
when forall
|
||||||
|
return@p3 ...; }
|
||||||
|
)
|
||||||
|
... when any
|
||||||
|
iounmap(e);
|
||||||
|
|
||||||
|
@script:python depends on org@
|
||||||
|
p1 << iom.p1;
|
||||||
|
p2 << iom.p2;
|
||||||
|
p3 << iom.p3;
|
||||||
|
@@
|
||||||
|
|
||||||
|
cocci.print_main("ioremap",p1)
|
||||||
|
cocci.print_secs("if",p2)
|
||||||
|
cocci.print_secs("needed iounmap",p3)
|
||||||
|
|
||||||
|
@script:python depends on report@
|
||||||
|
p1 << iom.p1;
|
||||||
|
p2 << iom.p2;
|
||||||
|
p3 << iom.p3;
|
||||||
|
@@
|
||||||
|
|
||||||
|
msg = "ERROR: missing iounmap; ioremap on line %s and execution via conditional on line %s" % (p1[0].line,p2[0].line)
|
||||||
|
coccilib.report.print_report(p3[0],msg)
|
|
@ -0,0 +1,178 @@
|
||||||
|
/// Bool initializations should use true and false. Bool tests don't need
|
||||||
|
/// comparisons. Based on contributions from Joe Perches, Rusty Russell
|
||||||
|
/// and Bruce W Allan.
|
||||||
|
///
|
||||||
|
// Confidence: High
|
||||||
|
// Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. GPLv2.
|
||||||
|
// Copyright: (C) 2012 Gilles Muller, INRIA/LiP6. GPLv2.
|
||||||
|
// URL: http://coccinelle.lip6.fr/
|
||||||
|
// Options: -include_headers
|
||||||
|
|
||||||
|
virtual patch
|
||||||
|
virtual context
|
||||||
|
virtual org
|
||||||
|
virtual report
|
||||||
|
|
||||||
|
@depends on patch@
|
||||||
|
bool t;
|
||||||
|
symbol true;
|
||||||
|
symbol false;
|
||||||
|
@@
|
||||||
|
|
||||||
|
(
|
||||||
|
- t == true
|
||||||
|
+ t
|
||||||
|
|
|
||||||
|
- true == t
|
||||||
|
+ t
|
||||||
|
|
|
||||||
|
- t != true
|
||||||
|
+ !t
|
||||||
|
|
|
||||||
|
- true != t
|
||||||
|
+ !t
|
||||||
|
|
|
||||||
|
- t == false
|
||||||
|
+ !t
|
||||||
|
|
|
||||||
|
- false == t
|
||||||
|
+ !t
|
||||||
|
|
|
||||||
|
- t != false
|
||||||
|
+ t
|
||||||
|
|
|
||||||
|
- false != t
|
||||||
|
+ t
|
||||||
|
)
|
||||||
|
|
||||||
|
@depends on patch disable is_zero, isnt_zero@
|
||||||
|
bool t;
|
||||||
|
@@
|
||||||
|
|
||||||
|
(
|
||||||
|
- t == 1
|
||||||
|
+ t
|
||||||
|
|
|
||||||
|
- t != 1
|
||||||
|
+ !t
|
||||||
|
|
|
||||||
|
- t == 0
|
||||||
|
+ !t
|
||||||
|
|
|
||||||
|
- t != 0
|
||||||
|
+ t
|
||||||
|
)
|
||||||
|
|
||||||
|
@depends on patch@
|
||||||
|
bool b;
|
||||||
|
@@
|
||||||
|
(
|
||||||
|
b =
|
||||||
|
- 0
|
||||||
|
+ false
|
||||||
|
|
|
||||||
|
b =
|
||||||
|
- 1
|
||||||
|
+ true
|
||||||
|
)
|
||||||
|
|
||||||
|
// ---------------------------------------------------------------------
|
||||||
|
|
||||||
|
@r1 depends on !patch@
|
||||||
|
bool t;
|
||||||
|
position p;
|
||||||
|
@@
|
||||||
|
|
||||||
|
(
|
||||||
|
* t@p == true
|
||||||
|
|
|
||||||
|
* true == t@p
|
||||||
|
|
|
||||||
|
* t@p != true
|
||||||
|
|
|
||||||
|
* true != t@p
|
||||||
|
|
|
||||||
|
* t@p == false
|
||||||
|
|
|
||||||
|
* false == t@p
|
||||||
|
|
|
||||||
|
* t@p != false
|
||||||
|
|
|
||||||
|
* false != t@p
|
||||||
|
)
|
||||||
|
|
||||||
|
@r2 depends on !patch disable is_zero, isnt_zero@
|
||||||
|
bool t;
|
||||||
|
position p;
|
||||||
|
@@
|
||||||
|
|
||||||
|
(
|
||||||
|
* t@p == 1
|
||||||
|
|
|
||||||
|
* t@p != 1
|
||||||
|
|
|
||||||
|
* t@p == 0
|
||||||
|
|
|
||||||
|
* t@p != 0
|
||||||
|
)
|
||||||
|
|
||||||
|
@r3 depends on !patch@
|
||||||
|
bool b;
|
||||||
|
position p1,p2;
|
||||||
|
constant c;
|
||||||
|
@@
|
||||||
|
(
|
||||||
|
*b@p1 = 0
|
||||||
|
|
|
||||||
|
*b@p1 = 1
|
||||||
|
|
|
||||||
|
*b@p2 = c
|
||||||
|
)
|
||||||
|
|
||||||
|
@script:python depends on org@
|
||||||
|
p << r1.p;
|
||||||
|
@@
|
||||||
|
|
||||||
|
cocci.print_main("WARNING: Comparison to bool",p)
|
||||||
|
|
||||||
|
@script:python depends on org@
|
||||||
|
p << r2.p;
|
||||||
|
@@
|
||||||
|
|
||||||
|
cocci.print_main("WARNING: Comparison of bool to 0/1",p)
|
||||||
|
|
||||||
|
@script:python depends on org@
|
||||||
|
p1 << r3.p1;
|
||||||
|
@@
|
||||||
|
|
||||||
|
cocci.print_main("WARNING: Assignment of bool to 0/1",p1)
|
||||||
|
|
||||||
|
@script:python depends on org@
|
||||||
|
p2 << r3.p2;
|
||||||
|
@@
|
||||||
|
|
||||||
|
cocci.print_main("ERROR: Assignment of bool to non-0/1 constant",p2)
|
||||||
|
|
||||||
|
@script:python depends on report@
|
||||||
|
p << r1.p;
|
||||||
|
@@
|
||||||
|
|
||||||
|
coccilib.report.print_report(p[0],"WARNING: Comparison to bool")
|
||||||
|
|
||||||
|
@script:python depends on report@
|
||||||
|
p << r2.p;
|
||||||
|
@@
|
||||||
|
|
||||||
|
coccilib.report.print_report(p[0],"WARNING: Comparison of bool to 0/1")
|
||||||
|
|
||||||
|
@script:python depends on report@
|
||||||
|
p1 << r3.p1;
|
||||||
|
@@
|
||||||
|
|
||||||
|
coccilib.report.print_report(p1[0],"WARNING: Assignment of bool to 0/1")
|
||||||
|
|
||||||
|
@script:python depends on report@
|
||||||
|
p2 << r3.p2;
|
||||||
|
@@
|
||||||
|
|
||||||
|
coccilib.report.print_report(p2[0],"ERROR: Assignment of bool to non-0/1 constant")
|
|
@ -0,0 +1,41 @@
|
||||||
|
/// PTR_ERR should be applied before its argument is reassigned, typically
|
||||||
|
/// to NULL
|
||||||
|
///
|
||||||
|
// Confidence: High
|
||||||
|
// Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. GPLv2.
|
||||||
|
// Copyright: (C) 2012 Gilles Muller, INRIA/LiP6. GPLv2.
|
||||||
|
// URL: http://coccinelle.lip6.fr/
|
||||||
|
// Comments:
|
||||||
|
// Options: -no_includes -include_headers
|
||||||
|
|
||||||
|
virtual org
|
||||||
|
virtual report
|
||||||
|
virtual context
|
||||||
|
|
||||||
|
@r exists@
|
||||||
|
expression e,e1;
|
||||||
|
constant c;
|
||||||
|
position p1,p2;
|
||||||
|
@@
|
||||||
|
|
||||||
|
*e@p1 = c
|
||||||
|
... when != e = e1
|
||||||
|
when != &e
|
||||||
|
when != true IS_ERR(e)
|
||||||
|
*PTR_ERR@p2(e)
|
||||||
|
|
||||||
|
@script:python depends on org@
|
||||||
|
p1 << r.p1;
|
||||||
|
p2 << r.p2;
|
||||||
|
@@
|
||||||
|
|
||||||
|
cocci.print_main("PTR_ERR",p2)
|
||||||
|
cocci.print_secs("assignment",p1)
|
||||||
|
|
||||||
|
@script:python depends on report@
|
||||||
|
p1 << r.p1;
|
||||||
|
p2 << r.p2;
|
||||||
|
@@
|
||||||
|
|
||||||
|
msg = "ERROR: PTR_ERR applied after initialization to constant on line %s" % (p1[0].line)
|
||||||
|
coccilib.report.print_report(p2[0],msg)
|
|
@ -0,0 +1,237 @@
|
||||||
|
/// Compare pointer-typed values to NULL rather than 0
|
||||||
|
///
|
||||||
|
//# This makes an effort to choose between !x and x == NULL. !x is used
|
||||||
|
//# if it has previously been used with the function used to initialize x.
|
||||||
|
//# This relies on type information. More type information can be obtained
|
||||||
|
//# using the option -all_includes and the option -I to specify an
|
||||||
|
//# include path.
|
||||||
|
//
|
||||||
|
// Confidence: High
|
||||||
|
// Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. GPLv2.
|
||||||
|
// Copyright: (C) 2012 Gilles Muller, INRIA/LiP6. GPLv2.
|
||||||
|
// URL: http://coccinelle.lip6.fr/
|
||||||
|
// Comments:
|
||||||
|
// Options:
|
||||||
|
|
||||||
|
virtual patch
|
||||||
|
virtual context
|
||||||
|
virtual org
|
||||||
|
virtual report
|
||||||
|
|
||||||
|
@initialize:ocaml@
|
||||||
|
let negtable = Hashtbl.create 101
|
||||||
|
|
||||||
|
@depends on patch@
|
||||||
|
expression *E;
|
||||||
|
identifier f;
|
||||||
|
@@
|
||||||
|
|
||||||
|
(
|
||||||
|
(E = f(...)) ==
|
||||||
|
- 0
|
||||||
|
+ NULL
|
||||||
|
|
|
||||||
|
(E = f(...)) !=
|
||||||
|
- 0
|
||||||
|
+ NULL
|
||||||
|
|
|
||||||
|
- 0
|
||||||
|
+ NULL
|
||||||
|
== (E = f(...))
|
||||||
|
|
|
||||||
|
- 0
|
||||||
|
+ NULL
|
||||||
|
!= (E = f(...))
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@t1 depends on !patch@
|
||||||
|
expression *E;
|
||||||
|
identifier f;
|
||||||
|
position p;
|
||||||
|
@@
|
||||||
|
|
||||||
|
(
|
||||||
|
(E = f(...)) ==
|
||||||
|
* 0@p
|
||||||
|
|
|
||||||
|
(E = f(...)) !=
|
||||||
|
* 0@p
|
||||||
|
|
|
||||||
|
* 0@p
|
||||||
|
== (E = f(...))
|
||||||
|
|
|
||||||
|
* 0@p
|
||||||
|
!= (E = f(...))
|
||||||
|
)
|
||||||
|
|
||||||
|
@script:python depends on org@
|
||||||
|
p << t1.p;
|
||||||
|
@@
|
||||||
|
|
||||||
|
coccilib.org.print_todo(p[0], "WARNING comparing pointer to 0")
|
||||||
|
|
||||||
|
@script:python depends on report@
|
||||||
|
p << t1.p;
|
||||||
|
@@
|
||||||
|
|
||||||
|
coccilib.report.print_report(p[0], "WARNING comparing pointer to 0")
|
||||||
|
|
||||||
|
// Tests of returned values
|
||||||
|
|
||||||
|
@s@
|
||||||
|
identifier f;
|
||||||
|
expression E,E1;
|
||||||
|
@@
|
||||||
|
|
||||||
|
E = f(...)
|
||||||
|
... when != E = E1
|
||||||
|
!E
|
||||||
|
|
||||||
|
@script:ocaml depends on s@
|
||||||
|
f << s.f;
|
||||||
|
@@
|
||||||
|
|
||||||
|
try let _ = Hashtbl.find negtable f in ()
|
||||||
|
with Not_found -> Hashtbl.add negtable f ()
|
||||||
|
|
||||||
|
@ r disable is_zero,isnt_zero exists @
|
||||||
|
expression *E;
|
||||||
|
identifier f;
|
||||||
|
@@
|
||||||
|
|
||||||
|
E = f(...)
|
||||||
|
...
|
||||||
|
(E == 0
|
||||||
|
|E != 0
|
||||||
|
|0 == E
|
||||||
|
|0 != E
|
||||||
|
)
|
||||||
|
|
||||||
|
@script:ocaml@
|
||||||
|
f << r.f;
|
||||||
|
@@
|
||||||
|
|
||||||
|
try let _ = Hashtbl.find negtable f in ()
|
||||||
|
with Not_found -> include_match false
|
||||||
|
|
||||||
|
// This rule may lead to inconsistent path problems, if E is defined in two
|
||||||
|
// places
|
||||||
|
@ depends on patch disable is_zero,isnt_zero @
|
||||||
|
expression *E;
|
||||||
|
expression E1;
|
||||||
|
identifier r.f;
|
||||||
|
@@
|
||||||
|
|
||||||
|
E = f(...)
|
||||||
|
<...
|
||||||
|
(
|
||||||
|
- E == 0
|
||||||
|
+ !E
|
||||||
|
|
|
||||||
|
- E != 0
|
||||||
|
+ E
|
||||||
|
|
|
||||||
|
- 0 == E
|
||||||
|
+ !E
|
||||||
|
|
|
||||||
|
- 0 != E
|
||||||
|
+ E
|
||||||
|
)
|
||||||
|
...>
|
||||||
|
?E = E1
|
||||||
|
|
||||||
|
@t2 depends on !patch disable is_zero,isnt_zero @
|
||||||
|
expression *E;
|
||||||
|
expression E1;
|
||||||
|
identifier r.f;
|
||||||
|
position p1;
|
||||||
|
position p2;
|
||||||
|
@@
|
||||||
|
|
||||||
|
E = f(...)
|
||||||
|
<...
|
||||||
|
(
|
||||||
|
* E == 0@p1
|
||||||
|
|
|
||||||
|
* E != 0@p2
|
||||||
|
|
|
||||||
|
* 0@p1 == E
|
||||||
|
|
|
||||||
|
* 0@p1 != E
|
||||||
|
)
|
||||||
|
...>
|
||||||
|
?E = E1
|
||||||
|
|
||||||
|
@script:python depends on org@
|
||||||
|
p << t2.p1;
|
||||||
|
@@
|
||||||
|
|
||||||
|
coccilib.org.print_todo(p[0], "WARNING comparing pointer to 0, suggest !E")
|
||||||
|
|
||||||
|
@script:python depends on org@
|
||||||
|
p << t2.p2;
|
||||||
|
@@
|
||||||
|
|
||||||
|
coccilib.org.print_todo(p[0], "WARNING comparing pointer to 0")
|
||||||
|
|
||||||
|
@script:python depends on report@
|
||||||
|
p << t2.p1;
|
||||||
|
@@
|
||||||
|
|
||||||
|
coccilib.report.print_report(p[0], "WARNING comparing pointer to 0, suggest !E")
|
||||||
|
|
||||||
|
@script:python depends on report@
|
||||||
|
p << t2.p2;
|
||||||
|
@@
|
||||||
|
|
||||||
|
coccilib.report.print_report(p[0], "WARNING comparing pointer to 0")
|
||||||
|
|
||||||
|
@ depends on patch disable is_zero,isnt_zero @
|
||||||
|
expression *E;
|
||||||
|
@@
|
||||||
|
|
||||||
|
(
|
||||||
|
E ==
|
||||||
|
- 0
|
||||||
|
+ NULL
|
||||||
|
|
|
||||||
|
E !=
|
||||||
|
- 0
|
||||||
|
+ NULL
|
||||||
|
|
|
||||||
|
- 0
|
||||||
|
+ NULL
|
||||||
|
== E
|
||||||
|
|
|
||||||
|
- 0
|
||||||
|
+ NULL
|
||||||
|
!= E
|
||||||
|
)
|
||||||
|
|
||||||
|
@ t3 depends on !patch disable is_zero,isnt_zero @
|
||||||
|
expression *E;
|
||||||
|
position p;
|
||||||
|
@@
|
||||||
|
|
||||||
|
(
|
||||||
|
* E == 0@p
|
||||||
|
|
|
||||||
|
* E != 0@p
|
||||||
|
|
|
||||||
|
* 0@p == E
|
||||||
|
|
|
||||||
|
* 0@p != E
|
||||||
|
)
|
||||||
|
|
||||||
|
@script:python depends on org@
|
||||||
|
p << t3.p;
|
||||||
|
@@
|
||||||
|
|
||||||
|
coccilib.org.print_todo(p[0], "WARNING comparing pointer to 0")
|
||||||
|
|
||||||
|
@script:python depends on report@
|
||||||
|
p << t3.p;
|
||||||
|
@@
|
||||||
|
|
||||||
|
coccilib.report.print_report(p[0], "WARNING comparing pointer to 0")
|
|
@ -97,6 +97,7 @@ mkdir -m 755 -p "$libc_headers_dir/DEBIAN"
|
||||||
mkdir -p "$libc_headers_dir/usr/share/doc/$libc_headers_packagename"
|
mkdir -p "$libc_headers_dir/usr/share/doc/$libc_headers_packagename"
|
||||||
mkdir -m 755 -p "$kernel_headers_dir/DEBIAN"
|
mkdir -m 755 -p "$kernel_headers_dir/DEBIAN"
|
||||||
mkdir -p "$kernel_headers_dir/usr/share/doc/$kernel_headers_packagename"
|
mkdir -p "$kernel_headers_dir/usr/share/doc/$kernel_headers_packagename"
|
||||||
|
mkdir -p "$kernel_headers_dir/lib/modules/$version/"
|
||||||
if [ "$ARCH" = "um" ] ; then
|
if [ "$ARCH" = "um" ] ; then
|
||||||
mkdir -p "$tmpdir/usr/lib/uml/modules/$version" "$tmpdir/usr/bin"
|
mkdir -p "$tmpdir/usr/lib/uml/modules/$version" "$tmpdir/usr/bin"
|
||||||
fi
|
fi
|
||||||
|
@ -120,15 +121,19 @@ else
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if grep -q '^CONFIG_MODULES=y' .config ; then
|
if grep -q '^CONFIG_MODULES=y' .config ; then
|
||||||
INSTALL_MOD_PATH="$tmpdir" make KBUILD_SRC= modules_install
|
INSTALL_MOD_PATH="$tmpdir" $MAKE KBUILD_SRC= modules_install
|
||||||
|
rm -f "$tmpdir/lib/modules/$version/build"
|
||||||
|
rm -f "$tmpdir/lib/modules/$version/source"
|
||||||
if [ "$ARCH" = "um" ] ; then
|
if [ "$ARCH" = "um" ] ; then
|
||||||
mv "$tmpdir/lib/modules/$version"/* "$tmpdir/usr/lib/uml/modules/$version/"
|
mv "$tmpdir/lib/modules/$version"/* "$tmpdir/usr/lib/uml/modules/$version/"
|
||||||
rmdir "$tmpdir/lib/modules/$version"
|
rmdir "$tmpdir/lib/modules/$version"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
make headers_check
|
if [ "$ARCH" != "um" ]; then
|
||||||
make headers_install INSTALL_HDR_PATH="$libc_headers_dir/usr"
|
$MAKE headers_check KBUILD_SRC=
|
||||||
|
$MAKE headers_install KBUILD_SRC= INSTALL_HDR_PATH="$libc_headers_dir/usr"
|
||||||
|
fi
|
||||||
|
|
||||||
# Install the maintainer scripts
|
# Install the maintainer scripts
|
||||||
# Note: hook scripts under /etc/kernel are also executed by official Debian
|
# Note: hook scripts under /etc/kernel are also executed by official Debian
|
||||||
|
@ -245,6 +250,7 @@ destdir=$kernel_headers_dir/usr/src/linux-headers-$version
|
||||||
mkdir -p "$destdir"
|
mkdir -p "$destdir"
|
||||||
(cd $srctree; tar -c -f - -T "$objtree/debian/hdrsrcfiles") | (cd $destdir; tar -xf -)
|
(cd $srctree; tar -c -f - -T "$objtree/debian/hdrsrcfiles") | (cd $destdir; tar -xf -)
|
||||||
(cd $objtree; tar -c -f - -T "$objtree/debian/hdrobjfiles") | (cd $destdir; tar -xf -)
|
(cd $objtree; tar -c -f - -T "$objtree/debian/hdrobjfiles") | (cd $destdir; tar -xf -)
|
||||||
|
ln -sf "/usr/src/linux-headers-$version" "$kernel_headers_dir/lib/modules/$version/build"
|
||||||
rm -f "$objtree/debian/hdrsrcfiles" "$objtree/debian/hdrobjfiles"
|
rm -f "$objtree/debian/hdrsrcfiles" "$objtree/debian/hdrobjfiles"
|
||||||
arch=$(dpkg --print-architecture)
|
arch=$(dpkg --print-architecture)
|
||||||
|
|
||||||
|
@ -259,8 +265,6 @@ Description: Linux kernel headers for $KERNELRELEASE on $arch
|
||||||
This is useful for people who need to build external modules
|
This is useful for people who need to build external modules
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
create_package "$kernel_headers_packagename" "$kernel_headers_dir"
|
|
||||||
|
|
||||||
# Do we have firmware? Move it out of the way and build it into a package.
|
# Do we have firmware? Move it out of the way and build it into a package.
|
||||||
if [ -e "$tmpdir/lib/firmware" ]; then
|
if [ -e "$tmpdir/lib/firmware" ]; then
|
||||||
mv "$tmpdir/lib/firmware" "$fwdir/lib/"
|
mv "$tmpdir/lib/firmware" "$fwdir/lib/"
|
||||||
|
@ -287,7 +291,11 @@ Description: Linux support headers for userspace development
|
||||||
are used by the installed headers for GNU glibc and other system libraries.
|
are used by the installed headers for GNU glibc and other system libraries.
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
create_package "$libc_headers_packagename" "$libc_headers_dir"
|
if [ "$ARCH" != "um" ]; then
|
||||||
|
create_package "$kernel_headers_packagename" "$kernel_headers_dir"
|
||||||
|
create_package "$libc_headers_packagename" "$libc_headers_dir"
|
||||||
|
fi
|
||||||
|
|
||||||
create_package "$packagename" "$tmpdir"
|
create_package "$packagename" "$tmpdir"
|
||||||
|
|
||||||
exit 0
|
exit 0
|
||||||
|
|
|
@ -116,6 +116,10 @@ findFile () {
|
||||||
ext=".bz2"
|
ext=".bz2"
|
||||||
name="bzip2"
|
name="bzip2"
|
||||||
uncomp="bunzip2 -dc"
|
uncomp="bunzip2 -dc"
|
||||||
|
elif [ -r ${filebase}.xz ]; then
|
||||||
|
ext=".xz"
|
||||||
|
name="xz"
|
||||||
|
uncomp="xz -dc"
|
||||||
elif [ -r ${filebase}.zip ]; then
|
elif [ -r ${filebase}.zip ]; then
|
||||||
ext=".zip"
|
ext=".zip"
|
||||||
name="zip"
|
name="zip"
|
||||||
|
|
|
@ -116,7 +116,7 @@ docscope()
|
||||||
|
|
||||||
dogtags()
|
dogtags()
|
||||||
{
|
{
|
||||||
all_sources | gtags -f -
|
all_sources | gtags -i -f -
|
||||||
}
|
}
|
||||||
|
|
||||||
exuberant()
|
exuberant()
|
||||||
|
@ -166,9 +166,6 @@ exuberant()
|
||||||
all_defconfigs | xargs -r $1 -a \
|
all_defconfigs | xargs -r $1 -a \
|
||||||
--langdef=dotconfig --language-force=dotconfig \
|
--langdef=dotconfig --language-force=dotconfig \
|
||||||
--regex-dotconfig='/^#?[[:blank:]]*(CONFIG_[[:alnum:]_]+)/\1/'
|
--regex-dotconfig='/^#?[[:blank:]]*(CONFIG_[[:alnum:]_]+)/\1/'
|
||||||
|
|
||||||
# Remove structure forward declarations.
|
|
||||||
LANG=C sed -i -e '/^\([a-zA-Z_][a-zA-Z0-9_]*\)\t.*\t\/\^struct \1;.*\$\/;"\tx$/d' tags
|
|
||||||
}
|
}
|
||||||
|
|
||||||
emacs()
|
emacs()
|
||||||
|
@ -233,6 +230,7 @@ if [ "${ARCH}" = "um" ]; then
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
remove_structs=
|
||||||
case "$1" in
|
case "$1" in
|
||||||
"cscope")
|
"cscope")
|
||||||
docscope
|
docscope
|
||||||
|
@ -245,10 +243,17 @@ case "$1" in
|
||||||
"tags")
|
"tags")
|
||||||
rm -f tags
|
rm -f tags
|
||||||
xtags ctags
|
xtags ctags
|
||||||
|
remove_structs=y
|
||||||
;;
|
;;
|
||||||
|
|
||||||
"TAGS")
|
"TAGS")
|
||||||
rm -f TAGS
|
rm -f TAGS
|
||||||
xtags etags
|
xtags etags
|
||||||
|
remove_structs=y
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
# Remove structure forward declarations.
|
||||||
|
if [ -n $remove_structs ]; then
|
||||||
|
LANG=C sed -i -e '/^\([a-zA-Z_][a-zA-Z0-9_]*\)\t.*\t\/\^struct \1;.*\$\/;"\tx$/d' $1
|
||||||
|
fi
|
||||||
|
|
Загрузка…
Ссылка в новой задаче