diff options
author | Alex Bennée <alex.bennee@linaro.org> | 2019-06-19 20:20:08 +0100 |
---|---|---|
committer | Alex Bennée <alex.bennee@linaro.org> | 2019-10-28 15:12:38 +0000 |
commit | 235537fa7347a151ebd7a755e81819a52b3b2195 (patch) | |
tree | 275e9aa873062f61238a10eb90f7d54f1e4a57f8 /include/qemu/plugin-memory.h | |
parent | e6d86bed50d20101c565e149c33e07a5cc764c72 (diff) | |
download | qemu-235537fa7347a151ebd7a755e81819a52b3b2195.zip qemu-235537fa7347a151ebd7a755e81819a52b3b2195.tar.gz qemu-235537fa7347a151ebd7a755e81819a52b3b2195.tar.bz2 |
plugins: implement helpers for resolving hwaddr
We need to keep a local per-cpu copy of the data as other threads may
be running. Currently we can provide insight as to if the access was
IO or not and give the offset into a given device (usually the main
RAMBlock). We store enough information to get details such as the
MemoryRegion which might be useful in later expansions to the API.
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Diffstat (limited to 'include/qemu/plugin-memory.h')
-rw-r--r-- | include/qemu/plugin-memory.h | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/include/qemu/plugin-memory.h b/include/qemu/plugin-memory.h new file mode 100644 index 0000000..fbbe994 --- /dev/null +++ b/include/qemu/plugin-memory.h @@ -0,0 +1,40 @@ +/* + * Plugin Memory API + * + * Copyright (c) 2019 Linaro Ltd + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#ifndef _PLUGIN_MEMORY_H_ +#define _PLUGIN_MEMORY_H_ + +struct qemu_plugin_hwaddr { + bool is_io; + bool is_store; + union { + struct { + MemoryRegionSection *section; + hwaddr offset; + } io; + struct { + uint64_t hostaddr; + } ram; + } v; +}; + +/** + * tlb_plugin_lookup: query last TLB lookup + * @cpu: cpu environment + * + * This function can be used directly after a memory operation to + * query information about the access. It is used by the plugin + * infrastructure to expose more information about the address. + * + * It would only fail if not called from an instrumented memory access + * which would be an abuse of the API. + */ +bool tlb_plugin_lookup(CPUState *cpu, target_ulong addr, int mmu_idx, + bool is_store, struct qemu_plugin_hwaddr *data); + +#endif /* _PLUGIN_MEMORY_H_ */ |