* [Qemu-devel] [PATCH v2 1/7] tests: Move fake yield_until_fd_readable() to coroutine-stub.c
2014-09-30 18:25 [Qemu-devel] [PATCH v2 0/7] Target-specific unit test support, add unit tests for target-i386/cpu.c code Eduardo Habkost
@ 2014-09-30 18:26 ` Eduardo Habkost
2014-09-30 22:17 ` Paolo Bonzini
2014-09-30 18:26 ` [Qemu-devel] [PATCH v2 2/7] tests: Support target-specific unit tests Eduardo Habkost
` (5 subsequent siblings)
6 siblings, 1 reply; 13+ messages in thread
From: Eduardo Habkost @ 2014-09-30 18:26 UTC (permalink / raw)
To: qemu-devel; +Cc: Paolo Bonzini, Andreas Färber, Igor Mammedov
Other test code will use the function.
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
tests/Makefile | 1 +
tests/coroutine-stub.c | 13 +++++++++++++
tests/test-vmstate.c | 11 -----------
3 files changed, 14 insertions(+), 11 deletions(-)
create mode 100644 tests/coroutine-stub.c
diff --git a/tests/Makefile b/tests/Makefile
index 834279c..3b84e38 100644
--- a/tests/Makefile
+++ b/tests/Makefile
@@ -259,6 +259,7 @@ tests/test-qdev-global-props$(EXESUF): tests/test-qdev-global-props.o \
$(test-qapi-obj-y) \
libqemuutil.a libqemustub.a
tests/test-vmstate$(EXESUF): tests/test-vmstate.o \
+ tests/coroutine-stub.o \
vmstate.o qemu-file.o \
libqemuutil.a
diff --git a/tests/coroutine-stub.c b/tests/coroutine-stub.c
new file mode 100644
index 0000000..8af58dd
--- /dev/null
+++ b/tests/coroutine-stub.c
@@ -0,0 +1,13 @@
+#include "qemu-common.h"
+#include "block/coroutine.h"
+
+/* Fake yield_until_fd_readable() implementation so we don't have to pull the
+ * coroutine code as dependency.
+ */
+void yield_until_fd_readable(int fd)
+{
+ fd_set fds;
+ FD_ZERO(&fds);
+ FD_SET(fd, &fds);
+ select(fd + 1, &fds, NULL, NULL, NULL);
+}
diff --git a/tests/test-vmstate.c b/tests/test-vmstate.c
index d72c64c..412634f 100644
--- a/tests/test-vmstate.c
+++ b/tests/test-vmstate.c
@@ -32,17 +32,6 @@
static char temp_file[] = "/tmp/vmst.test.XXXXXX";
static int temp_fd;
-/* Fake yield_until_fd_readable() implementation so we don't have to pull the
- * coroutine code as dependency.
- */
-void yield_until_fd_readable(int fd)
-{
- fd_set fds;
- FD_ZERO(&fds);
- FD_SET(fd, &fds);
- select(fd + 1, &fds, NULL, NULL, NULL);
-}
-
/* Duplicate temp_fd and seek to the beginning of the file */
static QEMUFile *open_test_file(bool write)
{
--
1.9.3
^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [Qemu-devel] [PATCH v2 1/7] tests: Move fake yield_until_fd_readable() to coroutine-stub.c
2014-09-30 18:26 ` [Qemu-devel] [PATCH v2 1/7] tests: Move fake yield_until_fd_readable() to coroutine-stub.c Eduardo Habkost
@ 2014-09-30 22:17 ` Paolo Bonzini
2014-10-01 16:14 ` Eduardo Habkost
0 siblings, 1 reply; 13+ messages in thread
From: Paolo Bonzini @ 2014-09-30 22:17 UTC (permalink / raw)
To: Eduardo Habkost, qemu-devel; +Cc: Igor Mammedov, Andreas Färber
Il 30/09/2014 20:26, Eduardo Habkost ha scritto:
> Other test code will use the function.
>
> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
> ---
> tests/Makefile | 1 +
> tests/coroutine-stub.c | 13 +++++++++++++
> tests/test-vmstate.c | 11 -----------
> 3 files changed, 14 insertions(+), 11 deletions(-)
> create mode 100644 tests/coroutine-stub.c
Should we split qemu-file.c instead?
Paolo
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [Qemu-devel] [PATCH v2 1/7] tests: Move fake yield_until_fd_readable() to coroutine-stub.c
2014-09-30 22:17 ` Paolo Bonzini
@ 2014-10-01 16:14 ` Eduardo Habkost
0 siblings, 0 replies; 13+ messages in thread
From: Eduardo Habkost @ 2014-10-01 16:14 UTC (permalink / raw)
To: Paolo Bonzini; +Cc: Igor Mammedov, qemu-devel, Andreas Färber
On Wed, Oct 01, 2014 at 12:17:50AM +0200, Paolo Bonzini wrote:
> Il 30/09/2014 20:26, Eduardo Habkost ha scritto:
> > Other test code will use the function.
> >
> > Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
> > ---
> > tests/Makefile | 1 +
> > tests/coroutine-stub.c | 13 +++++++++++++
> > tests/test-vmstate.c | 11 -----------
> > 3 files changed, 14 insertions(+), 11 deletions(-)
> > create mode 100644 tests/coroutine-stub.c
>
> Should we split qemu-file.c instead?
Splitting qemu-file.c won't avoid the need for a fake
yield_until_fd_readable() for test-vmstate.c, but will probably help
reduce cpu.c dependencies. I will give it a try.
--
Eduardo
^ permalink raw reply [flat|nested] 13+ messages in thread
* [Qemu-devel] [PATCH v2 2/7] tests: Support target-specific unit tests
2014-09-30 18:25 [Qemu-devel] [PATCH v2 0/7] Target-specific unit test support, add unit tests for target-i386/cpu.c code Eduardo Habkost
2014-09-30 18:26 ` [Qemu-devel] [PATCH v2 1/7] tests: Move fake yield_until_fd_readable() to coroutine-stub.c Eduardo Habkost
@ 2014-09-30 18:26 ` Eduardo Habkost
2014-09-30 18:26 ` [Qemu-devel] [PATCH v2 3/7] tests: Make test-x86-cpuid target-specific Eduardo Habkost
` (4 subsequent siblings)
6 siblings, 0 replies; 13+ messages in thread
From: Eduardo Habkost @ 2014-09-30 18:26 UTC (permalink / raw)
To: qemu-devel; +Cc: Paolo Bonzini, Andreas Färber, Igor Mammedov
To make unit tests that depend on target-specific files, use
check-unit-<target>-y and test-obj-<target>-y.
Note that the qtest test cases were per-*arch* (e.g. i386, mips, ppc),
not per-*target* (e.g. i386-softmmu, x86_64-linux-user), because they
implicitly apply only to the -softmmu targets. Target-specific unit
tests, on the other hand, may apply to any target (e.g. they may test
*-softmmu and/or *-user code). To clarify this, $(TARGETS) was renamed
to $(QTEST_ARCHES).
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
tests/Makefile | 31 +++++++++++++++++++++++--------
1 file changed, 23 insertions(+), 8 deletions(-)
diff --git a/tests/Makefile b/tests/Makefile
index 3b84e38..ea17838 100644
--- a/tests/Makefile
+++ b/tests/Makefile
@@ -357,12 +357,27 @@ ifeq ($(CONFIG_POSIX),y)
LIBS += -lutil
endif
+
+SOFTMMU_TARGETS=$(filter %-softmmu,$(TARGET_DIRS))
+SOFTMMU_ARCHES=$(patsubst %-softmmu,%, $(SOFTMMU_TARGETS))
+
+# unit test rules:
+
+# target-specific tests/objs:
+
+test-obj-y += $(foreach TARGET,$(TARGET_DIRS), $(test-obj-$(TARGET)-y))
+check-unit-y += $(foreach TARGET,$(TARGET_DIRS), $(check-unit-$(TARGET)-y))
+
+$(foreach TARGET,$(TARGET_DIRS),$(eval include $(TARGET)/config-target.mak) \
+ $(eval $(test-obj-$(TARGET)-y): QEMU_CFLAGS += -I$(TARGET) -I$(SRC_PATH)/target-$(TARGET_BASE_ARCH) -DNEED_CPU_H))
+
+$(test-obj-y): QEMU_INCLUDES += -Itests
+
# QTest rules
-TARGETS=$(patsubst %-softmmu,%, $(filter %-softmmu,$(TARGET_DIRS)))
ifeq ($(CONFIG_POSIX),y)
-QTEST_TARGETS=$(foreach TARGET,$(TARGETS), $(if $(check-qtest-$(TARGET)-y), $(TARGET),))
-check-qtest-y=$(foreach TARGET,$(TARGETS), $(check-qtest-$(TARGET)-y))
+QTEST_ARCHES=$(foreach ARCH,$(SOFTMMU_ARCHES), $(if $(check-qtest-$(ARCH)-y), $(ARCH),))
+check-qtest-y=$(foreach ARCH,$(QTEST_ARCHES), $(check-qtest-$(ARCH)-y))
endif
qtest-obj-y = tests/libqtest.o libqemuutil.a libqemustub.a
@@ -394,8 +409,8 @@ GCOV_OPTIONS = -n $(if $(V),-f,)
# gtester tests, possibly with verbose output
-.PHONY: $(patsubst %, check-qtest-%, $(QTEST_TARGETS))
-$(patsubst %, check-qtest-%, $(QTEST_TARGETS)): check-qtest-%: $(check-qtest-y)
+.PHONY: $(patsubst %, check-qtest-%, $(QTEST_ARCHES))
+$(patsubst %, check-qtest-%, $(QTEST_ARCHES)): check-qtest-%: $(check-qtest-y)
$(if $(CONFIG_GCOV),@rm -f *.gcda */*.gcda */*/*.gcda */*/*/*.gcda,)
$(call quiet-command,QTEST_QEMU_BINARY=$*-softmmu/qemu-system-$* \
MALLOC_PERTURB_=$${MALLOC_PERTURB_:-$$((RANDOM % 255 + 1))} \
@@ -418,7 +433,7 @@ $(patsubst %, check-%, $(check-unit-y)): check-%: %
# gtester tests with XML output
-$(patsubst %, check-report-qtest-%.xml, $(QTEST_TARGETS)): check-report-qtest-%.xml: $(check-qtest-y)
+$(patsubst %, check-report-qtest-%.xml, $(QTEST_ARCHES)): check-report-qtest-%.xml: $(check-qtest-y)
$(call quiet-command,QTEST_QEMU_BINARY=$*-softmmu/qemu-system-$* \
gtester -q $(GTESTER_OPTIONS) -o $@ -m=$(SPEED) $(check-qtest-$*-y),"GTESTER $@")
@@ -427,7 +442,7 @@ check-report-unit.xml: $(check-unit-y)
# Reports and overall runs
-check-report.xml: $(patsubst %,check-report-qtest-%.xml, $(QTEST_TARGETS)) check-report-unit.xml
+check-report.xml: $(patsubst %,check-report-qtest-%.xml, $(QTEST_ARCHES)) check-report-unit.xml
$(call quiet-command,$(SRC_PATH)/scripts/gtester-cat $^ > $@, " GEN $@")
check-report.html: check-report.xml
@@ -461,7 +476,7 @@ $(patsubst %, check-%, $(check-qapi-schema-y)): check-%.json: $(SRC_PATH)/%.json
.PHONY: check-qapi-schema check-qtest check-unit check check-clean
check-qapi-schema: $(patsubst %,check-%, $(check-qapi-schema-y))
-check-qtest: $(patsubst %,check-qtest-%, $(QTEST_TARGETS))
+check-qtest: $(patsubst %,check-qtest-%, $(QTEST_ARCHES))
check-unit: $(patsubst %,check-%, $(check-unit-y))
check-block: $(patsubst %,check-%, $(check-block-y))
check: check-qapi-schema check-unit check-qtest
--
1.9.3
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [Qemu-devel] [PATCH v2 3/7] tests: Make test-x86-cpuid target-specific
2014-09-30 18:25 [Qemu-devel] [PATCH v2 0/7] Target-specific unit test support, add unit tests for target-i386/cpu.c code Eduardo Habkost
2014-09-30 18:26 ` [Qemu-devel] [PATCH v2 1/7] tests: Move fake yield_until_fd_readable() to coroutine-stub.c Eduardo Habkost
2014-09-30 18:26 ` [Qemu-devel] [PATCH v2 2/7] tests: Support target-specific unit tests Eduardo Habkost
@ 2014-09-30 18:26 ` Eduardo Habkost
2014-09-30 18:26 ` [Qemu-devel] [PATCH v2 4/7] tests: Add unit test for X86CPU code Eduardo Habkost
` (3 subsequent siblings)
6 siblings, 0 replies; 13+ messages in thread
From: Eduardo Habkost @ 2014-09-30 18:26 UTC (permalink / raw)
To: qemu-devel; +Cc: Paolo Bonzini, Andreas Färber, Igor Mammedov
Instead of using a test-specific hack to add -I$(SRC_PATH)/target-i386, add
test-x86-cpuid to $(test-obj-x86_64-softmmu-y).
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
tests/Makefile | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/tests/Makefile b/tests/Makefile
index ea17838..9b04a53 100644
--- a/tests/Makefile
+++ b/tests/Makefile
@@ -45,7 +45,7 @@ check-unit-y += tests/test-thread-pool$(EXESUF)
gcov-files-test-thread-pool-y = thread-pool.c
gcov-files-test-hbitmap-y = util/hbitmap.c
check-unit-y += tests/test-hbitmap$(EXESUF)
-check-unit-y += tests/test-x86-cpuid$(EXESUF)
+check-unit-x86_64-softmmu-y += tests/test-x86-cpuid$(EXESUF)
# all code tested by test-x86-cpuid is inside topology.h
gcov-files-test-x86-cpuid-y =
check-unit-y += tests/test-xbzrle$(EXESUF)
@@ -224,6 +224,8 @@ test-obj-y = tests/check-qint.o tests/check-qstring.o tests/check-qdict.o \
tests/test-x86-cpuid.o tests/test-mul64.o tests/test-int128.o \
tests/test-opts-visitor.o tests/test-qmp-event.o
+test-obj-x86_64-softmmu-y = tests/test-x86-cpuid.o
+
test-qapi-obj-y = tests/test-qapi-visit.o tests/test-qapi-types.o \
tests/test-qapi-event.o
@@ -231,8 +233,6 @@ $(test-obj-y): QEMU_INCLUDES += -Itests
QEMU_CFLAGS += -I$(SRC_PATH)/tests
qom-core-obj = qom/object.o qom/qom-qobject.o qom/container.o
-tests/test-x86-cpuid.o: QEMU_INCLUDES += -I$(SRC_PATH)/target-i386
-
tests/check-qint$(EXESUF): tests/check-qint.o libqemuutil.a
tests/check-qstring$(EXESUF): tests/check-qstring.o libqemuutil.a
tests/check-qdict$(EXESUF): tests/check-qdict.o libqemuutil.a
--
1.9.3
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [Qemu-devel] [PATCH v2 4/7] tests: Add unit test for X86CPU code
2014-09-30 18:25 [Qemu-devel] [PATCH v2 0/7] Target-specific unit test support, add unit tests for target-i386/cpu.c code Eduardo Habkost
` (2 preceding siblings ...)
2014-09-30 18:26 ` [Qemu-devel] [PATCH v2 3/7] tests: Make test-x86-cpuid target-specific Eduardo Habkost
@ 2014-09-30 18:26 ` Eduardo Habkost
2014-09-30 22:20 ` Paolo Bonzini
2014-09-30 18:26 ` [Qemu-devel] [PATCH v2 5/7] target-i386: Isolate enabled-by-default features to a separate array Eduardo Habkost
` (2 subsequent siblings)
6 siblings, 1 reply; 13+ messages in thread
From: Eduardo Habkost @ 2014-09-30 18:26 UTC (permalink / raw)
To: qemu-devel; +Cc: Paolo Bonzini, Andreas Färber, Igor Mammedov
The unit test includes target-i386/cpu.c instead of simply linking
against cpu.o because the test code will use static variables/functions
from cpu.c.
Reasoning for each object file included in the test binary:
* qom/cpu.o - for TYPE_CPU. Dependencies:
* qom/qom-qobject.o
* qom/qdev.o - for TYPE_DEVICE. Dependencies:
* qom/container.o
* vmstate.o. Dependencies:
* qemu-file.o
* hw/core/hotplug.o
* hw/core/irq.o
* hw/core/fw-path-provider.o
* hw/core/qdev-properties.o
* qom/object.o - for TYPE_OBJECT
* x86_64-softmmu/target-i386/machine.o - for vmstate_x86_cpu
* qemu-log.o - for the logging API, used by target-i386/cpu.c
* libqemuutil.a - for QAPI visitors, error API, and other symbols
* libqemustub.a - existing stubs, including: savevm, monitor symbols
The remaining symbols used by target-i386/cpu.c were added as stubs to
either tests/vl-stub.c and tests/x86-stub.c.
Note: I couldn't add dependencies that ensure the target-specific object
files are compiled on demand when building the test binary, but "make
check" already requires "make" to be run first because of the qtest test
cases, so I assume this is OK.
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
Changes v1 -> v2:
* Don't include cpus.o on test binary, making lots of stubs now
unnecessary
---
tests/.gitignore | 1 +
tests/Makefile | 15 ++++-
tests/test-x86-cpu.c | 44 ++++++++++++++
tests/vl-stub.c | 15 +++++
tests/x86-stub.c | 163 +++++++++++++++++++++++++++++++++++++++++++++++++++
5 files changed, 237 insertions(+), 1 deletion(-)
create mode 100644 tests/test-x86-cpu.c
create mode 100644 tests/vl-stub.c
create mode 100644 tests/x86-stub.c
diff --git a/tests/.gitignore b/tests/.gitignore
index e2e4957..07f903e 100644
--- a/tests/.gitignore
+++ b/tests/.gitignore
@@ -35,5 +35,6 @@ test-visitor-serialization
test-vmstate
test-x86-cpuid
test-xbzrle
+test-x86-cpu
*-test
qapi-schema/*.test.*
diff --git a/tests/Makefile b/tests/Makefile
index 9b04a53..fd84529 100644
--- a/tests/Makefile
+++ b/tests/Makefile
@@ -64,6 +64,7 @@ gcov-files-check-qom-interface-y = qom/object.c
check-unit-$(CONFIG_POSIX) += tests/test-vmstate$(EXESUF)
check-unit-y += tests/test-qemu-opts$(EXESUF)
gcov-files-test-qemu-opts-y = qom/test-qemu-opts.c
+check-unit-x86_64-softmmu-y += tests/test-x86-cpu$(EXESUF)
check-block-$(CONFIG_POSIX) += tests/qemu-iotests-quick.sh
@@ -224,7 +225,8 @@ test-obj-y = tests/check-qint.o tests/check-qstring.o tests/check-qdict.o \
tests/test-x86-cpuid.o tests/test-mul64.o tests/test-int128.o \
tests/test-opts-visitor.o tests/test-qmp-event.o
-test-obj-x86_64-softmmu-y = tests/test-x86-cpuid.o
+test-obj-x86_64-softmmu-y = tests/test-x86-cpuid.o \
+ tests/test-x86-cpu.o tests/x86-stub.o
test-qapi-obj-y = tests/test-qapi-visit.o tests/test-qapi-types.o \
tests/test-qapi-event.o
@@ -352,6 +354,17 @@ tests/usb-hcd-xhci-test$(EXESUF): tests/usb-hcd-xhci-test.o
tests/vhost-user-test$(EXESUF): tests/vhost-user-test.o qemu-char.o qemu-timer.o $(qtest-obj-y)
tests/qemu-iotests/socket_scm_helper$(EXESUF): tests/qemu-iotests/socket_scm_helper.o
tests/test-qemu-opts$(EXESUF): tests/test-qemu-opts.o libqemuutil.a libqemustub.a
+tests/test-x86-cpu$(EXESUF): tests/test-x86-cpu.o \
+ x86_64-softmmu/target-i386/machine.o \
+ qom/cpu.o \
+ qom/object.o qom/qom-qobject.o qom/container.o \
+ hw/core/qdev.o hw/core/qdev-properties.o \
+ hw/core/hotplug.o hw/core/irq.o hw/core/fw-path-provider.o \
+ vmstate.o qemu-file.o \
+ qemu-log.o \
+ libqemuutil.a \
+ libqemustub.a \
+ tests/vl-stub.o tests/x86-stub.o tests/coroutine-stub.o
ifeq ($(CONFIG_POSIX),y)
LIBS += -lutil
diff --git a/tests/test-x86-cpu.c b/tests/test-x86-cpu.c
new file mode 100644
index 0000000..9227e20
--- /dev/null
+++ b/tests/test-x86-cpu.c
@@ -0,0 +1,44 @@
+#include "cpu.c"
+
+#include <glib.h>
+
+uint32_t kvm_arch_get_supported_cpuid(KVMState *env, uint32_t function,
+ uint32_t index, int reg)
+{
+ return 0;
+}
+
+static void test_cpu_creation(void)
+{
+ int i;
+ for (i = 0; i < ARRAY_SIZE(builtin_x86_defs); ++i) {
+ ObjectClass *oc;
+ X86CPUClass *xcc;
+ X86CPU *cpu;
+ Error *error = NULL;
+ X86CPUDefinition *def = &builtin_x86_defs[i];
+ char features[] = "";
+
+ oc = x86_cpu_class_by_name(def->name);
+ g_assert_true(oc);
+ xcc = X86_CPU_CLASS(oc);
+ g_assert_true(xcc);
+ cpu = X86_CPU(object_new(object_class_get_name(oc)));
+ x86_cpu_parse_featurestr(CPU(cpu), features, &error);
+ g_assert(!error);
+ object_unref(OBJECT(cpu));
+ }
+}
+
+int main(int argc, char *argv[])
+{
+ module_call_init(MODULE_INIT_QOM);
+
+ g_test_init(&argc, &argv, NULL);
+
+ g_test_add_func("/cpu/x86/creation", test_cpu_creation);
+
+ g_test_run();
+
+ return 0;
+}
diff --git a/tests/vl-stub.c b/tests/vl-stub.c
new file mode 100644
index 0000000..32085aa
--- /dev/null
+++ b/tests/vl-stub.c
@@ -0,0 +1,15 @@
+#include "sysemu/sysemu.h"
+#include "sysemu/kvm.h"
+#include "hw/hw.h"
+#include "hw/hw.h"
+
+int smp_cpus = 1;
+int smp_cores = 1;
+int smp_threads = 1;
+bool xen_allowed;
+
+bool tcg_enabled(void)
+{
+ return !kvm_allowed && !xen_allowed;
+}
+
diff --git a/tests/x86-stub.c b/tests/x86-stub.c
new file mode 100644
index 0000000..22a3c2f
--- /dev/null
+++ b/tests/x86-stub.c
@@ -0,0 +1,163 @@
+/* Stub functions for target-specific code (target-i386 files, cpu-exec.c,
+ * exec.c, etc.) */
+#include "target-i386/cpu.h"
+#include "target-i386/cpu-qom.h"
+#include "target-i386/kvm_i386.h"
+#include "exec/exec-all.h"
+#include "sysemu/kvm.h"
+#include "exec/gdbstub.h"
+
+struct CPUTailQ cpus = QTAILQ_HEAD_INITIALIZER(cpus);
+
+void cpu_exec_init(CPUArchState *env)
+{
+}
+
+void kvm_arch_reset_vcpu(X86CPU *cpu)
+{
+}
+
+void optimize_flags_init(void)
+{
+}
+
+void x86_cpu_do_interrupt(CPUState *cs)
+{
+ abort();
+}
+
+bool x86_cpu_exec_interrupt(CPUState *cs, int interrupt_request)
+{
+ abort();
+}
+
+void x86_cpu_exec_enter(CPUState *cs)
+{
+ abort();
+}
+
+void x86_cpu_exec_exit(CPUState *cs)
+{
+ abort();
+}
+
+void x86_cpu_dump_state(CPUState *cs, FILE *f, fprintf_function cpu_fprintf,
+ int flags)
+{
+ abort();
+}
+
+int x86_cpu_gdb_read_register(CPUState *cs, uint8_t *mem_buf, int n)
+{
+ abort();
+}
+
+int x86_cpu_gdb_write_register(CPUState *cs, uint8_t *mem_buf, int n)
+{
+ abort();
+}
+
+int x86_cpu_write_elf64_note(WriteCoreDumpFunction f, CPUState *cs,
+ int cpuid, void *opaque)
+{
+ abort();
+}
+
+int x86_cpu_write_elf64_qemunote(WriteCoreDumpFunction f, CPUState *cs,
+ void *opaque)
+{
+ abort();
+}
+
+
+int x86_cpu_write_elf32_note(WriteCoreDumpFunction f, CPUState *cs,
+ int cpuid, void *opaque)
+{
+ abort();
+}
+
+int x86_cpu_write_elf32_qemunote(WriteCoreDumpFunction f, CPUState *cs,
+ void *opaque)
+{
+ abort();
+}
+
+void x86_cpu_get_memory_mapping(CPUState *cs, MemoryMappingList *list,
+ Error **errp)
+{
+ abort();
+}
+
+hwaddr x86_cpu_get_phys_page_debug(CPUState *cs, vaddr addr)
+{
+ abort();
+}
+
+void hw_breakpoint_insert(CPUX86State *env, int index)
+{
+ abort();
+}
+
+void cpu_breakpoint_remove_all(CPUState *cpu, int mask)
+{
+ abort();
+}
+
+void cpu_watchpoint_remove_all(CPUState *cpu, int mask)
+{
+ abort();
+}
+
+void breakpoint_handler(CPUState *cs)
+{
+ abort();
+}
+
+void tlb_flush(CPUState *cpu, int flush_global)
+{
+ abort();
+}
+
+void cpu_x86_update_cr0(CPUX86State *env, uint32_t new_cr0)
+{
+ abort();
+}
+
+void cpu_set_fpuc(CPUX86State *env, uint16_t val)
+{
+ abort();
+}
+
+void update_fp_status(CPUX86State *env)
+{
+ abort();
+}
+
+void cpu_get_fp80(uint64_t *pmant, uint16_t *pexp, floatx80 f)
+{
+ abort();
+}
+
+floatx80 cpu_set_fp80(uint64_t mant, uint16_t upper)
+{
+ abort();
+}
+
+uint64_t cpu_get_apic_base(DeviceState *dev)
+{
+ abort();
+}
+
+void apic_designate_bsp(DeviceState *dev)
+{
+ abort();
+}
+
+bool target_words_bigendian(void); /* No prototype on any .h file */
+bool target_words_bigendian(void)
+{
+ return false;
+}
+
+
+#include "kvm-stub.c"
--
1.9.3
^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [Qemu-devel] [PATCH v2 4/7] tests: Add unit test for X86CPU code
2014-09-30 18:26 ` [Qemu-devel] [PATCH v2 4/7] tests: Add unit test for X86CPU code Eduardo Habkost
@ 2014-09-30 22:20 ` Paolo Bonzini
2014-10-01 16:28 ` Eduardo Habkost
0 siblings, 1 reply; 13+ messages in thread
From: Paolo Bonzini @ 2014-09-30 22:20 UTC (permalink / raw)
To: Eduardo Habkost, qemu-devel; +Cc: Igor Mammedov, Andreas Färber
Il 30/09/2014 20:26, Eduardo Habkost ha scritto:
> Reasoning for each object file included in the test binary:
> * qom/cpu.o - for TYPE_CPU. Dependencies:
> * qom/qom-qobject.o
> * qom/qdev.o - for TYPE_DEVICE. Dependencies:
> * qom/container.o
> * vmstate.o. Dependencies:
> * qemu-file.o
> * hw/core/hotplug.o
> * hw/core/irq.o
> * hw/core/fw-path-provider.o
> * hw/core/qdev-properties.o
> * qom/object.o - for TYPE_OBJECT
> * x86_64-softmmu/target-i386/machine.o - for vmstate_x86_cpu
> * qemu-log.o - for the logging API, used by target-i386/cpu.c
> * libqemuutil.a - for QAPI visitors, error API, and other symbols
> * libqemustub.a - existing stubs, including: savevm, monitor symbols
>
> The remaining symbols used by target-i386/cpu.c were added as stubs to
> either tests/vl-stub.c and tests/x86-stub.c.
Nice. Luckily qemu-log.o doesn't bring in everything.
I think vl-stub.c has to be re-evaluated after your QOM accelerator
patch goes in.
tests/x86-stub.c perhaps can be moved to target-i386/test-stubs.c?
Paolo
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [Qemu-devel] [PATCH v2 4/7] tests: Add unit test for X86CPU code
2014-09-30 22:20 ` Paolo Bonzini
@ 2014-10-01 16:28 ` Eduardo Habkost
2014-10-01 18:18 ` Paolo Bonzini
0 siblings, 1 reply; 13+ messages in thread
From: Eduardo Habkost @ 2014-10-01 16:28 UTC (permalink / raw)
To: Paolo Bonzini; +Cc: Igor Mammedov, qemu-devel, Andreas Färber
On Wed, Oct 01, 2014 at 12:20:18AM +0200, Paolo Bonzini wrote:
> Il 30/09/2014 20:26, Eduardo Habkost ha scritto:
> > Reasoning for each object file included in the test binary:
> > * qom/cpu.o - for TYPE_CPU. Dependencies:
> > * qom/qom-qobject.o
> > * qom/qdev.o - for TYPE_DEVICE. Dependencies:
> > * qom/container.o
> > * vmstate.o. Dependencies:
> > * qemu-file.o
> > * hw/core/hotplug.o
> > * hw/core/irq.o
> > * hw/core/fw-path-provider.o
> > * hw/core/qdev-properties.o
> > * qom/object.o - for TYPE_OBJECT
> > * x86_64-softmmu/target-i386/machine.o - for vmstate_x86_cpu
> > * qemu-log.o - for the logging API, used by target-i386/cpu.c
> > * libqemuutil.a - for QAPI visitors, error API, and other symbols
> > * libqemustub.a - existing stubs, including: savevm, monitor symbols
> >
> > The remaining symbols used by target-i386/cpu.c were added as stubs to
> > either tests/vl-stub.c and tests/x86-stub.c.
>
> Nice. Luckily qemu-log.o doesn't bring in everything.
>
> I think vl-stub.c has to be re-evaluated after your QOM accelerator
> patch goes in.
>
> tests/x86-stub.c perhaps can be moved to target-i386/test-stubs.c?
I was trying to keep all test code inside tests/. But perhaps all the
target-specific test code (including test-x86-cpu.c) could be moved to
target directories, and we could build/run the target-specific test
cases from Makefile.target. That should simplify some of the logic I
have added, and fix the build dependency problem I mentioned in the
patch description.
--
Eduardo
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [Qemu-devel] [PATCH v2 4/7] tests: Add unit test for X86CPU code
2014-10-01 16:28 ` Eduardo Habkost
@ 2014-10-01 18:18 ` Paolo Bonzini
0 siblings, 0 replies; 13+ messages in thread
From: Paolo Bonzini @ 2014-10-01 18:18 UTC (permalink / raw)
To: Eduardo Habkost; +Cc: Igor Mammedov, qemu-devel, Andreas Färber
Il 01/10/2014 18:28, Eduardo Habkost ha scritto:
>> > tests/x86-stub.c perhaps can be moved to target-i386/test-stubs.c?
> I was trying to keep all test code inside tests/. But perhaps all the
> target-specific test code (including test-x86-cpu.c) could be moved to
> target directories, and we could build/run the target-specific test
> cases from Makefile.target. That should simplify some of the logic I
> have added, and fix the build dependency problem I mentioned in the
> patch description.
In the end that's just bikeshedding. Sooner or later we'll have to
organize tests/ in subdirectories, but it's probably early enough that
we may not care yet. tests/x86-stub.c be it.
Paolo
^ permalink raw reply [flat|nested] 13+ messages in thread
* [Qemu-devel] [PATCH v2 5/7] target-i386: Isolate enabled-by-default features to a separate array
2014-09-30 18:25 [Qemu-devel] [PATCH v2 0/7] Target-specific unit test support, add unit tests for target-i386/cpu.c code Eduardo Habkost
` (3 preceding siblings ...)
2014-09-30 18:26 ` [Qemu-devel] [PATCH v2 4/7] tests: Add unit test for X86CPU code Eduardo Habkost
@ 2014-09-30 18:26 ` Eduardo Habkost
2014-09-30 18:26 ` [Qemu-devel] [PATCH v2 6/7] tests: test-x86-cpu: Add TCG feature bit initialization test Eduardo Habkost
2014-09-30 18:26 ` [Qemu-devel] [PATCH v2 7/7] tests: test-x86-cpu: Add KVM " Eduardo Habkost
6 siblings, 0 replies; 13+ messages in thread
From: Eduardo Habkost @ 2014-09-30 18:26 UTC (permalink / raw)
To: qemu-devel; +Cc: Paolo Bonzini, Andreas Färber, Igor Mammedov
This will make it easier to write unit tests for the feature
initialization logic.
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
target-i386/cpu.c | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/target-i386/cpu.c b/target-i386/cpu.c
index e7bf9de..b1eb0cb 100644
--- a/target-i386/cpu.c
+++ b/target-i386/cpu.c
@@ -464,6 +464,11 @@ static uint32_t kvm_default_unset_features[FEATURE_WORDS] = {
[FEAT_1_ECX] = CPUID_EXT_MONITOR,
};
+/* Features that are added by default to all CPU models in any accelerator: */
+FeatureWordArray default_features_all = {
+ [FEAT_1_ECX] = CPUID_EXT_HYPERVISOR,
+};
+
void x86_cpu_compat_disable_kvm_features(FeatureWord w, uint32_t features)
{
kvm_default_features[w] &= ~features;
@@ -1993,15 +1998,14 @@ static void x86_cpu_load_def(X86CPU *cpu, X86CPUDefinition *def, Error **errp)
}
/* Special cases not set in the X86CPUDefinition structs: */
- if (kvm_enabled()) {
- FeatureWord w;
- for (w = 0; w < FEATURE_WORDS; w++) {
+ for (w = 0; w < FEATURE_WORDS; w++) {
+ if (kvm_enabled()) {
env->features[w] |= kvm_default_features[w];
env->features[w] &= ~kvm_default_unset_features[w];
}
+ env->features[w] |= default_features_all[w];
}
- env->features[FEAT_1_ECX] |= CPUID_EXT_HYPERVISOR;
/* sysenter isn't supported in compatibility mode on AMD,
* syscall isn't supported in compatibility mode on Intel.
--
1.9.3
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [Qemu-devel] [PATCH v2 6/7] tests: test-x86-cpu: Add TCG feature bit initialization test
2014-09-30 18:25 [Qemu-devel] [PATCH v2 0/7] Target-specific unit test support, add unit tests for target-i386/cpu.c code Eduardo Habkost
` (4 preceding siblings ...)
2014-09-30 18:26 ` [Qemu-devel] [PATCH v2 5/7] target-i386: Isolate enabled-by-default features to a separate array Eduardo Habkost
@ 2014-09-30 18:26 ` Eduardo Habkost
2014-09-30 18:26 ` [Qemu-devel] [PATCH v2 7/7] tests: test-x86-cpu: Add KVM " Eduardo Habkost
6 siblings, 0 replies; 13+ messages in thread
From: Eduardo Habkost @ 2014-09-30 18:26 UTC (permalink / raw)
To: qemu-devel; +Cc: Paolo Bonzini, Andreas Färber, Igor Mammedov
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
tests/test-x86-cpu.c | 25 +++++++++++++++++++++++++
1 file changed, 25 insertions(+)
diff --git a/tests/test-x86-cpu.c b/tests/test-x86-cpu.c
index 9227e20..e8e9a74 100644
--- a/tests/test-x86-cpu.c
+++ b/tests/test-x86-cpu.c
@@ -30,6 +30,30 @@ static void test_cpu_creation(void)
}
}
+static void test_cpu_features_tcg(void)
+{
+ int i;
+ for (i = 0; i < ARRAY_SIZE(builtin_x86_defs); ++i) {
+ FeatureWord w;
+ ObjectClass *oc;
+ X86CPU *cpu;
+ Error *error = NULL;
+ X86CPUDefinition *def = &builtin_x86_defs[i];
+ char features[] = "";
+
+ oc = x86_cpu_class_by_name(def->name);
+ cpu = X86_CPU(object_new(object_class_get_name(oc)));
+ x86_cpu_parse_featurestr(CPU(cpu), features, &error);
+
+ for (w = 0; w < FEATURE_WORDS; w++) {
+ uint32_t expected = def->features[w] | default_features_all[w];
+ uint32_t actual = cpu->env.features[w] | cpu->filtered_features[w];
+ g_assert_cmpint(actual, ==, expected);
+ }
+ object_unref(OBJECT(cpu));
+ }
+}
+
int main(int argc, char *argv[])
{
module_call_init(MODULE_INIT_QOM);
@@ -37,6 +61,7 @@ int main(int argc, char *argv[])
g_test_init(&argc, &argv, NULL);
g_test_add_func("/cpu/x86/creation", test_cpu_creation);
+ g_test_add_func("/cpu/x86/features/tcg", test_cpu_features_tcg);
g_test_run();
--
1.9.3
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [Qemu-devel] [PATCH v2 7/7] tests: test-x86-cpu: Add KVM feature bit initialization test
2014-09-30 18:25 [Qemu-devel] [PATCH v2 0/7] Target-specific unit test support, add unit tests for target-i386/cpu.c code Eduardo Habkost
` (5 preceding siblings ...)
2014-09-30 18:26 ` [Qemu-devel] [PATCH v2 6/7] tests: test-x86-cpu: Add TCG feature bit initialization test Eduardo Habkost
@ 2014-09-30 18:26 ` Eduardo Habkost
6 siblings, 0 replies; 13+ messages in thread
From: Eduardo Habkost @ 2014-09-30 18:26 UTC (permalink / raw)
To: qemu-devel; +Cc: Paolo Bonzini, Andreas Färber, Igor Mammedov
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
tests/test-x86-cpu.c | 28 ++++++++++++++++++++++++++++
1 file changed, 28 insertions(+)
diff --git a/tests/test-x86-cpu.c b/tests/test-x86-cpu.c
index e8e9a74..afd5088 100644
--- a/tests/test-x86-cpu.c
+++ b/tests/test-x86-cpu.c
@@ -54,6 +54,33 @@ static void test_cpu_features_tcg(void)
}
}
+static void test_cpu_features_kvm(void)
+{
+ int i;
+ kvm_allowed = true;
+ for (i = 0; i < ARRAY_SIZE(builtin_x86_defs); ++i) {
+ FeatureWord w;
+ ObjectClass *oc;
+ X86CPU *cpu;
+ Error *error = NULL;
+ X86CPUDefinition *def = &builtin_x86_defs[i];
+ char features[] = "";
+
+ oc = x86_cpu_class_by_name(def->name);
+ cpu = X86_CPU(object_new(object_class_get_name(oc)));
+ x86_cpu_parse_featurestr(CPU(cpu), features, &error);
+
+ for (w = 0; w < FEATURE_WORDS; w++) {
+ uint32_t expected = def->features[w] | default_features_all[w];
+ uint32_t actual = cpu->env.features[w] | cpu->filtered_features[w];
+ expected |= kvm_default_features[w];
+ expected &= ~kvm_default_unset_features[w];
+ g_assert_cmpint(actual, ==, expected);
+ }
+ object_unref(OBJECT(cpu));
+ }
+}
+
int main(int argc, char *argv[])
{
module_call_init(MODULE_INIT_QOM);
@@ -62,6 +89,7 @@ int main(int argc, char *argv[])
g_test_add_func("/cpu/x86/creation", test_cpu_creation);
g_test_add_func("/cpu/x86/features/tcg", test_cpu_features_tcg);
+ g_test_add_func("/cpu/x86/features/kvm", test_cpu_features_kvm);
g_test_run();
--
1.9.3
^ permalink raw reply related [flat|nested] 13+ messages in thread