Merge branch 'misc' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild
Pull misc non-critical kbuild changes from Michal Marek: - Fix for make TAGS - Fix for make rpm - Some new coccinelle semantic patches * 'misc' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild: scripts/coccinelle: find constant additions that could be bit ors coccicheck: Allow to show the executed command line coccicheck: Allow the user to give a V= (verbose) argument scripts/coccinelle/misc/memcpy-assign.cocci: Replace memcpy with struct assignment kbuild: clear KBUILD_SRC when calling 'make' in RPM spec scripts/coccinelle/misc/semicolon.cocci: Add unneeded semicolon test scripts/tags.sh: Fix regex syntax for etags
这个提交包含在:
@@ -0,0 +1,103 @@
|
||||
//
|
||||
// Replace memcpy with struct assignment.
|
||||
//
|
||||
// Confidence: High
|
||||
// Copyright: (C) 2012 Peter Senna Tschudin, INRIA/LIP6. GPLv2.
|
||||
// URL: http://coccinelle.lip6.fr/
|
||||
// Comments:
|
||||
// Options: --no-includes --include-headers
|
||||
|
||||
virtual patch
|
||||
virtual report
|
||||
virtual context
|
||||
virtual org
|
||||
|
||||
@r1 depends on !patch@
|
||||
identifier struct_name;
|
||||
struct struct_name to;
|
||||
struct struct_name from;
|
||||
struct struct_name *top;
|
||||
struct struct_name *fromp;
|
||||
position p;
|
||||
@@
|
||||
memcpy@p(\(&(to)\|top\), \(&(from)\|fromp\), \(sizeof(to)\|sizeof(from)\|sizeof(struct struct_name)\|sizeof(*top)\|sizeof(*fromp)\))
|
||||
|
||||
@script:python depends on report@
|
||||
p << r1.p;
|
||||
@@
|
||||
coccilib.report.print_report(p[0],"Replace memcpy with struct assignment")
|
||||
|
||||
@depends on context@
|
||||
position r1.p;
|
||||
@@
|
||||
*memcpy@p(...);
|
||||
|
||||
@script:python depends on org@
|
||||
p << r1.p;
|
||||
@@
|
||||
cocci.print_main("Replace memcpy with struct assignment",p)
|
||||
|
||||
@depends on patch@
|
||||
identifier struct_name;
|
||||
struct struct_name to;
|
||||
struct struct_name from;
|
||||
@@
|
||||
(
|
||||
-memcpy(&(to), &(from), sizeof(to));
|
||||
+to = from;
|
||||
|
|
||||
-memcpy(&(to), &(from), sizeof(from));
|
||||
+to = from;
|
||||
|
|
||||
-memcpy(&(to), &(from), sizeof(struct struct_name));
|
||||
+to = from;
|
||||
)
|
||||
|
||||
@depends on patch@
|
||||
identifier struct_name;
|
||||
struct struct_name to;
|
||||
struct struct_name *from;
|
||||
@@
|
||||
(
|
||||
-memcpy(&(to), from, sizeof(to));
|
||||
+to = *from;
|
||||
|
|
||||
-memcpy(&(to), from, sizeof(*from));
|
||||
+to = *from;
|
||||
|
|
||||
-memcpy(&(to), from, sizeof(struct struct_name));
|
||||
+to = *from;
|
||||
)
|
||||
|
||||
@depends on patch@
|
||||
identifier struct_name;
|
||||
struct struct_name *to;
|
||||
struct struct_name from;
|
||||
@@
|
||||
(
|
||||
-memcpy(to, &(from), sizeof(*to));
|
||||
+ *to = from;
|
||||
|
|
||||
-memcpy(to, &(from), sizeof(from));
|
||||
+ *to = from;
|
||||
|
|
||||
-memcpy(to, &(from), sizeof(struct struct_name));
|
||||
+ *to = from;
|
||||
)
|
||||
|
||||
@depends on patch@
|
||||
identifier struct_name;
|
||||
struct struct_name *to;
|
||||
struct struct_name *from;
|
||||
@@
|
||||
(
|
||||
-memcpy(to, from, sizeof(*to));
|
||||
+ *to = *from;
|
||||
|
|
||||
-memcpy(to, from, sizeof(*from));
|
||||
+ *to = *from;
|
||||
|
|
||||
-memcpy(to, from, sizeof(struct struct_name));
|
||||
+ *to = *from;
|
||||
)
|
||||
|
@@ -0,0 +1,55 @@
|
||||
/// Check for constants that are added but are used elsewhere as bitmasks
|
||||
/// The results should be checked manually to ensure that the nonzero
|
||||
/// bits in the two constants are actually disjoint.
|
||||
///
|
||||
// Confidence: Moderate
|
||||
// Copyright: (C) 2013 Julia Lawall, INRIA/LIP6. GPLv2.
|
||||
// Copyright: (C) 2013 Gilles Muller, INRIA/LIP6. GPLv2.
|
||||
// URL: http://coccinelle.lip6.fr/
|
||||
// Comments:
|
||||
// Options: -no_includes -include_headers
|
||||
|
||||
virtual org
|
||||
virtual report
|
||||
virtual context
|
||||
|
||||
@r@
|
||||
constant c;
|
||||
identifier i;
|
||||
expression e;
|
||||
@@
|
||||
|
||||
(
|
||||
e | c@i
|
||||
|
|
||||
e & c@i
|
||||
|
|
||||
e |= c@i
|
||||
|
|
||||
e &= c@i
|
||||
)
|
||||
|
||||
@s@
|
||||
constant r.c,c1;
|
||||
identifier i1;
|
||||
position p;
|
||||
@@
|
||||
|
||||
(
|
||||
c1 + c - 1
|
||||
|
|
||||
*c1@i1 +@p c
|
||||
)
|
||||
|
||||
@script:python depends on org@
|
||||
p << s.p;
|
||||
@@
|
||||
|
||||
cocci.print_main("sum of probable bitmasks, consider |",p)
|
||||
|
||||
@script:python depends on report@
|
||||
p << s.p;
|
||||
@@
|
||||
|
||||
msg = "WARNING: sum of probable bitmasks, consider |"
|
||||
coccilib.report.print_report(p[0],msg)
|
@@ -0,0 +1,83 @@
|
||||
///
|
||||
/// Removes unneeded semicolon.
|
||||
///
|
||||
// Confidence: Moderate
|
||||
// Copyright: (C) 2012 Peter Senna Tschudin, INRIA/LIP6. GPLv2.
|
||||
// URL: http://coccinelle.lip6.fr/
|
||||
// Comments: Some false positives on empty default cases in switch statements.
|
||||
// Options: --no-includes --include-headers
|
||||
|
||||
virtual patch
|
||||
virtual report
|
||||
virtual context
|
||||
virtual org
|
||||
|
||||
@r_default@
|
||||
position p;
|
||||
@@
|
||||
switch (...)
|
||||
{
|
||||
default: ...;@p
|
||||
}
|
||||
|
||||
@r_case@
|
||||
position p;
|
||||
@@
|
||||
(
|
||||
switch (...)
|
||||
{
|
||||
case ...:;@p
|
||||
}
|
||||
|
|
||||
switch (...)
|
||||
{
|
||||
case ...:...
|
||||
case ...:;@p
|
||||
}
|
||||
|
|
||||
switch (...)
|
||||
{
|
||||
case ...:...
|
||||
case ...:
|
||||
case ...:;@p
|
||||
}
|
||||
)
|
||||
|
||||
@r1@
|
||||
statement S;
|
||||
position p1;
|
||||
position p != {r_default.p, r_case.p};
|
||||
identifier label;
|
||||
@@
|
||||
(
|
||||
label:;
|
||||
|
|
||||
S@p1;@p
|
||||
)
|
||||
|
||||
@script:python@
|
||||
p << r1.p;
|
||||
p1 << r1.p1;
|
||||
@@
|
||||
if p[0].line != p1[0].line_end:
|
||||
cocci.include_match(False)
|
||||
|
||||
@depends on patch@
|
||||
position r1.p;
|
||||
@@
|
||||
-;@p
|
||||
|
||||
@script:python depends on report@
|
||||
p << r1.p;
|
||||
@@
|
||||
coccilib.report.print_report(p[0],"Unneeded semicolon")
|
||||
|
||||
@depends on context@
|
||||
position r1.p;
|
||||
@@
|
||||
*;@p
|
||||
|
||||
@script:python depends on org@
|
||||
p << r1.p;
|
||||
@@
|
||||
cocci.print_main("Unneeded semicolon",p)
|
在新工单中引用
屏蔽一个用户