Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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:

- several coccinelle updates
- make deb-pkg creates an armhf package if CONFIG_VFP=y
- make tags understands some more powerpc macros"

* 'misc' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild:
coccinelle: Improve checking for missing NULL terminators
coccinelle: ifnullfree: handle various destroy functions
coccinelle: ifnullfree: various cleanups
cocinelle: iterators: semantic patch to delete unneeded of_node_put
deb-pkg: Add automatic support for armhf architecture
scripts/coccinelle: fix typos
coccinelle: misc: remove "complex return code" warnings
Coccinelle: fix incorrect -include option transformation
coccinelle: tests: improve odd_ptr_err.cocci
coccinelle: misc: move constants to the right
scripts/tags.sh: Teach tags about some powerpc macros

+415 -234
+1 -1
scripts/coccicheck
··· 30 30 # spatch only allows include directories with the syntax "-I include" 31 31 # while gcc also allows "-Iinclude" and "-include include" 32 32 COCCIINCLUDE=${LINUXINCLUDE//-I/-I } 33 - COCCIINCLUDE=${COCCIINCLUDE//-include/-I} 33 + COCCIINCLUDE=${COCCIINCLUDE// -include/ --include} 34 34 35 35 if [ "$C" = "1" -o "$C" = "2" ]; then 36 36 ONLINE=1
+15 -11
scripts/coccinelle/free/ifnullfree.cocci
··· 16 16 @r2 depends on patch@ 17 17 expression E; 18 18 @@ 19 - - if (E) 19 + - if (E != NULL) 20 20 ( 21 - - kfree(E); 22 - + kfree(E); 21 + kfree(E); 23 22 | 24 - - debugfs_remove(E); 25 - + debugfs_remove(E); 23 + debugfs_remove(E); 26 24 | 27 - - debugfs_remove_recursive(E); 28 - + debugfs_remove_recursive(E); 25 + debugfs_remove_recursive(E); 29 26 | 30 - - usb_free_urb(E); 31 - + usb_free_urb(E); 27 + usb_free_urb(E); 28 + | 29 + kmem_cache_destroy(E); 30 + | 31 + mempool_destroy(E); 32 + | 33 + dma_pool_destroy(E); 32 34 ) 33 35 34 36 @r depends on context || report || org @ ··· 38 36 position p; 39 37 @@ 40 38 41 - * if (E) 42 - * \(kfree@p\|debugfs_remove@p\|debugfs_remove_recursive@p\|usb_free_urb\)(E); 39 + * if (E != NULL) 40 + * \(kfree@p\|debugfs_remove@p\|debugfs_remove_recursive@p\| 41 + * usb_free_urb@p\|kmem_cache_destroy@p\|mempool_destroy@p\| 42 + * dma_pool_destroy@p\)(E); 43 43 44 44 @script:python depends on org@ 45 45 p << r.p;
+100
scripts/coccinelle/iterators/device_node_continue.cocci
··· 1 + /// Device node iterators put the previous value of the index variable, so an 2 + /// explicit put causes a double put. 3 + /// 4 + // Confidence: High 5 + // Copyright: (C) 2015 Julia Lawall, Inria. GPLv2. 6 + // URL: http://coccinelle.lip6.fr/ 7 + // Options: --no-includes --include-headers 8 + // Keywords: for_each_child_of_node, etc. 9 + 10 + virtual patch 11 + virtual context 12 + virtual org 13 + virtual report 14 + 15 + @r exists@ 16 + expression e1,e2; 17 + local idexpression n; 18 + iterator name for_each_node_by_name, for_each_node_by_type, 19 + for_each_compatible_node, for_each_matching_node, 20 + for_each_matching_node_and_match, for_each_child_of_node, 21 + for_each_available_child_of_node, for_each_node_with_property; 22 + iterator i; 23 + position p1,p2; 24 + statement S; 25 + @@ 26 + 27 + ( 28 + ( 29 + for_each_node_by_name(n,e1) S 30 + | 31 + for_each_node_by_type(n,e1) S 32 + | 33 + for_each_compatible_node(n,e1,e2) S 34 + | 35 + for_each_matching_node(n,e1) S 36 + | 37 + for_each_matching_node_and_match(n,e1,e2) S 38 + | 39 + for_each_child_of_node(e1,n) S 40 + | 41 + for_each_available_child_of_node(e1,n) S 42 + | 43 + for_each_node_with_property(n,e1) S 44 + ) 45 + & 46 + i@p1(...) { 47 + ... when != of_node_get(n) 48 + when any 49 + of_node_put@p2(n); 50 + ... when any 51 + } 52 + ) 53 + 54 + @s exists@ 55 + local idexpression r.n; 56 + statement S; 57 + position r.p1,r.p2; 58 + iterator i; 59 + @@ 60 + 61 + of_node_put@p2(n); 62 + ... when any 63 + i@p1(..., n, ...) 64 + S 65 + 66 + @t depends on s && patch && !context && !org && !report@ 67 + local idexpression n; 68 + position r.p2; 69 + @@ 70 + 71 + - of_node_put@p2(n); 72 + 73 + // ---------------------------------------------------------------------------- 74 + 75 + @t_context depends on s && !patch && (context || org || report)@ 76 + local idexpression n; 77 + position r.p2; 78 + position j0; 79 + @@ 80 + 81 + * of_node_put@j0@p2(n); 82 + 83 + // ---------------------------------------------------------------------------- 84 + 85 + @script:python t_org depends on org@ 86 + j0 << t_context.j0; 87 + @@ 88 + 89 + msg = "ERROR: probable double put." 90 + coccilib.org.print_todo(j0[0], msg) 91 + 92 + // ---------------------------------------------------------------------------- 93 + 94 + @script:python t_report depends on report@ 95 + j0 << t_context.j0; 96 + @@ 97 + 98 + msg = "ERROR: probable double put." 99 + coccilib.report.print_report(j0[0], msg) 100 +
+171
scripts/coccinelle/misc/compare_const_fl.cocci
··· 1 + /// Move constants to the right of binary operators. 2 + //# Depends on personal taste in some cases. 3 + /// 4 + // Confidence: Moderate 5 + // Copyright: (C) 2015 Copyright: (C) 2015 Julia Lawall, Inria. GPLv2. 6 + // URL: http://coccinelle.lip6.fr/ 7 + // Options: --no-includes --include-headers 8 + 9 + virtual patch 10 + virtual context 11 + virtual org 12 + virtual report 13 + 14 + @r1 depends on patch && !context && !org && !report 15 + disable bitor_comm, neg_if_exp@ 16 + constant c,c1; 17 + local idexpression i; 18 + expression e,e1,e2; 19 + binary operator b = {==,!=,&,|}; 20 + type t; 21 + @@ 22 + 23 + ( 24 + c b (c1) 25 + | 26 + sizeof(t) b e1 27 + | 28 + sizeof e b e1 29 + | 30 + i b e1 31 + | 32 + c | e1 | e2 | ... 33 + | 34 + c | (e ? e1 : e2) 35 + | 36 + - c 37 + + e 38 + b 39 + - e 40 + + c 41 + ) 42 + 43 + @r2 depends on patch && !context && !org && !report 44 + disable gtr_lss, gtr_lss_eq, not_int2@ 45 + constant c,c1; 46 + expression e,e1,e2; 47 + binary operator b; 48 + binary operator b1 = {<,<=},b2 = {<,<=}; 49 + binary operator b3 = {>,>=},b4 = {>,>=}; 50 + local idexpression i; 51 + type t; 52 + @@ 53 + 54 + ( 55 + c b c1 56 + | 57 + sizeof(t) b e1 58 + | 59 + sizeof e b e1 60 + | 61 + (e1 b1 e) && (e b2 e2) 62 + | 63 + (e1 b3 e) && (e b4 e2) 64 + | 65 + i b e 66 + | 67 + - c < e 68 + + e > c 69 + | 70 + - c <= e 71 + + e >= c 72 + | 73 + - c > e 74 + + e < c 75 + | 76 + - c >= e 77 + + e <= c 78 + ) 79 + 80 + // ---------------------------------------------------------------------------- 81 + 82 + @r1_context depends on !patch && (context || org || report) 83 + disable bitor_comm, neg_if_exp exists@ 84 + type t; 85 + binary operator b = {==,!=,&,|}; 86 + constant c, c1; 87 + expression e, e1, e2; 88 + local idexpression i; 89 + position j0; 90 + @@ 91 + 92 + ( 93 + c b (c1) 94 + | 95 + sizeof(t) b e1 96 + | 97 + sizeof e b e1 98 + | 99 + i b e1 100 + | 101 + c | e1 | e2 | ... 102 + | 103 + c | (e ? e1 : e2) 104 + | 105 + * c@j0 b e 106 + ) 107 + 108 + @r2_context depends on !patch && (context || org || report) 109 + disable gtr_lss, gtr_lss_eq, not_int2 exists@ 110 + type t; 111 + binary operator b, b1 = {<,<=}, b2 = {<,<=}, b3 = {>,>=}, b4 = {>,>=}; 112 + constant c, c1; 113 + expression e, e1, e2; 114 + local idexpression i; 115 + position j0; 116 + @@ 117 + 118 + ( 119 + c b c1 120 + | 121 + sizeof(t) b e1 122 + | 123 + sizeof e b e1 124 + | 125 + (e1 b1 e) && (e b2 e2) 126 + | 127 + (e1 b3 e) && (e b4 e2) 128 + | 129 + i b e 130 + | 131 + * c@j0 < e 132 + | 133 + * c@j0 <= e 134 + | 135 + * c@j0 > e 136 + | 137 + * c@j0 >= e 138 + ) 139 + 140 + // ---------------------------------------------------------------------------- 141 + 142 + @script:python r1_org depends on org@ 143 + j0 << r1_context.j0; 144 + @@ 145 + 146 + msg = "Move constant to right." 147 + coccilib.org.print_todo(j0[0], msg) 148 + 149 + @script:python r2_org depends on org@ 150 + j0 << r2_context.j0; 151 + @@ 152 + 153 + msg = "Move constant to right." 154 + coccilib.org.print_todo(j0[0], msg) 155 + 156 + // ---------------------------------------------------------------------------- 157 + 158 + @script:python r1_report depends on report@ 159 + j0 << r1_context.j0; 160 + @@ 161 + 162 + msg = "Move constant to right." 163 + coccilib.report.print_report(j0[0], msg) 164 + 165 + @script:python r2_report depends on report@ 166 + j0 << r2_context.j0; 167 + @@ 168 + 169 + msg = "Move constant to right." 170 + coccilib.report.print_report(j0[0], msg) 171 +
+28 -5
scripts/coccinelle/misc/of_table.cocci
··· 1 - /// Make sure of_device_id tables are NULL terminated 1 + /// Make sure (of/i2c/platform)_device_id tables are NULL terminated 2 2 // 3 - // Keywords: of_table 3 + // Keywords: of_table i2c_table platform_table 4 4 // Confidence: Medium 5 5 // Options: --include-headers 6 6 ··· 13 13 identifier var, arr; 14 14 expression E; 15 15 @@ 16 - struct of_device_id arr[] = { 16 + ( 17 + struct \(of_device_id \| i2c_device_id \| platform_device_id\) arr[] = { 17 18 ..., 18 19 { 19 20 .var = E, 20 21 * } 21 22 }; 23 + | 24 + struct \(of_device_id \| i2c_device_id \| platform_device_id\) arr[] = { 25 + ..., 26 + * { ..., E, ... }, 27 + }; 28 + ) 22 29 23 30 @depends on patch@ 24 31 identifier var, arr; 25 32 expression E; 26 33 @@ 27 - struct of_device_id arr[] = { 34 + ( 35 + struct \(of_device_id \| i2c_device_id \| platform_device_id\) arr[] = { 28 36 ..., 29 37 { 30 38 .var = E, ··· 40 32 + }, 41 33 + { } 42 34 }; 35 + | 36 + struct \(of_device_id \| i2c_device_id \| platform_device_id\) arr[] = { 37 + ..., 38 + { ..., E, ... }, 39 + + { }, 40 + }; 41 + ) 43 42 44 43 @r depends on org || report@ 45 44 position p1; 46 45 identifier var, arr; 47 46 expression E; 48 47 @@ 49 - struct of_device_id arr[] = { 48 + ( 49 + struct \(of_device_id \| i2c_device_id \| platform_device_id\) arr[] = { 50 50 ..., 51 51 { 52 52 .var = E, 53 53 } 54 54 @p1 55 55 }; 56 + | 57 + struct \(of_device_id \| i2c_device_id \| platform_device_id\) arr[] = { 58 + ..., 59 + { ..., E, ... } 60 + @p1 61 + }; 62 + ) 56 63 57 64 @script:python depends on org@ 58 65 p1 << r.p1;
-180
scripts/coccinelle/misc/simple_return.cocci
··· 1 - /// Simplify a trivial if-return sequence. Possibly combine with a 2 - /// preceding function call. 3 - /// 4 - // Confidence: High 5 - // Copyright: (C) 2014 Julia Lawall, INRIA/LIP6. GPLv2. 6 - // Copyright: (C) 2014 Gilles Muller, INRIA/LiP6. GPLv2. 7 - // URL: http://coccinelle.lip6.fr/ 8 - // Comments: 9 - // Options: --no-includes --include-headers 10 - 11 - virtual patch 12 - virtual context 13 - virtual org 14 - virtual report 15 - 16 - @r depends on patch@ 17 - local idexpression e; 18 - identifier i,f,fn; 19 - @@ 20 - 21 - fn(...) { <... 22 - - e@i = 23 - + return 24 - f(...); 25 - -if (i != 0) return i; 26 - -return 0; 27 - ...> } 28 - 29 - @depends on patch@ 30 - identifier r.i; 31 - type t; 32 - @@ 33 - 34 - -t i; 35 - ... when != i 36 - 37 - @depends on patch@ 38 - expression e; 39 - @@ 40 - 41 - -if (e != 0) 42 - return e; 43 - -return 0; 44 - 45 - // ----------------------------------------------------------------------- 46 - 47 - @s1 depends on context || org || report@ 48 - local idexpression e; 49 - identifier i,f,fn; 50 - position p,p1,p2; 51 - @@ 52 - 53 - fn(...) { <... 54 - * e@i@p = f(...); 55 - if (\(i@p1 != 0\|i@p2 < 0\)) 56 - return i; 57 - return 0; 58 - ...> } 59 - 60 - @s2 depends on context || org || report forall@ 61 - identifier s1.i; 62 - type t; 63 - position q,s1.p; 64 - expression e,f; 65 - @@ 66 - 67 - * t i@q; 68 - ... when != i 69 - e@p = f(...); 70 - 71 - @s3 depends on context || org || report@ 72 - expression e; 73 - position p1!=s1.p1; 74 - position p2!=s1.p2; 75 - @@ 76 - 77 - *if (\(e@p1 != 0\|e@p2 < 0\)) 78 - return e; 79 - return 0; 80 - 81 - // ----------------------------------------------------------------------- 82 - 83 - @script:python depends on org@ 84 - p << s1.p; 85 - p1 << s1.p1; 86 - q << s2.q; 87 - @@ 88 - 89 - cocci.print_main("decl",q) 90 - cocci.print_secs("use",p) 91 - cocci.include_match(False) 92 - 93 - @script:python depends on org@ 94 - p << s1.p; 95 - p2 << s1.p2; 96 - q << s2.q; 97 - @@ 98 - 99 - cocci.print_main("decl",q) 100 - cocci.print_secs("use with questionable test",p) 101 - cocci.include_match(False) 102 - 103 - @script:python depends on org@ 104 - p << s1.p; 105 - p1 << s1.p1; 106 - @@ 107 - 108 - cocci.print_main("use",p) 109 - 110 - @script:python depends on org@ 111 - p << s1.p; 112 - p2 << s1.p2; 113 - @@ 114 - 115 - cocci.print_main("use with questionable test",p) 116 - 117 - @script:python depends on org@ 118 - p << s3.p1; 119 - @@ 120 - 121 - cocci.print_main("test",p) 122 - 123 - @script:python depends on org@ 124 - p << s3.p2; 125 - @@ 126 - 127 - cocci.print_main("questionable test",p) 128 - 129 - // ----------------------------------------------------------------------- 130 - 131 - @script:python depends on report@ 132 - p << s1.p; 133 - p1 << s1.p1; 134 - q << s2.q; 135 - @@ 136 - 137 - msg = "WARNING: end returns can be simpified and declaration on line %s can be dropped" % (q[0].line) 138 - coccilib.report.print_report(p[0],msg) 139 - cocci.include_match(False) 140 - 141 - @script:python depends on report@ 142 - p << s1.p; 143 - p1 << s1.p1; 144 - q << s2.q 145 - ; 146 - @@ 147 - 148 - msg = "WARNING: end returns may be simpified if negative or 0 value and declaration on line %s can be dropped" % (q[0].line) 149 - coccilib.report.print_report(p[0],msg) 150 - cocci.include_match(False) 151 - 152 - @script:python depends on report@ 153 - p << s1.p; 154 - p1 << s1.p1; 155 - @@ 156 - 157 - msg = "WARNING: end returns can be simpified" 158 - coccilib.report.print_report(p[0],msg) 159 - 160 - @script:python depends on report@ 161 - p << s1.p; 162 - p2 << s1.p2; 163 - @@ 164 - 165 - msg = "WARNING: end returns can be simpified if negative or 0 value" 166 - coccilib.report.print_report(p[0],msg) 167 - 168 - @script:python depends on report@ 169 - p << s3.p1; 170 - @@ 171 - 172 - msg = "WARNING: end returns can be simpified" 173 - coccilib.report.print_report(p[0],msg) 174 - 175 - @script:python depends on report@ 176 - p << s3.p2; 177 - @@ 178 - 179 - msg = "WARNING: end returns can be simpified if tested value is negative or 0" 180 - coccilib.report.print_report(p[0],msg)
+2 -2
scripts/coccinelle/null/deref_null.cocci
··· 1 1 /// 2 - /// A variable is dereference under a NULL test. 3 - /// Even though it is know to be NULL. 2 + /// A variable is dereferenced under a NULL test. 3 + /// Even though it is known to be NULL. 4 4 /// 5 5 // Confidence: Moderate 6 6 // Copyright: (C) 2010 Nicolas Palix, DIKU. GPLv2.
+86 -34
scripts/coccinelle/tests/odd_ptr_err.cocci
··· 1 1 /// PTR_ERR should access the value just tested by IS_ERR 2 - //# There can be false positives in the patch case, where it is the call 2 + //# There can be false positives in the patch case, where it is the call to 3 3 //# IS_ERR that is wrong. 4 4 /// 5 5 // Confidence: High 6 - // Copyright: (C) 2012 Julia Lawall, INRIA. GPLv2. 7 - // Copyright: (C) 2012 Gilles Muller, INRIA. GPLv2. 6 + // Copyright: (C) 2012, 2015 Julia Lawall, INRIA. GPLv2. 7 + // Copyright: (C) 2012, 2015 Gilles Muller, INRIA. GPLv2. 8 8 // URL: http://coccinelle.lip6.fr/ 9 - // Comments: 10 9 // Options: --no-includes --include-headers 11 10 12 11 virtual patch ··· 13 14 virtual org 14 15 virtual report 15 16 16 - @depends on patch@ 17 - expression e,e1; 17 + @ok1 exists@ 18 + expression x,e; 19 + position p; 18 20 @@ 19 21 22 + if (IS_ERR(x=e) || ...) { 23 + <... 24 + PTR_ERR@p(x) 25 + ...> 26 + } 27 + 28 + @ok2 exists@ 29 + expression x,e1,e2; 30 + position p; 31 + @@ 32 + 33 + if (IS_ERR(x) || ...) { 34 + <... 20 35 ( 21 - if (IS_ERR(e)) { ... PTR_ERR(e) ... } 36 + PTR_ERR@p(\(e1 ? e2 : x\|e1 ? x : e2\)) 22 37 | 23 - if (IS_ERR(e=e1)) { ... PTR_ERR(e) ... } 38 + PTR_ERR@p(x) 39 + ) 40 + ...> 41 + } 42 + 43 + @r1 depends on patch && !context && !org && !report exists@ 44 + expression x,y; 45 + position p != {ok1.p,ok2.p}; 46 + @@ 47 + 48 + if (IS_ERR(x) || ...) { 49 + ... when any 50 + when != IS_ERR(...) 51 + ( 52 + PTR_ERR(x) 24 53 | 25 - if (IS_ERR(e)) 26 - { ... 27 - PTR_ERR( 28 - - e1 29 - + e 54 + PTR_ERR@p( 55 + - y 56 + + x 30 57 ) 31 - ... } 32 58 ) 59 + ... when any 60 + } 33 61 34 - @r depends on !patch@ 35 - expression e,e1; 36 - position p1,p2; 62 + // ---------------------------------------------------------------------------- 63 + 64 + @r1_context depends on !patch && (context || org || report) exists@ 65 + position p != {ok1.p,ok2.p}; 66 + expression x, y; 67 + position j0, j1; 37 68 @@ 38 69 70 + if (IS_ERR@j0(x) || ...) { 71 + ... when any 72 + when != IS_ERR(...) 39 73 ( 40 - if (IS_ERR(e)) { ... PTR_ERR(e) ... } 74 + PTR_ERR(x) 41 75 | 42 - if (IS_ERR(e=e1)) { ... PTR_ERR(e) ... } 43 - | 44 - *if (IS_ERR@p1(e)) 45 - { ... 46 - * PTR_ERR@p2(e1) 47 - ... } 76 + PTR_ERR@j1@p( 77 + y 78 + ) 48 79 ) 80 + ... when any 81 + } 49 82 50 - @script:python depends on org@ 51 - p1 << r.p1; 52 - p2 << r.p2; 83 + @r1_disj depends on !patch && (context || org || report) exists@ 84 + position p != {ok1.p,ok2.p}; 85 + expression x, y; 86 + position r1_context.j0, r1_context.j1; 53 87 @@ 54 88 55 - cocci.print_main("inconsistent IS_ERR and PTR_ERR",p1) 56 - cocci.print_secs("PTR_ERR",p2) 89 + * if (IS_ERR@j0(x) || ...) { 90 + ... when any 91 + when != IS_ERR(...) 92 + * PTR_ERR@j1@p( 93 + y 94 + ) 95 + ... when any 96 + } 57 97 58 - @script:python depends on report@ 59 - p1 << r.p1; 60 - p2 << r.p2; 98 + // ---------------------------------------------------------------------------- 99 + 100 + @script:python r1_org depends on org@ 101 + j0 << r1_context.j0; 102 + j1 << r1_context.j1; 61 103 @@ 62 104 63 - msg = "inconsistent IS_ERR and PTR_ERR, PTR_ERR on line %s" % (p2[0].line) 64 - coccilib.report.print_report(p1[0],msg) 105 + msg = "inconsistent IS_ERR and PTR_ERR" 106 + coccilib.org.print_todo(j0[0], msg) 107 + coccilib.org.print_link(j1[0], "") 108 + 109 + // ---------------------------------------------------------------------------- 110 + 111 + @script:python r1_report depends on report@ 112 + j0 << r1_context.j0; 113 + j1 << r1_context.j1; 114 + @@ 115 + 116 + msg = "inconsistent IS_ERR and PTR_ERR on line %s." % (j1[0].line) 117 + coccilib.report.print_report(j0[0], msg) 118 +
+10 -1
scripts/package/builddeb
··· 52 52 arm64) 53 53 debarch=arm64 ;; 54 54 arm*) 55 - debarch=arm$(grep -q CONFIG_AEABI=y $KCONFIG_CONFIG && echo el || true) ;; 55 + if grep -q CONFIG_AEABI=y $KCONFIG_CONFIG; then 56 + if grep -q CONFIG_VFP=y $KCONFIG_CONFIG; then 57 + debarch=armhf 58 + else 59 + debarch=armel 60 + fi 61 + else 62 + debarch=arm 63 + fi 64 + ;; 56 65 *) 57 66 debarch=$(dpkg --print-architecture) 58 67 echo "" >&2
+2
scripts/tags.sh
··· 198 198 --regex-c++='/TASK_PFA_TEST\([^,]*,\s*([^)]*)\)/task_\1/' \ 199 199 --regex-c++='/TASK_PFA_SET\([^,]*,\s*([^)]*)\)/task_set_\1/' \ 200 200 --regex-c++='/TASK_PFA_CLEAR\([^,]*,\s*([^)]*)\)/task_clear_\1/'\ 201 + --regex-c++='/DEF_MMIO_(IN|OUT)_(X|D)\(([^,]*),\s*[^)]*\)/\3/' \ 202 + --regex-c++='/DEBUGGER_BOILERPLATE\(([^,]*)\)/\1/' \ 201 203 --regex-c='/PCI_OP_READ\((\w*).*[1-4]\)/pci_bus_read_config_\1/' \ 202 204 --regex-c='/PCI_OP_WRITE\((\w*).*[1-4]\)/pci_bus_write_config_\1/' \ 203 205 --regex-c='/DEFINE_(MUTEX|SEMAPHORE|SPINLOCK)\((\w*)/\2/v/' \