Browse Source
This property identifies events that trace vCPU-specific information. It adds a "CPUState*" argument to events with the property, identifying the vCPU raising the event. TCG translation events also have a "TCGv_env" implicit argument that is later used as the "CPUState*" argument at execution time. Signed-off-by: Lluís Vilanova <vilanova@ac.upc.edu> Message-id: 145641861797.30295.6991314023181842105.stgit@localhost Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>pull/7/merge
committed by
Stefan Hajnoczi
11 changed files with 189 additions and 32 deletions
@ -0,0 +1,70 @@ |
|||
#!/usr/bin/env python |
|||
# -*- coding: utf-8 -*- |
|||
|
|||
""" |
|||
Generic management for the 'vcpu' property. |
|||
|
|||
""" |
|||
|
|||
__author__ = "Lluís Vilanova <vilanova@ac.upc.edu>" |
|||
__copyright__ = "Copyright 2016, Lluís Vilanova <vilanova@ac.upc.edu>" |
|||
__license__ = "GPL version 2 or (at your option) any later version" |
|||
|
|||
__maintainer__ = "Stefan Hajnoczi" |
|||
__email__ = "stefanha@linux.vnet.ibm.com" |
|||
|
|||
|
|||
from tracetool import Arguments, try_import |
|||
|
|||
|
|||
def transform_event(event): |
|||
"""Transform event to comply with the 'vcpu' property (if present).""" |
|||
if "vcpu" in event.properties: |
|||
# events with 'tcg-trans' and 'tcg-exec' are auto-generated from |
|||
# already-patched events |
|||
assert "tcg-trans" not in event.properties |
|||
assert "tcg-exec" not in event.properties |
|||
|
|||
event.args = Arguments([("CPUState *", "__cpu"), event.args]) |
|||
if "tcg" in event.properties: |
|||
fmt = "\"cpu=%p \"" |
|||
event.fmt = [fmt + event.fmt[0], |
|||
fmt + event.fmt[1]] |
|||
else: |
|||
fmt = "\"cpu=%p \"" |
|||
event.fmt = fmt + event.fmt |
|||
return event |
|||
|
|||
|
|||
def transform_args(format, event, *args, **kwargs): |
|||
"""Transforms the arguments to suit the specified format. |
|||
|
|||
The format module must implement function 'vcpu_args', which receives the |
|||
implicit arguments added by the 'vcpu' property, and must return suitable |
|||
arguments for the given format. |
|||
|
|||
The function is only called for events with the 'vcpu' property. |
|||
|
|||
Parameters |
|||
========== |
|||
format : str |
|||
Format module name. |
|||
event : Event |
|||
args, kwargs |
|||
Passed to 'vcpu_transform_args'. |
|||
|
|||
Returns |
|||
======= |
|||
Arguments |
|||
The transformed arguments, including the non-implicit ones. |
|||
|
|||
""" |
|||
if "vcpu" in event.properties: |
|||
ok, func = try_import("tracetool.format." + format, |
|||
"vcpu_transform_args") |
|||
assert ok |
|||
assert func |
|||
return Arguments([func(event.args[:1], *args, **kwargs), |
|||
event.args[1:]]) |
|||
else: |
|||
return event.args |
|||
Loading…
Reference in new issue