Added -execfreq to enable execution frequency counting and dump all the TB's addresses and their execution frequency at the end of the execution.
Signed-off-by: vandersonmr <vanderson...@gmail.com> --- linux-user/exit.c | 5 +++++ linux-user/main.c | 7 +++++++ 2 files changed, 12 insertions(+) diff --git a/linux-user/exit.c b/linux-user/exit.c index bdda720553..0c6a2f2d5b 100644 --- a/linux-user/exit.c +++ b/linux-user/exit.c @@ -26,8 +26,13 @@ extern void __gcov_dump(void); #endif +extern bool enable_freq_count; + void preexit_cleanup(CPUArchState *env, int code) { + if (enable_freq_count) { + tb_dump_all_exec_freq(); + } #ifdef TARGET_GPROF _mcleanup(); #endif diff --git a/linux-user/main.c b/linux-user/main.c index 1bf7155670..ece2d8bd8b 100644 --- a/linux-user/main.c +++ b/linux-user/main.c @@ -388,6 +388,11 @@ static void handle_arg_trace(const char *arg) trace_file = trace_opt_parse(arg); } +static void handle_arg_execfreq(const char *arg) +{ + enable_freq_count = true; +} + struct qemu_argument { const char *argv; const char *env; @@ -439,6 +444,8 @@ static const struct qemu_argument arg_table[] = { "", "Seed for pseudo-random number generator"}, {"trace", "QEMU_TRACE", true, handle_arg_trace, "", "[[enable=]<pattern>][,events=<file>][,file=<file>]"}, + {"execfreq", "QEMU_EXEC_FREQ", false, handle_arg_execfreq, + "", "enable and dump TB's execution frequency counting"}, {"version", "QEMU_VERSION", false, handle_arg_version, "", "display version information and exit"}, {NULL, NULL, false, NULL, NULL, NULL} -- 2.22.0