Lluís Vilanova writes:
[...]
> diff --git a/trace/mem-internal.h b/trace/mem-internal.h
> new file mode 100644
> index 0000000..970d525
> --- /dev/null
> +++ b/trace/mem-internal.h
> @@ -0,0 +1,46 @@
> +/*
> + * Helper functions for guest memory tracing
> + *
> + * Copyright (C) 2016 Lluís Vilanova <vilan...@ac.upc.edu>
> + *
> + * This work is licensed under the terms of the GNU GPL, version 2 or later.
> + * See the COPYING file in the top-level directory.
> + */
> +
> +#ifndef TRACE__MEM_INTERNAL_H
> +#define TRACE__MEM_INTERNAL_H
> +
> +static inline uint8_t trace_mem_get_info(TCGMemOp op, bool store)
> +{
> +    uint8_t res = op;
> +    bool be = (op & MO_BSWAP) == MO_BE;
> +
> +    /* remove untraced fields */
> +    res &= (~((1ULL << 4) - 1));
> +    /* make endianness absolute */
> +    res &= ~MO_BSWAP;
> +    if (be) {
> +        res |= 1ULL << 3;
> +    }
> +    /* add fields */
> +    if (store) {
> +        res |= 1ULL << 4;
> +    }
> +
> +    return res;
> +}
[...]

I forgot to comment on the commit message/code why I'm ignoring the
MO_ALIGN/MO_UNALN flag.

In principle, these are plainly calculable from the virtual address and target
architecture, so I decided to not emit them on the trace to keep it as simple as
possible.


Cheers,
  Lluis

Reply via email to