On Sat, 16 May 2020, Chuhong Yuan wrote:
> On Sat, May 16, 2020 at 4:49 PM Julia Lawall <[email protected]> wrote:
> >
> >
> >
> > On Sat, 16 May 2020, Chuhong Yuan wrote:
> >
> > > Hi all,
> > > I want to write a script to match function calls in macros
> > > but I don't know how to do that.
> > > Here is an example:
> > >
> > > #define __INIT_WORK(_work, _func, _onstack) \
> > > do { \
> > > static struct lock_class_key __key; \
> > > \
> > > __init_work((_work), _onstack); \
> > > (_work)->data = (atomic_long_t) WORK_DATA_INIT(); \
> > > lockdep_init_map(&(_work)->lockdep_map,
> > > "(work_completion)"#_work, &__key, 0); \
> > > INIT_LIST_HEAD(&(_work)->entry); \
> > > (_work)->func = (_func); \
> > > } while (0)
> > >
> > > In this example, I want to match function calls
> > > like __init_work() and lockdep_init_map() in this macro.
> > > So how to implement this by Coccinelle?
> >
> > I would suggest to take your file and run spatch --parse-c on the file.
> > If you find BAD or bad in front of the lines of this code then the problem
> > is that the code is not being parsed. I suspect that the # is the
> > problem.
> >
>
> I have run parse-c and it says the example file is perfect.
>
> > Normally, Coccinelle will match code inside of macro definitions, but only
> > if it is able to parse the macro definition, and the ability to parse
> > macro definitions is somewhat limited.
> >
>
> My expression is not very clear.
> I want to know which macros have function calls and what functions do they
> call.
> So I wrote a script like this:
>
> - #define mac(...) ... f(...) ...
>
> But it does not work on the example.
Try:
@@
identifier mac,f;
@@
*#define mac(...) <+... f(...) ...+>
... means that the code before and after the ... cannot be matched by the
... when considering control-flow paths. Your macro is a loop, so there
is one call to f(...) after another. Coccinelle doesn't evaluate values,
so it doesn't realize that a while(0) won't loop.
julia
_______________________________________________
Cocci mailing list
[email protected]
https://systeme.lip6.fr/mailman/listinfo/cocci