Hey guys :) We have developed a generic concept to annotate TranslationBlocks during runtime. The initial idea was to use it for time annotation with data from static analysis tools. However, we have kept this approach as generic as possible to allow other kinds of annotation (e.g. power consumption, etc.).
Our extension expects an XML file specifying the CFG of the program (similar to what you get from "gcc -ftree-dump-cfg"), where the edges are annotated with the data, that QEMU ought to accumulate during program execution. Each edge has a source and target context in which it is executed. For example: a for-loop that runs several times has its own context dependent edge for each iteration. We plan on making this more flexible by allowing to specify iterative context edges, i.e. from context n to context n+1. This approach is not limited to one target architecture but we only tested it for ARM and TriCore so far. To show the current state of this patch we have attached a very small example consisting of an ARM STM32F205 program and a timing annotation XML file (see reply to this letter). You can provide the XML file to QEMU with the "-annotation <XML-File>" option. During execution, the "value_sum" field of the CPUState data structure will accumulate a total value of 70 (cycles). Are there any comments? Is this in general a good idea to be added to upstream QEMU? All the best, Peer Peer Adelt (3): tb-annotation: Added annotation XML file parser tb-annotation: Add control flow graph mapper tb-annotation: Activate annotation extension Makefile | 5 +- Makefile.objs | 4 + Makefile.target | 4 +- configure | 13 ++ include/exec/gen-icount.h | 18 +++ include/qom/cpu.h | 9 ++ include/tb-annotation/tb-annotation-parser.h | 29 +++++ include/tb-annotation/tb-annotation.h | 64 ++++++++++ qemu-options.hx | 8 ++ tb-annotation/Makefile.objs | 1 + tb-annotation/tb-annotation-parser.c | 174 +++++++++++++++++++++++++++ tcg-runtime.c | 99 +++++++++++++++ tcg/tcg-runtime.h | 4 + vl.c | 25 ++++ 14 files changed, 454 insertions(+), 3 deletions(-) create mode 100644 include/tb-annotation/tb-annotation-parser.h create mode 100644 include/tb-annotation/tb-annotation.h create mode 100644 tb-annotation/Makefile.objs create mode 100644 tb-annotation/tb-annotation-parser.c -- 2.5.0