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

control.h (6400B)


      1/*
      2 * Interface for configuring and controlling the state of tracing events.
      3 *
      4 * Copyright (C) 2011-2016 LluĂ­s Vilanova <vilanova@ac.upc.edu>
      5 *
      6 * This work is licensed under the terms of the GNU GPL, version 2 or later.
      7 * See the COPYING file in the top-level directory.
      8 */
      9
     10#ifndef TRACE__CONTROL_H
     11#define TRACE__CONTROL_H
     12
     13#include "event-internal.h"
     14
     15typedef struct TraceEventIter {
     16    /* iter state */
     17    size_t event;
     18    size_t group;
     19    /* filter conditions */
     20    size_t group_id;
     21    const char *pattern;
     22} TraceEventIter;
     23
     24
     25/**
     26 * trace_event_iter_init_all:
     27 * @iter: the event iterator struct
     28 *
     29 * Initialize the event iterator struct @iter,
     30 * for all events.
     31 */
     32void trace_event_iter_init_all(TraceEventIter *iter);
     33
     34/**
     35 * trace_event_iter_init_pattern:
     36 * @iter: the event iterator struct
     37 * @pattern: pattern to filter events on name
     38 *
     39 * Initialize the event iterator struct @iter,
     40 * using @pattern to filter out events
     41 * with non-matching names.
     42 */
     43void trace_event_iter_init_pattern(TraceEventIter *iter, const char *pattern);
     44
     45/**
     46 * trace_event_iter_init_group:
     47 * @iter: the event iterator struct
     48 * @group_id: group_id to filter events by group.
     49 *
     50 * Initialize the event iterator struct @iter,
     51 * using @group_id to filter for events in the group.
     52 */
     53void trace_event_iter_init_group(TraceEventIter *iter, size_t group_id);
     54
     55/**
     56 * trace_event_iter_next:
     57 * @iter: the event iterator struct
     58 *
     59 * Get the next event, if any. When this returns NULL,
     60 * the iterator should no longer be used.
     61 *
     62 * Returns: the next event, or NULL if no more events exist
     63 */
     64TraceEvent *trace_event_iter_next(TraceEventIter *iter);
     65
     66
     67/**
     68 * trace_event_name:
     69 * @id: Event name.
     70 *
     71 * Search an event by its name.
     72 *
     73 * Returns: pointer to #TraceEvent or NULL if not found.
     74 */
     75TraceEvent *trace_event_name(const char *name);
     76
     77/**
     78 * trace_event_is_pattern:
     79 *
     80 * Whether the given string is an event name pattern.
     81 */
     82static bool trace_event_is_pattern(const char *str);
     83
     84
     85/**
     86 * trace_event_get_id:
     87 *
     88 * Get the identifier of an event.
     89 */
     90static uint32_t trace_event_get_id(TraceEvent *ev);
     91
     92/**
     93 * trace_event_get_vcpu_id:
     94 *
     95 * Get the per-vCPU identifier of an event.
     96 *
     97 * Special value #TRACE_VCPU_EVENT_NONE means the event is not vCPU-specific
     98 * (does not have the "vcpu" property).
     99 */
    100static uint32_t trace_event_get_vcpu_id(TraceEvent *ev);
    101
    102/**
    103 * trace_event_is_vcpu:
    104 *
    105 * Whether this is a per-vCPU event.
    106 */
    107static bool trace_event_is_vcpu(TraceEvent *ev);
    108
    109/**
    110 * trace_event_get_name:
    111 *
    112 * Get the name of an event.
    113 */
    114static const char * trace_event_get_name(TraceEvent *ev);
    115
    116/**
    117 * trace_event_get_state:
    118 * @id: Event identifier name.
    119 *
    120 * Get the tracing state of an event, both static and the QEMU dynamic state.
    121 *
    122 * If the event has the disabled property, the check will have no performance
    123 * impact.
    124 */
    125#define trace_event_get_state(id)                       \
    126    ((id ##_ENABLED) && trace_event_get_state_dynamic_by_id(id))
    127
    128/**
    129 * trace_event_get_state_backends:
    130 * @id: Event identifier name.
    131 *
    132 * Get the tracing state of an event, both static and dynamic state from all
    133 * compiled-in backends.
    134 *
    135 * If the event has the disabled property, the check will have no performance
    136 * impact.
    137 *
    138 * Returns: true if at least one backend has the event enabled and the event
    139 * does not have the disabled property.
    140 */
    141#define trace_event_get_state_backends(id)              \
    142    ((id ##_ENABLED) && id ##_BACKEND_DSTATE())
    143
    144/**
    145 * trace_event_get_state_static:
    146 * @id: Event identifier.
    147 *
    148 * Get the static tracing state of an event.
    149 *
    150 * Use the define 'TRACE_${EVENT_NAME}_ENABLED' for compile-time checks (it will
    151 * be set to 1 or 0 according to the presence of the disabled property).
    152 */
    153static bool trace_event_get_state_static(TraceEvent *ev);
    154
    155/**
    156 * trace_event_get_state_dynamic:
    157 *
    158 * Get the dynamic tracing state of an event.
    159 *
    160 * If the event has the 'vcpu' property, gets the OR'ed state of all vCPUs.
    161 */
    162static bool trace_event_get_state_dynamic(TraceEvent *ev);
    163
    164/**
    165 * trace_event_set_state_dynamic:
    166 *
    167 * Set the dynamic tracing state of an event.
    168 *
    169 * If the event has the 'vcpu' property, sets the state on all vCPUs.
    170 *
    171 * Pre-condition: trace_event_get_state_static(ev) == true
    172 */
    173void trace_event_set_state_dynamic(TraceEvent *ev, bool state);
    174
    175/**
    176 * trace_event_set_vcpu_state_dynamic:
    177 *
    178 * Set the dynamic tracing state of an event for the given vCPU.
    179 *
    180 * Pre-condition: trace_event_get_vcpu_state_static(ev) == true
    181 *
    182 * Note: Changes for execution-time events with the 'tcg' property will not be
    183 *       propagated until the next TB is executed (iff executing in TCG mode).
    184 */
    185void trace_event_set_vcpu_state_dynamic(CPUState *vcpu,
    186                                        TraceEvent *ev, bool state);
    187
    188
    189
    190/**
    191 * trace_init_backends:
    192 *
    193 * Initialize the tracing backend.
    194 *
    195 * Returns: Whether the backends could be successfully initialized.
    196 */
    197bool trace_init_backends(void);
    198
    199/**
    200 * trace_init_file:
    201 *
    202 * Record the name of the output file for the tracing backend.
    203 * Exits if no selected backend does not support specifying the
    204 * output file, and a file was specified with "-trace file=...".
    205 */
    206void trace_init_file(void);
    207
    208/**
    209 * trace_init_vcpu:
    210 * @vcpu: Added vCPU.
    211 *
    212 * Set initial dynamic event state for a hot-plugged vCPU.
    213 */
    214void trace_init_vcpu(CPUState *vcpu);
    215
    216/**
    217 * trace_fini_vcpu:
    218 * @vcpu: Removed vCPU.
    219 *
    220 * Disable dynamic event state for a hot-unplugged vCPU.
    221 */
    222void trace_fini_vcpu(CPUState *vcpu);
    223
    224/**
    225 * trace_list_events:
    226 * @f: Where to send output.
    227 *
    228 * List all available events.
    229 */
    230void trace_list_events(FILE *f);
    231
    232/**
    233 * trace_enable_events:
    234 * @line_buf: A string with a glob pattern of events to be enabled or,
    235 *            if the string starts with '-', disabled.
    236 *
    237 * Enable or disable matching events.
    238 */
    239void trace_enable_events(const char *line_buf);
    240
    241/**
    242 * Definition of QEMU options describing trace subsystem configuration
    243 */
    244extern QemuOptsList qemu_trace_opts;
    245
    246/**
    247 * trace_opt_parse:
    248 * @optarg: A string argument of --trace command line argument
    249 *
    250 * Initialize tracing subsystem.
    251 */
    252void trace_opt_parse(const char *optarg);
    253
    254/**
    255 * trace_get_vcpu_event_count:
    256 *
    257 * Return the number of known vcpu-specific events
    258 */
    259uint32_t trace_get_vcpu_event_count(void);
    260
    261
    262#include "control-internal.h"
    263
    264#endif /* TRACE__CONTROL_H */