Skip to contentSkip to conversation

TranslationBlock annotation mechanism

RFC PATCH New Peer Adelt 1 participant 1 message Jan 8, 2016

lore
Share & tools
lore

Peer Adelt

author
#0 lore raw

cover TranslationBlock annotation mechanism

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