tech-kern archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: KASSERTMSG fix
On Wed, Sep 07, 2011 at 06:14:19PM +0200, Joerg Sonnenberger wrote:
>
> > This can work around the limitations elegantly though (provided all call
> > sites are fixed):
> >
> > #define KASSERTMSG(e, fmt, ...) do { \
> > panic( \
> > "kernel diag assert \"%s\" failed: file \"%s\", line %d; " fmt, \
> > #e, __FILE__, __LINE__, ## __VA_ARGS__); \
> > } while(0)
>
> That assumes that fmt is a string literal. I don't think it is easier
> than:
>
> panic_verbose(__FILE__, __LINE__, #e, fmt, ##__VA_ARGS__);
The latter has the advantage that the string for __FILE__ will
only occur once in the object file.
However it might be better do something like:
(a static inline might be easier to define)
#define KASSERTMSG(e1, op, e2, fmt, ...) do { \
uintptr_t _e1 = (uintptr_t)e1, _e2 = (uintptr_t)e2; \
if (!(_e1 op _e2)) \
panic_verbose(__FILE__, __LINE__, #e1, _e1, #op, #e2, _e2, \
fmt, ##__VA_ARGS__); \
} while (0)
So that the output can contain the numeric values that failed the compare.
David
--
David Laight: david%l8s.co.uk@localhost
Home |
Main Index |
Thread Index |
Old Index