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

Tobias Deiminger <[email protected]>
Newsgroups fr.inria.cocci
Message-ID <[email protected]>
Hi Julia,

Am 29.11.2025 11:56 schrieb Julia Lawall:
> 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.

sorry for having to ask again. Your suggestion sounds very reasonable. 
But I couldn't figure out how to match on attributes. I guessed it would 
be something like this

   @r@
   attribute a;
   identifier fn;
   @@

   a fn(...) { ... }

But that gives a .cocci parse error:

   minus: parse error:
     File "my.cocci", line 6, column 2, charpos = 38
     around = 'fn',
     whole content = a fn(...) { ... }

Expected, IIUC, since attribute doesn't occur in fundecl from grammar:

   fundecl ::=  [fn_ctype] funinfo * funid ([PARAMSEQ(param, ε)]) { 
[stmt_seq] }

How else to look for functions with attributes then?

Tobias
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.