Hi Ingo,
I played a bit with my marker proof of concept, it now makes a lot more sense.
Here it is. Comments are welcome.
It supports 5 modes :
- marker becomes nothing
- marker calls printk
- marker calls a tracer
- marker puts a symbol (for kprobe)
- marker puts a symbol and 5 NOPS for a jump probe.
Mathieu
-----BEGIN-----
/* Macro example for instrumentation
*
* Version 0.0.2
*
* Mathieu Desnoyers [email protected]
*
* This is released under the GPL v2 (or better) license.
*/
#include <stdio.h>
/* This is an example of noop, get this from the current arch header */
#define GENERIC_NOP1 ".byte 0x90\n"
/* PUT THIS IN A INCLUDE/LINUX HEADER */
#define __stringify_1(x) #x //see include/linux/stringify.h
#define __stringify(x) __stringify_1(x)
#define KBUILD_BASENAME basename
#define KBUILD_MODNAME modulename
#define MARK_SYM(event) \
__asm__ ( "__mark_"__stringify(KBUILD_MODNAME)"_"__stringify(KBUILD_BASENAME)"_"#event":" )
/* With config menu mutual exclusion of choice */
#ifdef CONFIG_NOLOG
#define MARK(event, format, args...)
#endif
#ifdef CONFIG_PRINTLOG
#define MARK(event, format, args...) \
printf(format, ##args);
#endif
#ifdef CONFIG_TRACELOG
#define MARK(event, format, args...) \
trace_##event( args );
#endif
#ifdef CONFIG_KPROBELOG
#define MARK(event, format, args...) \
{ \
MARK_SYM(event); \
}
#endif
#ifdef CONFIG_JUMPPROBELOG
#define MARK(event, format, args...) \
{ \
MARK_SYM(event); \
__asm__ ( GENERIC_NOP1 GENERIC_NOP1 GENERIC_NOP1 GENERIC_NOP1 GENERIC_NOP1 ); \
}
#endif
/* PUT THIS IN A HEADER NEAR THE .C FILE */
#ifdef CONFIG_TRACELOG
static inline void trace_eventname(int a, char *b)
{
/* log.... */
printf("Tracing event : first arg %d, second arg %s", a, b);
}
#endif
/* PUT THIS IN THE .C FILE */
int main()
{
int myint = 55;
char * mystring = "blah";
MARK(eventname, "%d %s", myint, mystring);
printf("\n");
return 0;
}
-----END-----
OpenPGP public key: http://krystal.dyndns.org:8080/key/compudj.gpg
Key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[Index of Archives]
[Kernel Newbies]
[Netfilter]
[Bugtraq]
[Photo]
[Stuff]
[Gimp]
[Yosemite News]
[MIPS Linux]
[ARM Linux]
[Linux Security]
[Linux RAID]
[Video 4 Linux]
[Linux for the blind]
[Linux Resources]