Here's a set of patches with the current state of static instrumentation. Hope that this organization will help understanding the point of it. Patch 9 describes the taken approach for instrumenting during code generation, which is the main point of this.
Code can also be reached at: https://projects.gso.ac.upc.edu/projects/qemu-instrument https://code.gso.ac.upc.edu/git/qemu-instrument Lluís Vilanova (17): backdoor: Declare host-side backdoor helpers backdoor: [all] Include backdoor helper declarations backdoor: Declare guest-side interface macros backdoor: [i386] Decode backdoor instructions backdoor: [i386] Declare guest-side interface macros backdoor: Add a simple example instrument: Handle config-time activation instrument: Add initial instrumentation example instrument: Dynamic per-CPU state of static instrumentation points instrument: Code-generation macros instrument: [all] Include instrumentation helper declarations instrument: Add FETCH point instrument: [i386] Call FETCH point instrument: Add VMEM point instrument: [all] Call VMEM point instrument: Add PLVL point instrument: [i386] Call PLVL point .gitignore | 2 + Makefile.target | 35 +++++- backdoor/examples/print/README | 13 ++ backdoor/examples/print/guest/Makefile | 7 + backdoor/examples/print/guest/test.c | 33 +++++ backdoor/examples/print/host/Makefile | 13 ++ backdoor/examples/print/host/printcb.c | 36 +++++ backdoor/guest.h | 60 ++++++++ backdoor/helper.h | 21 +++ configure | 19 +++ cpu-all.h | 74 ++++++---- cpu-defs.h | 24 +++ cpu-exec.c | 8 +- cpus.c | 8 + exec-all.h | 7 +- exec.c | 50 +++++--- instrument/control.c | 74 ++++++++++ instrument/control.h | 44 ++++++ instrument/examples/dynprint/README | 16 ++ instrument/examples/dynprint/guest/Makefile | 7 + instrument/examples/dynprint/guest/test.c | 62 ++++++++ instrument/examples/dynprint/host/Makefile | 14 ++ instrument/examples/dynprint/host/backdoor.c | 61 ++++++++ instrument/examples/dynprint/host/helpers.c | 86 ++++++++++++ .../dynprint/host/instrument-host-helpers.h | 22 +++ .../examples/dynprint/host/instrument-host.h | 81 +++++++++++ instrument/gen-vmem-wrappers.h | 88 ++++++++++++ instrument/generate.h | 128 +++++++++++++++++ instrument/host-stub.h | 81 +++++++++++ instrument/state.h | 61 ++++++++ instrument/types.h | 44 ++++++ linux-user/main.c | 12 ++ qemu-common.h | 4 + softmmu_header.h | 15 ++ target-alpha/helper.h | 8 + target-alpha/translate.c | 4 + target-arm/helper.h | 8 + target-arm/translate.c | 4 + target-cris/helper.h | 8 + target-cris/translate.c | 4 + target-i386/cpu.h | 21 ++-- target-i386/helper.h | 8 + target-i386/translate.c | 147 ++++++++++++++++++++ target-m68k/helper.h | 8 + target-m68k/translate.c | 4 + target-microblaze/helper.h | 8 + target-microblaze/translate.c | 10 ++ target-mips/helper.h | 8 + target-mips/translate.c | 4 + target-ppc/helper.h | 8 + target-ppc/translate.c | 4 + target-s390x/translate.c | 4 + target-sh4/helper.h | 8 + target-sh4/translate.c | 4 + target-sparc/helper.h | 8 + target-sparc/translate.c | 4 + 56 files changed, 1543 insertions(+), 61 deletions(-) create mode 100644 backdoor/examples/print/README create mode 100644 backdoor/examples/print/guest/Makefile create mode 100644 backdoor/examples/print/guest/test.c create mode 100644 backdoor/examples/print/host/Makefile create mode 100644 backdoor/examples/print/host/printcb.c create mode 100644 backdoor/guest.h create mode 100644 backdoor/helper.h create mode 100644 instrument/control.c create mode 100644 instrument/control.h create mode 100644 instrument/examples/dynprint/README create mode 100644 instrument/examples/dynprint/guest/Makefile create mode 100644 instrument/examples/dynprint/guest/test.c create mode 100644 instrument/examples/dynprint/host/Makefile create mode 100644 instrument/examples/dynprint/host/backdoor.c create mode 100644 instrument/examples/dynprint/host/helpers.c create mode 100644 instrument/examples/dynprint/host/instrument-host-helpers.h create mode 100644 instrument/examples/dynprint/host/instrument-host.h create mode 100644 instrument/gen-vmem-wrappers.h create mode 100644 instrument/generate.h create mode 100644 instrument/host-stub.h create mode 100644 instrument/state.h create mode 100644 instrument/types.h -- "And it's much the same thing with knowledge, for whenever you learn something new, the whole world becomes that much richer." -- The Princess of Pure Reason, as told by Norton Juster in The Phantom Tollbooth