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