Claudio Fontana <cfont...@suse.de> writes:
> From: Eduardo Habkost <ehabk...@redhat.com> > > Signed-off-by: Eduardo Habkost <ehabk...@redhat.com> > > [claudio: wrapped target code in CONFIG_TCG] > Signed-off-by: Claudio Fontana <cfont...@suse.de> > --- > include/hw/core/cpu.h | 20 +++++++++++--------- > accel/tcg/cpu-exec.c | 4 ++-- > target/arm/cpu.c | 4 +++- > target/avr/cpu.c | 2 +- > target/hppa/cpu.c | 2 +- > target/i386/tcg/tcg-cpu.c | 2 +- > target/microblaze/cpu.c | 2 +- > target/mips/cpu.c | 4 +++- > target/riscv/cpu.c | 2 +- > target/rx/cpu.c | 2 +- > target/sh4/cpu.c | 2 +- > target/sparc/cpu.c | 2 +- > target/tricore/cpu.c | 2 +- > 13 files changed, 28 insertions(+), 22 deletions(-) > > diff --git a/include/hw/core/cpu.h b/include/hw/core/cpu.h > index d0b17dcc4c..b9803885e5 100644 > --- a/include/hw/core/cpu.h > +++ b/include/hw/core/cpu.h > @@ -86,6 +86,17 @@ typedef struct TcgCpuOperations { > * Called when the first CPU is realized. > */ > void (*initialize)(void); > + /** > + * @synchronize_from_tb: Synchronize state from a TCG #TranslationBlock > + * > + * This is called when we abandon execution of a TB before > + * starting it, and must set all parts of the CPU state which > + * the previous TB in the chain may not have updated. This > + * will need to do more. If this hook is not implemented then > + * the default is to call @set_pc(tb->pc). > + */ > + void (*synchronize_from_tb)(CPUState *cpu, > + const struct TranslationBlock *tb); Did you miss my comment last time or just not think it flowed better? ...TB in the chain may not have updated. By default when no hook is defined a call is made to @set_pc(tb->pc). If more state needs to be restored the front-end must provide a hook function and restore all the state there. Either way: Reviewed-by: Alex Bennée <alex.ben...@linaro.org> -- Alex Bennée