@@ -3368,6 +3368,7 @@ static inline void gen_intermediate_code_internal(CPUState *env,
max_insns = CF_COUNT_MASK;
gen_icount_start();
+ gen_helper_trace_vbbl(pc_start);
do {
if (unlikely(!QTAILQ_EMPTY(&env->breakpoints))) {
QTAILQ_FOREACH(bp, &env->breakpoints, entry) {
@@ -9877,6 +9877,7 @@ static inline void gen_intermediate_code_internal(CPUState *env,
max_insns = CF_COUNT_MASK;
gen_icount_start();
+ gen_helper_trace_vbbl(pc_start);
tcg_clear_temp_count();
@@ -3266,6 +3266,7 @@ gen_intermediate_code_internal(CPUState *env, TranslationBlock *tb,
max_insns = CF_COUNT_MASK;
gen_icount_start();
+ gen_helper_trace_vbbl(pc_start);
do
{
check_breakpoint(env, dc);
@@ -7797,6 +7797,7 @@ static inline void gen_intermediate_code_internal(CPUState *env,
max_insns = CF_COUNT_MASK;
gen_icount_start();
+ gen_helper_trace_vbbl(pc_start);
for(;;) {
if (unlikely(!QTAILQ_EMPTY(&env->breakpoints))) {
QTAILQ_FOREACH(bp, &env->breakpoints, entry) {
@@ -1053,6 +1053,7 @@ static void gen_intermediate_code_internal(CPUState *env,
}
gen_icount_start();
+ gen_helper_trace_vbbl(pc_start);
do {
check_breakpoint(env, dc);
@@ -2990,6 +2990,7 @@ gen_intermediate_code_internal(CPUState *env, TranslationBlock *tb,
max_insns = CF_COUNT_MASK;
gen_icount_start();
+ gen_helper_trace_vbbl(pc_start);
do {
pc_offset = dc->pc - pc_start;
gen_throws_exception = NULL;
@@ -1658,6 +1658,7 @@ gen_intermediate_code_internal(CPUState *env, TranslationBlock *tb,
max_insns = CF_COUNT_MASK;
gen_icount_start();
+ gen_helper_trace_vbbl(pc_start);
do
{
#if SIM_COMPAT
@@ -12414,6 +12414,7 @@ gen_intermediate_code_internal (CPUState *env, TranslationBlock *tb,
max_insns = CF_COUNT_MASK;
LOG_DISAS("\ntb %p idx %d hflags %04x\n", tb, ctx.mem_idx, ctx.hflags);
gen_icount_start();
+ gen_helper_trace_vbbl(pc_start);
while (ctx.bstate == BS_NONE) {
if (unlikely(!QTAILQ_EMPTY(&env->breakpoints))) {
QTAILQ_FOREACH(bp, &env->breakpoints, entry) {
@@ -9463,6 +9463,7 @@ static inline void gen_intermediate_code_internal(CPUState *env,
max_insns = CF_COUNT_MASK;
gen_icount_start();
+ gen_helper_trace_vbbl(pc_start);
/* Set env in case of segfault during code fetch */
while (ctx.exception == POWERPC_EXCP_NONE && gen_opc_ptr < gen_opc_end) {
if (unlikely(!QTAILQ_EMPTY(&env->breakpoints))) {
@@ -5147,6 +5147,7 @@ static inline void gen_intermediate_code_internal(CPUState *env,
}
gen_icount_start();
+ gen_helper_trace_vbbl(pc_start);
do {
if (unlikely(!QTAILQ_EMPTY(&env->breakpoints))) {
@@ -1968,6 +1968,7 @@ gen_intermediate_code_internal(CPUState * env, TranslationBlock * tb,
if (max_insns == 0)
max_insns = CF_COUNT_MASK;
gen_icount_start();
+ gen_helper_trace_vbbl(pc_start);
while (ctx.bstate == BS_NONE && gen_opc_ptr < gen_opc_end) {
if (unlikely(!QTAILQ_EMPTY(&env->breakpoints))) {
QTAILQ_FOREACH(bp, &env->breakpoints, entry) {
@@ -5268,6 +5268,7 @@ static inline void gen_intermediate_code_internal(TranslationBlock * tb,
if (max_insns == 0)
max_insns = CF_COUNT_MASK;
gen_icount_start();
+ gen_helper_trace_vbbl(pc_start);
do {
if (unlikely(!QTAILQ_EMPTY(&env->breakpoints))) {
QTAILQ_FOREACH(bp, &env->breakpoints, entry) {
@@ -1888,6 +1888,7 @@ static inline void gen_intermediate_code_internal(CPUState *env,
}
gen_icount_start();
+ gen_helper_trace_vbbl(pc_start);
do {
if (unlikely(!QTAILQ_EMPTY(&env->breakpoints))) {
QTAILQ_FOREACH(bp, &env->breakpoints, entry) {
@@ -2434,6 +2434,7 @@ static void gen_intermediate_code_internal(
reset_used_window(&dc);
gen_icount_start();
+ gen_helper_trace_vbbl(pc_start);
if (env->singlestep_enabled && env->exception_taken) {
env->exception_taken = 0;
@@ -640,3 +640,16 @@ win_helper_retry(uint32_t tl) "tl=%d"
vcpu_init(void *vcpu) "%p"
# Reset the state of a vCPU
vcpu_reset(void *vcpu) "%p"
+
+
+## Guest events
+
+# Start BBL execution
+#
+# Note: QEMU's basic blocks do not necessarily finish in a control flow
+# instruction.
+#
+# Targets: all
+#
+# vaddr : starting virtual address
+disable tcg vbbl(uint64_t vaddr) "vaddr=0x%016"PRIx64
Signed-off-by: Lluís Vilanova <vilanova@ac.upc.edu> --- target-alpha/translate.c | 1 + target-arm/translate.c | 1 + target-cris/translate.c | 1 + target-i386/translate.c | 1 + target-lm32/translate.c | 1 + target-m68k/translate.c | 1 + target-microblaze/translate.c | 1 + target-mips/translate.c | 1 + target-ppc/translate.c | 1 + target-s390x/translate.c | 1 + target-sh4/translate.c | 1 + target-sparc/translate.c | 1 + target-unicore32/translate.c | 1 + target-xtensa/translate.c | 1 + trace-events | 13 +++++++++++++ 15 files changed, 27 insertions(+), 0 deletions(-)