This patchset removes the ad-hoc debug code in target-arm for identifying cases where we leaked TCG temporary variables, in favour of an implementation in tcg itself.
Generally any temporaries created by a target while it is translating an instruction should be freed by the end of that instruction; otherwise carefully crafted guest code could cause TCG to run out of temporaries and assert. Putting the leak-debugging code into TCG proper (a) makes more sense as this isn't at all arm-specific (b) makes it more comprehensive, as it now covers temporaries created in all ways, not just via the new_tmp()/dead_tmp() wrapper functions (c) avoids annoying false positives where eg a TCG temp created with tcg_const_i32() was passed to dead_tmp(). The tracking only happens if qemu was configured with --enable-debug-tcg. It should be easy to add to other targets if desired; it's just a matter of calling tcg_clear_temp_count() and tcg_check_temp_count() in the appropriate places. Changes since v1: use "do { } while (0)" for the non-debug version of the tcg_clear_temp_count() macro to avoid creating empty statements Peter Maydell (3): tcg: Add support for debugging leakage of temporaries target-arm: Remove ad-hoc leak checking code target-arm: Use TCG temporary leak debugging facilities target-arm/translate.c | 705 +++++++++++++++++++++++------------------------ tcg/tcg.c | 32 +++ tcg/tcg.h | 17 ++ 3 files changed, 394 insertions(+), 360 deletions(-)