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