qemu/scripts/tracetool/vcpu.py
<<
>>
Prefs
   1#!/usr/bin/env python
   2# -*- coding: utf-8 -*-
   3
   4"""
   5Generic management for the 'vcpu' property.
   6
   7"""
   8
   9__author__     = "Lluís Vilanova <vilanova@ac.upc.edu>"
  10__copyright__  = "Copyright 2016, Lluís Vilanova <vilanova@ac.upc.edu>"
  11__license__    = "GPL version 2 or (at your option) any later version"
  12
  13__maintainer__ = "Stefan Hajnoczi"
  14__email__      = "stefanha@linux.vnet.ibm.com"
  15
  16
  17from tracetool import Arguments, try_import
  18
  19
  20def 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
  39def 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
  71