Re: [cocci] Can we match a known macro by macro name instead of expanded function name?

Julia Lawall <[email protected]>
Newsgroups fr.inria.cocci
Message-ID <[email protected]>

On Sat, 29 Nov 2025, Tobias Deiminger wrote:

> Hi,
>
> my newbie assumption was we could match the following by macro name
>
>   // my.c
>   SYSCALL_DEFINE0(foo_bar) { return; }
>
> using this rules
>
>   // my.cocci
>   @r@
>   identifier fn =~ "SYSCALL_DEFINE[0-6]+";
>   position p;
>   @@
>   fn@p(...) {...}
>
>   @script:python@
>   fn << r.fn;
>   p << r.p;
>   @@
>   print(f"match: {fn} at line {p[0].current_element_line}")
>
>
> Turns out, SYSCALL_DEFINE0 is a "known macro" from
> /usr/lib/coccinelle/standard.h. In this case coccinelle seems to match an
> identifier on the expanded function name, not the macro name. I.e., this would
> work:
>
>   identifier fn =~ "foo.*";
>
> But I really want to search all syscalls by the conventional macro names, i.e.
> search for SYSCALL_DEFINE[0-6]+. How to do that?

The problem is that the code won't parse with the conventional macro
name.  Maybe you could change the macro definition in standard.h to put eg
__SYSCALL_DEFINE0 in front of the function name?  That would be considered
to be an attribute and then you could put __SYSCALL_DEFINE0 as an
attribute name in your semantic patch.

The position also can't be on the expanded part.  That will give you a
position in standard.h.  Just move it to the {

julia
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.