On Thu, Oct 11, 2018 at 03:26:47PM +0200, SF Markus Elfring wrote:
> > Interestingly, if I do the following then that works too without needing
> > 'exists':
>
> How do you think about the following variant for a SmPL rule in your
> source code analysis approach?
>
>
> @pte_args depends on report@
> identifier I;
> type T;
> position p;
> @@
> pte_alloc@p(..., T I)
> {
> <+... I ...+>
> }
The thing is I know the exact parameter to match, and they are fixed in
number so I don't really care about that. But I am struggling a little with
other things and would like help from you and Julia. There are 3 things (and
sorry if some of this is like, wishful stuff, but I thought its better to ask
than not and may be let you know what features would be useful):
1. How do I match function names partially? For example I want to do,
something like this but I get errors, so I have to write a rule for each
function name variant, like pte_alloc_one, or for __pte_alloc. That can be
error prone if I miss something.
@pte_args depends on report@
identifier E1, E2;
type T1, T2;
position p;
@@
...pte_alloc...@p(T1 E1, T2 E2)
{
<+...
E2
...+>
}
2. How do I write a rule that renames function names using the "(" and "|"
syntax? I can do it for callers, but for function names this technique fails
as shown below, so again I have to end up writing separate rules:
// Options: --no-includes --include-headers
@pte_args1 depends on patch exists@
identifier E1, E2;
type T1, T2;
@@
(
- pte_alloc(T1 E1, T2 E2)
+ pte_alloc(T1 E1)
|
- pte_alloc_kernel(T1 E1, T2 E2)
+ pte_alloc_kernel(T1 E1)
)
{ ... }
Also something like the partial match would be even better, so something like:
- ...pte_alloc...@p(T1 E1, T2 E2)
+ ...pte_alloc...@p(T1 E1)
{ ... }
And I want to do the same thing for callers as well:
- ...pte_alloc...@p(T1 E1, T2 E2);
+ ...pte_alloc...@p(T1 E1);
Atleast for callers, the "(" and "|" syntax works, but for function
definitions, nothing works so I have to end up writing separate rules.
3. How do I match macro definitions of pte_alloc defined using #define, and
apply rules on those? (also perhaps match *pte_alloc*). I tried writing
various rules to no luck making the spatch happy.
thanks,
- Joel
_______________________________________________
Cocci mailing list
[email protected]
https://systeme.lip6.fr/mailman/listinfo/cocci