cachepc-qemu

Fork of AMDESE/qemu with changes for cachepc side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-qemu
Log | Files | Refs | Submodules | LICENSE | sfeed.txt

vcpu.py (2055B)


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