On Tue, 22 Jul 2014, Riccardo Lucchese wrote:
> Hello,
>
> Running the command (semantic patch is attached)
>
> $ spatch --sp-file macro-err.cocci --dir
> drivers/staging/octeon-usb/octeon-hcd.c
>
> from the root dir of linux-next-20140721, yields the following error:
>
> init_defs_builtins: /usr/local/share/coccinelle/standard.h
> HANDLING: drivers/staging/octeon-usb/octeon-hcd.c
> Fatal error: exception Failure("drivers/staging/octeon-usb/octeon-hcd.c: 429:
> try to delete an expanded token: {")
>
>
> The code around where the exception happens (--->) reads:
>
> /* This macro spins on a field waiting for it to reach a value */
> #define CVMX_WAIT_FOR_FIELD32(address, type, field, op, value, timeout_usec)\
> ---> ({int result; \
> do { \
> uint64_t done = cvmx_get_cycle() + (uint64_t)timeout_usec * \
> octeon_get_clock_rate() / 1000000; \
> type c; \
> while (1) { \
> c.u32 = __cvmx_usb_read_csr32(usb, address); \
> if (c.s.field op (value)) { \
> result = 0; \
> break; \
> } else if (cvmx_get_cycle() > done) { \
> result = -1; \
> break; \
> } else \
> cvmx_wait(100); \
> } \
> } while (0); \
> result; })
>
>
> Should I change something in my invocation to deal with this macro ?
One solution is to add the following command-line argument:
--disable-multi-pass
Then it will not try to take macros into account on a parse failure. But
there may be other macros whose definitions do need to be taken into
account to get parsing to succeed.
Another option is to extend standard.h with
#define CVMX_WAIT_FOR_FIELD32(a,b,c,d,e,f)
and then give the resulting file with the argument --macro-file-builtins.
That will make it use your standard.h definition before it tries the real
definition.
julia
_______________________________________________
Cocci mailing list
[email protected]
https://systeme.lip6.fr/mailman/listinfo/cocci