On Wed, 18 Sept 2024 at 22:08, Alex Bennée <alex.ben...@linaro.org> wrote: > > The following changes since commit 2b81c046252fbfb375ad30632362fc16e6e22bd5: > > Merge tag 'block-pull-request' of https://gitlab.com/stefanha/qemu into > staging (2024-09-17 14:02:18 +0100) > > are available in the Git repository at: > > https://gitlab.com/stsquad/qemu.git tags/pull-tcg-plugin-memory-180924-2 > > for you to fetch changes up to a33f4871e0a0f4bf1cb037ab29fae7df7f2fc658: > > contrib/plugins: avoid hanging program (2024-09-18 21:02:36 +0100) > > ---------------------------------------------------------------- > TCG plugin memory instrumentation updates > > - deprecate plugins on 32 bit hosts > - deprecate plugins with TCI > - extend memory API to save value > - add check-tcg tests to exercise new memory API > - fix timer deadlock with non-changing timer > - add basic block vector plugin to contrib > - add cflow plugin to contrib > - extend syscall plugin to dump write memory > - validate ips plugin arguments meet minimum slice value > > ----------------------------------------------------------------
Fails to build on macos: https://gitlab.com/qemu-project/qemu/-/jobs/7865151156 ../tests/tcg/plugins/mem.c:12:10: fatal error: 'endian.h' file not found endian.h is a Linuxism. While I'm looking at the code, this caught my eye: case QEMU_PLUGIN_MEM_VALUE_U64: { uint64_t *p = (uint64_t *) &ri->data[offset]; uint64_t val = be ? htobe64(value.data.u64) : htole64(value.data.u64); if (is_store) { *p = val; } else if (*p != val) { unseen_data = true; } break; } Casting a random byte pointer to uint64_t* like that and dereferencing it isn't valid -- it can fault if it's not aligned correctly. I suspect the plugin needs to define versions of at least some of the functionality in qemu's include/qemu/bswap.h. thanks -- PMM