cocci-tact: Demo for instrumenting with Coccinelle ==================================================== This is a basic demo to show how one can do instrumentation with Coccinelle. The problem ============= Some Linux kernel debugging features often require adding a lot of debug data structures to a source code repository, often this is addressed with CONFIG_DEBUG_* features but sometimes maintaining this upstream on Linux is not really welcomed due to how intrusive your changes may be or the difficulty in maintaining it properly. Sometimes such code can simply increase the complexity of what developers see, and can often riddle developers how to address its use / extending it / or replacing your instrumentation code. Instrumenting with Coccinelle =============================== Coccinelle enables a possible alternative: modify upstream code only when you need it, for a throw away debugging kernel. Your instrumentation then can be compartamentalized as much as possible upstream, and changes to existing code kept separate, outside of what developers see. This demo illustrates adding some form of instrumentation basic templates to code in userspace by trying to take advantage of a simple line which would be assumed to be upstream: on code pthread_mutex_protects_3(). In this case pthread_mutex_protects_3() provides Coccinelle with hints over what data structures a mutex protects. It is the goal of the instrumentation mechanisms being developed here to either fix or debug this code without affecting readability for users or average developers of the code. This demo is written in userspace to help facilitate testing of ideas. Instrumentation ideas are not yet complete but its the hope this provides enough examples to show how this sort of work might look like. Locking would just be one area that could use this. There are obviously other domains that could benefit from this. Requirements ============== * Coccinelle >= 1.0.2 * gcc * make Usage ======= To see the problem run: make ./main To see what the instrumentation does: make coccicheck git diff This doesn't do anything quite useful just yet.