2

使用 TSAN 构建 QEMU 没有任何问题,但在启动过程中会出现致命问题

ThreadSanitizer: can't find longjmp buf
FATAL: ThreadSanitizer CHECK failed: ../../../../src/libsanitizer/tsan/tsan_interceptors.cc:544 "((0)) != (0)" (0x0, 0x0)
    #0 <null> <null> (libtsan.so.0+0x891b4)
    #1 <null> <null> (libtsan.so.0+0xa74ae)
    #2 <null> <null> (libtsan.so.0+0x2b0b2)
    #3 siglongjmp <null> (libtsan.so.0+0x2cb64)
    #4 qemu_coroutine_switch util/coroutine-ucontext.c:221 (qemu-system-x86_64+0xc0bcbd)
    #5 qemu_aio_coroutine_enter util/qemu-coroutine.c:147 (qemu-system-x86_64+0xc089c7)
    #6 qemu_coroutine_enter util/qemu-coroutine.c:170 (qemu-system-x86_64+0xc08b5a)
...
    #23 main /root/qemu-4.2.0/vl.c:4436 (qemu-system-x86_64+0x5c92ec)
    #24 __libc_start_main <null> (libc.so.6+0x271e2)
    #25 _start <null> (qemu-system-x86_64+0x2c6b9d)

它看起来像是 TSAN 的已知问题,并且 --with-coroutine=gthread 似乎在过去有效

但它已被删除(https://patchwork.kernel.org/patch/9704545/

我尝试了所有 ucontext 和 sigaltstack 后端,但失败了

我的问题是,TSAN 是否仍然适用于当前版本?(qemu 4.2.0)

4

1 回答 1

2

将 TSan 支持添加到 QEMU 的工作正在进行中,但尚未发布。

我们正在进行的工作分支在这里:https ://github.com/rf972/qemu/tree/tsan_v0 。

值得一提的是,我们的 WIP 分支包含几个重要的补丁,这些补丁是我们从该分支的 Emilio Cota 那里获得的。

此补丁似乎与您的问题有关。它修改了您在上面引用的相同区域,并为 coroutine-ucontext 引入了对纤维注释的支持。

于 2020-04-21T17:23:21.530 回答