• A
    plugins: new lockstep plugin for debugging TCG changes · c81950a2
    Alex Bennée 提交于
    When we make changes to the TCG we sometimes cause regressions that
    are deep into the execution cycle of the guest. Debugging this often
    requires comparing large volumes of trace information to figure out
    where behaviour has diverged.
    
    The lockstep plugin utilises a shared socket so two QEMU's running
    with the plugin will write their current execution position and wait
    to receive the position of their partner process. When execution
    diverges the plugins output where they were and the previous few
    blocks before unloading themselves and letting execution continue.
    
    Originally I planned for this to be most useful with -icount but it
    turns out you can get divergence pretty quickly due to asynchronous
    qemu_cpu_kick_rr_cpus() events causing one side to eventually run into
    a short block a few cycles before the other side. For this reason I've
    added a bit of tracking and I think the divergence reporting could be
    finessed to report only if we really start to diverge in execution.
    
    An example run would be:
    
      qemu-system-sparc -monitor none -parallel none -net none \
        -M SS-20 -m 256 -kernel day11/zImage.elf \
        -plugin ./tests/plugin/liblockstep.so,arg=lockstep-sparc.sock \
        -d plugin,nochain
    
    with an identical command in another window in the same working
    directory.
    Signed-off-by: NAlex Bennée <alex.bennee@linaro.org>
    Reviewed-by: NRobert Foley <robert.foley@linaro.org>
    Tested-by: NRobert Foley <robert.foley@linaro.org>
    Cc: Richard Henderson <richard.henderson@linaro.org>
    Cc: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
    Message-Id: <20200610155509.12850-3-alex.bennee@linaro.org>
    c81950a2
Makefile 537 字节