[PATCH 0/2] testutils*: Hide some global variables

Pipeline: https://gitlab.com/MichalPrivoznik/libvirt/-/pipelines/532708775 Michal Prívozník (2): testutils: Write setter for virTestHostArch global variable testutilsqemu: Write getter/setter for CPU def global variables tests/qemuxml2argvtest.c | 4 ++-- tests/testutils.c | 7 ++++++- tests/testutils.h | 2 +- tests/testutilsqemu.c | 24 +++++++++++++++++++----- tests/testutilsqemu.h | 13 +++++++++---- 5 files changed, 37 insertions(+), 13 deletions(-) -- 2.35.1

As of 47503cc859 we are statically linking libtest_utils.a into qemuhotplugmock.so (see the original commit for reasoning). However, this breaks ASAN on older clang because now qemuhotplugtest has two instances of virTestHostArch global variable. One that comes from the binary itself (which also links with libtest_utils.a) and the other from the mock. Resolve this by making the variable static and introducing getter and setter. Well, the former already exists (as virArchFromHost()) so only the latter is needed. Signed-off-by: Michal Privoznik <mprivozn@redhat.com> --- tests/testutils.c | 7 ++++++- tests/testutils.h | 2 +- tests/testutilsqemu.c | 2 +- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/tests/testutils.c b/tests/testutils.c index 2b37c1965d..9d454c23bc 100644 --- a/tests/testutils.c +++ b/tests/testutils.c @@ -55,7 +55,7 @@ static size_t testCounter; static virBitmap *testBitmap; static virBitmap *failedTests; -virArch virTestHostArch = VIR_ARCH_X86_64; +static virArch virTestHostArch = VIR_ARCH_X86_64; virArch virArchFromHost(void) @@ -63,6 +63,11 @@ virArchFromHost(void) return virTestHostArch; } +void +virTestSetHostArch(virArch arch) +{ + virTestHostArch = arch; +} static int virTestUseTerminalColors(void) { diff --git a/tests/testutils.h b/tests/testutils.h index 13a154a5af..ff5661bb3f 100644 --- a/tests/testutils.h +++ b/tests/testutils.h @@ -35,7 +35,7 @@ # error Fix build system #endif -extern virArch virTestHostArch; +void virTestSetHostArch(virArch arch); int virTestRun(const char *title, int (*body)(const void *data), diff --git a/tests/testutilsqemu.c b/tests/testutilsqemu.c index 105b41cbeb..53fb5f656d 100644 --- a/tests/testutilsqemu.c +++ b/tests/testutilsqemu.c @@ -307,7 +307,7 @@ qemuTestSetHostArch(virQEMUDriver *driver, if (arch == VIR_ARCH_NONE) arch = VIR_ARCH_X86_64; - virTestHostArch = arch; + virTestSetHostArch(arch); driver->hostarch = virArchFromHost(); driver->caps->host.arch = virArchFromHost(); qemuTestSetHostCPU(driver, arch, NULL); -- 2.35.1

As of 47503cc859 we are statically linking libtest_utils_qemu.a into qemuhotplugmock.so (see the original commit for reasoning). However, this breaks ASAN on older clang because now qemuhotplugtest has two instances of virCPUDef global variables (cpuDefault, cpuHaswell, cpuPower8, cpuPower9). One that comes from the binary itself (which also links with libtest_utils_qemu.a) and the other from the mock. Resolve this by making the variables static and introducing getter and setter. Signed-off-by: Michal Privoznik <mprivozn@redhat.com> --- tests/qemuxml2argvtest.c | 4 ++-- tests/testutilsqemu.c | 22 ++++++++++++++++++---- tests/testutilsqemu.h | 13 +++++++++---- 3 files changed, 29 insertions(+), 10 deletions(-) diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c index 1f080daba7..1a49d2cfb0 100644 --- a/tests/qemuxml2argvtest.c +++ b/tests/qemuxml2argvtest.c @@ -2068,7 +2068,7 @@ mymain(void) DO_TEST_FAILURE("cpu-s390-features", QEMU_CAPS_KVM); qemuTestSetHostArch(&driver, VIR_ARCH_NONE); - qemuTestSetHostCPU(&driver, driver.hostarch, cpuHaswell); + qemuTestSetHostCPU(&driver, driver.hostarch, qemuTestGetCPUDef(QEMU_CPU_DEF_HASWELL)); DO_TEST("cpu-Haswell", QEMU_CAPS_KVM); DO_TEST("cpu-Haswell2", QEMU_CAPS_KVM); DO_TEST("cpu-Haswell3", QEMU_CAPS_KVM); @@ -2202,7 +2202,7 @@ mymain(void) QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE, QEMU_CAPS_KVM); - qemuTestSetHostCPU(&driver, driver.hostarch, cpuPower9); + qemuTestSetHostCPU(&driver, driver.hostarch, qemuTestGetCPUDef(QEMU_CPU_DEF_POWER9)); DO_TEST("pseries-cpu-compat-power9", QEMU_CAPS_KVM, QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE, diff --git a/tests/testutilsqemu.c b/tests/testutilsqemu.c index 53fb5f656d..d57f982c37 100644 --- a/tests/testutilsqemu.c +++ b/tests/testutilsqemu.c @@ -18,10 +18,10 @@ # define VIR_FROM_THIS VIR_FROM_QEMU -virCPUDef *cpuDefault; -virCPUDef *cpuHaswell; -virCPUDef *cpuPower8; -virCPUDef *cpuPower9; +static virCPUDef *cpuDefault; +static virCPUDef *cpuHaswell; +static virCPUDef *cpuPower8; +static virCPUDef *cpuPower9; static const char *qemu_emulators[VIR_ARCH_LAST] = { @@ -300,6 +300,20 @@ testQemuCapsInitMacOS(void) } +virCPUDef * +qemuTestGetCPUDef(qemuTestCPUDef d) +{ + switch (d) { + case QEMU_CPU_DEF_DEFAULT: return cpuDefault; + case QEMU_CPU_DEF_HASWELL: return cpuHaswell; + case QEMU_CPU_DEF_POWER8: return cpuPower8; + case QEMU_CPU_DEF_POWER9: return cpuPower9; + } + + return NULL; +} + + void qemuTestSetHostArch(virQEMUDriver *driver, virArch arch) diff --git a/tests/testutilsqemu.h b/tests/testutilsqemu.h index 187f9b7cd3..99897e6b79 100644 --- a/tests/testutilsqemu.h +++ b/tests/testutilsqemu.h @@ -102,10 +102,15 @@ virDomainXMLOption *testQemuXMLConfInit(void); virQEMUCaps *qemuTestParseCapabilitiesArch(virArch arch, const char *capsFile); -extern virCPUDef *cpuDefault; -extern virCPUDef *cpuHaswell; -extern virCPUDef *cpuPower8; -extern virCPUDef *cpuPower9; + +typedef enum { + QEMU_CPU_DEF_DEFAULT, + QEMU_CPU_DEF_HASWELL, + QEMU_CPU_DEF_POWER8, + QEMU_CPU_DEF_POWER9, +} qemuTestCPUDef; + +virCPUDef *qemuTestGetCPUDef(qemuTestCPUDef d); void qemuTestSetHostArch(virQEMUDriver *driver, virArch arch); -- 2.35.1

On Fri, May 06, 2022 at 08:59:25AM +0200, Michal Privoznik wrote:
Pipeline:
https://gitlab.com/MichalPrivoznik/libvirt/-/pipelines/532708775
Michal Prívozník (2): testutils: Write setter for virTestHostArch global variable testutilsqemu: Write getter/setter for CPU def global variables
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com> With regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
participants (2)
-
Daniel P. Berrangé
-
Michal Privoznik