On Thu, Jun 11, 2020 at 01:56:51AM -0400, Alexander Bulekov wrote: > Signed-off-by: Alexander Bulekov <alx...@bu.edu> > --- > exec.c | 17 ++++++++++++++++- > include/exec/memory.h | 8 ++++++++ > include/exec/memory_ldst_cached.inc.h | 9 +++++++++ > include/sysemu/dma.h | 5 ++++- > memory_ldst.inc.c | 12 ++++++++++++ > 5 files changed, 49 insertions(+), 2 deletions(-)
Please rename dma_read_cb() to fuzz_dma_read_cb() so the purpose of the function is clear. The ifdefs can be avoided by defining an empty function when CONFIG_FUZZ is undefined. In a header file: #ifdef CONFIG_FUZZ void fuzz_dma_read_cb(size_t addr, size_t len); #else static inline void fuzz_dma_read_cb(size_t addr, size_t len) { /* Do nothing */ } #endif Now the compiler should eliminate the deadcode: #ifdef CONFIG_FUZZ if (as->root == get_system_memory()) { dma_read_cb(addr, len); } #endif becomes: if (as->root == get_system_memory()) { fuzz_dma_read_cb(addr, len); } Hopefully gcc and clang will eliminate this and emit no instructions when CONFIG_FUZZ is undefined. If not, you can simply pass in 'as' and 'is_write' too: void fuzz_dma_read_cb(AddressSpace *as, bool is_write, size_t addr, size_t len) This way the conditional is moved inside fuzz_dma_read_cb() and deadcode elimination becomes trivial for the compiler: fuzz_read_cb(as, is_write, addr, len);
signature.asc
Description: PGP signature