]>
Commit | Line | Data |
---|---|---|
3d211d9f LV |
1 | #!/usr/bin/env python |
2 | # -*- coding: utf-8 -*- | |
3 | ||
4 | """ | |
5 | Generic management for the 'vcpu' property. | |
6 | ||
7 | """ | |
8 | ||
9 | __author__ = "Lluís Vilanova <[email protected]>" | |
10 | __copyright__ = "Copyright 2016, Lluís Vilanova <[email protected]>" | |
11 | __license__ = "GPL version 2 or (at your option) any later version" | |
12 | ||
13 | __maintainer__ = "Stefan Hajnoczi" | |
14 | __email__ = "[email protected]" | |
15 | ||
16 | ||
17 | from tracetool import Arguments, try_import | |
18 | ||
19 | ||
20 | def transform_event(event): | |
21 | """Transform event to comply with the 'vcpu' property (if present).""" | |
22 | if "vcpu" in event.properties: | |
23 | # events with 'tcg-trans' and 'tcg-exec' are auto-generated from | |
24 | # already-patched events | |
25 | assert "tcg-trans" not in event.properties | |
26 | assert "tcg-exec" not in event.properties | |
27 | ||
28 | event.args = Arguments([("CPUState *", "__cpu"), event.args]) | |
29 | if "tcg" in event.properties: | |
30 | fmt = "\"cpu=%p \"" | |
31 | event.fmt = [fmt + event.fmt[0], | |
32 | fmt + event.fmt[1]] | |
33 | else: | |
34 | fmt = "\"cpu=%p \"" | |
35 | event.fmt = fmt + event.fmt | |
36 | return event | |
37 | ||
38 | ||
39 | def transform_args(format, event, *args, **kwargs): | |
40 | """Transforms the arguments to suit the specified format. | |
41 | ||
42 | The format module must implement function 'vcpu_args', which receives the | |
43 | implicit arguments added by the 'vcpu' property, and must return suitable | |
44 | arguments for the given format. | |
45 | ||
46 | The function is only called for events with the 'vcpu' property. | |
47 | ||
48 | Parameters | |
49 | ========== | |
50 | format : str | |
51 | Format module name. | |
52 | event : Event | |
53 | args, kwargs | |
54 | Passed to 'vcpu_transform_args'. | |
55 | ||
56 | Returns | |
57 | ======= | |
58 | Arguments | |
59 | The transformed arguments, including the non-implicit ones. | |
60 | ||
61 | """ | |
62 | if "vcpu" in event.properties: | |
63 | ok, func = try_import("tracetool.format." + format, | |
64 | "vcpu_transform_args") | |
65 | assert ok | |
66 | assert func | |
67 | return Arguments([func(event.args[:1], *args, **kwargs), | |
68 | event.args[1:]]) | |
69 | else: | |
70 | return event.args |