diff options
author | Xuzhou Cheng | 2022-09-25 13:30:10 +0200 |
---|---|---|
committer | Thomas Huth | 2022-09-27 20:51:21 +0200 |
commit | 39f0e991e10706447cad782e0de48ad9724aadf7 (patch) | |
tree | e01cf9b25f6ca154787bf12aa5ca0351d9b7e53e /tests/qtest/libqtest-single.h | |
parent | tests/qtest: qmp-test: Skip running test_qmp_oob for win32 (diff) | |
download | qemu-39f0e991e10706447cad782e0de48ad9724aadf7.tar.gz qemu-39f0e991e10706447cad782e0de48ad9724aadf7.tar.xz qemu-39f0e991e10706447cad782e0de48ad9724aadf7.zip |
tests/qtest: libqtest: Adapt global_qtest declaration for win32
Commit dd2107497275 ("tests/libqtest: Use libqtest-single.h in tests that require global_qtest")
moved global_qtest to libqtest-single.h, by declaring global_qtest
attribute to be common and weak.
This trick unfortunately does not work on Windows, and building
qtest test cases results in multiple definition errors of the weak
symbol global_qtest, as Windows PE does not have the concept of
the so-called weak symbol like ELF in the *nix world.
However Windows does provide a trick to declare a variable to be
a common symbol, via __declspec(selectany) [1]. It does not provide
the "strong override weak" effect but we don't need it in our use
case anyway. So let's use it for win32.
[1] https://docs.microsoft.com/en-us/cpp/cpp/selectany
Signed-off-by: Xuzhou Cheng <xuzhou.cheng@windriver.com>
Signed-off-by: Bin Meng <bin.meng@windriver.com>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Message-Id: <20220925113032.1949844-33-bmeng.cn@gmail.com>
Signed-off-by: Thomas Huth <thuth@redhat.com>
Diffstat (limited to 'tests/qtest/libqtest-single.h')
-rw-r--r-- | tests/qtest/libqtest-single.h | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/tests/qtest/libqtest-single.h b/tests/qtest/libqtest-single.h index 4e7d0ae1dc..851724cbcb 100644 --- a/tests/qtest/libqtest-single.h +++ b/tests/qtest/libqtest-single.h @@ -13,7 +13,11 @@ #include "libqtest.h" +#ifndef _WIN32 QTestState *global_qtest __attribute__((common, weak)); +#else +__declspec(selectany) QTestState *global_qtest; +#endif /** * qtest_start: |