Rather than compiling the same content for all targets (unused
most of the time, i.e. qemu-system-avr ...), extract the non
x86 specific parts to a stub file and build it once for all
non-x86 targets.
Add a Kconfig symbol to only select the target-specific file
with the x86 target (rename this file with '-x86' suffix).
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
dump/win_dump-stubs.c | 21 +++++++++++++++++++++
dump/{win_dump.c => win_dump-x86.c} | 20 +-------------------
Kconfig | 1 +
dump/Kconfig | 4 ++++
dump/meson.build | 3 ++-
5 files changed, 29 insertions(+), 20 deletions(-)
create mode 100644 dump/win_dump-stubs.c
rename dump/{win_dump.c => win_dump-x86.c} (97%)
create mode 100644 dump/Kconfig
diff --git a/dump/win_dump-stubs.c b/dump/win_dump-stubs.c
new file mode 100644
index 00000000000..07d1a0c5ea9
--- /dev/null
+++ b/dump/win_dump-stubs.c
@@ -0,0 +1,21 @@
+/*
+ * Windows crashdump stubs
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
+
+#include "qemu/osdep.h"
+#include "qapi/error.h"
+#include "win_dump.h"
+
+bool win_dump_available(DumpState *s, Error **errp)
+{
+ error_setg(errp, "x86-64 Windows guest dump not built-in");
+
+ return false;
+}
+
+void create_win_dump(DumpState *s, Error **errp)
+{
+ g_assert_not_reached();
+}
diff --git a/dump/win_dump.c b/dump/win_dump-x86.c
similarity index 97%
rename from dump/win_dump.c
rename to dump/win_dump-x86.c
index e5fdc12ad34..4f8bcc356fc 100644
--- a/dump/win_dump.c
+++ b/dump/win_dump-x86.c
@@ -1,5 +1,5 @@
/*
- * Windows crashdump (target specific implementations)
+ * Windows crashdump (x86 specific implementations)
*
* Copyright (c) 2018 Virtuozzo International GmbH
*
@@ -18,8 +18,6 @@
#include "win_dump.h"
#include "cpu.h"
-#if defined(TARGET_X86_64)
-
static bool check_header(WinDumpHeader *h, bool *x64, Error **errp);
bool win_dump_available(DumpState *s, Error **errp)
@@ -494,19 +492,3 @@ out_free:
out_cr3:
first_x86_cpu->env.cr[3] = saved_cr3;
}
-
-#else /* !TARGET_X86_64 */
-
-bool win_dump_available(DumpState *s, Error **errp)
-{
- error_setg(errp, "Windows dump is only available for x86-64");
-
- return false;
-}
-
-void create_win_dump(DumpState *s, Error **errp)
-{
- g_assert_not_reached();
-}
-
-#endif
diff --git a/Kconfig b/Kconfig
index 63ca7f46df7..26388c12838 100644
--- a/Kconfig
+++ b/Kconfig
@@ -1,6 +1,7 @@
source Kconfig.host
source backends/Kconfig
source accel/Kconfig
+source dump/Kconfig
source target/Kconfig
source hw/Kconfig
source semihosting/Kconfig
diff --git a/dump/Kconfig b/dump/Kconfig
new file mode 100644
index 00000000000..99f99ff4a4f
--- /dev/null
+++ b/dump/Kconfig
@@ -0,0 +1,4 @@
+config WINDUMP
+ bool
+ default y if I386
+ depends on I386
diff --git a/dump/meson.build b/dump/meson.build
index 4277ce9328a..26e1561ed48 100644
--- a/dump/meson.build
+++ b/dump/meson.build
@@ -1,2 +1,3 @@
system_ss.add([files('dump.c', 'dump-hmp-cmds.c'), snappy, lzo])
-specific_ss.add(when: 'CONFIG_SYSTEM_ONLY', if_true: files('win_dump.c'))
+specific_ss.add(when: 'CONFIG_WINDUMP', if_true: files('win_dump-x86.c'))
+system_ss.add(when: 'CONFIG_WINDUMP', if_false: files('win_dump-stubs.c'))
--
2.52.0
Hi
On Thu, Jan 8, 2026 at 8:12 PM Philippe Mathieu-Daudé <philmd@linaro.org>
wrote:
> Rather than compiling the same content for all targets (unused
> most of the time, i.e. qemu-system-avr ...), extract the non
> x86 specific parts to a stub file and build it once for all
> non-x86 targets.
> Add a Kconfig symbol to only select the target-specific file
> with the x86 target (rename this file with '-x86' suffix).
>
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---
> dump/win_dump-stubs.c | 21 +++++++++++++++++++++
> dump/{win_dump.c => win_dump-x86.c} | 20 +-------------------
> Kconfig | 1 +
> dump/Kconfig | 4 ++++
> dump/meson.build | 3 ++-
> 5 files changed, 29 insertions(+), 20 deletions(-)
> create mode 100644 dump/win_dump-stubs.c
> rename dump/{win_dump.c => win_dump-x86.c} (97%)
> create mode 100644 dump/Kconfig
>
> diff --git a/dump/win_dump-stubs.c b/dump/win_dump-stubs.c
> new file mode 100644
> index 00000000000..07d1a0c5ea9
> --- /dev/null
> +++ b/dump/win_dump-stubs.c
> @@ -0,0 +1,21 @@
> +/*
> + * Windows crashdump stubs
> + *
> + * SPDX-License-Identifier: GPL-2.0-or-later
> + */
> +
> +#include "qemu/osdep.h"
> +#include "qapi/error.h"
> +#include "win_dump.h"
> +
> +bool win_dump_available(DumpState *s, Error **errp)
> +{
> + error_setg(errp, "x86-64 Windows guest dump not built-in");
> +
> + return false;
> +}
> +
> +void create_win_dump(DumpState *s, Error **errp)
> +{
> + g_assert_not_reached();
> +}
> diff --git a/dump/win_dump.c b/dump/win_dump-x86.c
> similarity index 97%
> rename from dump/win_dump.c
> rename to dump/win_dump-x86.c
> index e5fdc12ad34..4f8bcc356fc 100644
> --- a/dump/win_dump.c
> +++ b/dump/win_dump-x86.c
> @@ -1,5 +1,5 @@
> /*
> - * Windows crashdump (target specific implementations)
> + * Windows crashdump (x86 specific implementations)
> *
> * Copyright (c) 2018 Virtuozzo International GmbH
> *
> @@ -18,8 +18,6 @@
> #include "win_dump.h"
> #include "cpu.h"
>
> -#if defined(TARGET_X86_64)
> -
> static bool check_header(WinDumpHeader *h, bool *x64, Error **errp);
>
> bool win_dump_available(DumpState *s, Error **errp)
> @@ -494,19 +492,3 @@ out_free:
> out_cr3:
> first_x86_cpu->env.cr[3] = saved_cr3;
> }
> -
> -#else /* !TARGET_X86_64 */
> -
> -bool win_dump_available(DumpState *s, Error **errp)
> -{
> - error_setg(errp, "Windows dump is only available for x86-64");
> -
> - return false;
> -}
> -
> -void create_win_dump(DumpState *s, Error **errp)
> -{
> - g_assert_not_reached();
> -}
> -
> -#endif
> diff --git a/Kconfig b/Kconfig
> index 63ca7f46df7..26388c12838 100644
> --- a/Kconfig
> +++ b/Kconfig
> @@ -1,6 +1,7 @@
> source Kconfig.host
> source backends/Kconfig
> source accel/Kconfig
> +source dump/Kconfig
> source target/Kconfig
> source hw/Kconfig
> source semihosting/Kconfig
> diff --git a/dump/Kconfig b/dump/Kconfig
> new file mode 100644
> index 00000000000..99f99ff4a4f
> --- /dev/null
> +++ b/dump/Kconfig
> @@ -0,0 +1,4 @@
> +config WINDUMP
> + bool
> + default y if I386
> + depends on I386
> diff --git a/dump/meson.build b/dump/meson.build
> index 4277ce9328a..26e1561ed48 100644
> --- a/dump/meson.build
> +++ b/dump/meson.build
> @@ -1,2 +1,3 @@
> system_ss.add([files('dump.c', 'dump-hmp-cmds.c'), snappy, lzo])
> -specific_ss.add(when: 'CONFIG_SYSTEM_ONLY', if_true: files('win_dump.c'))
> +specific_ss.add(when: 'CONFIG_WINDUMP', if_true: files('win_dump-x86.c'))
>
I thought this could end up in qemu-user, but apparently I was wrong..
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> +system_ss.add(when: 'CONFIG_WINDUMP', if_false: files('win_dump-stubs.c'))
> --
> 2.52.0
>
>
On 9/1/26 09:50, Marc-André Lureau wrote:
> Hi
>
> On Thu, Jan 8, 2026 at 8:12 PM Philippe Mathieu-Daudé <philmd@linaro.org
> <mailto:philmd@linaro.org>> wrote:
>
> Rather than compiling the same content for all targets (unused
> most of the time, i.e. qemu-system-avr ...), extract the non
> x86 specific parts to a stub file and build it once for all
> non-x86 targets.
> Add a Kconfig symbol to only select the target-specific file
> with the x86 target (rename this file with '-x86' suffix).
>
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org
> <mailto:philmd@linaro.org>>
> ---
> dump/win_dump-stubs.c | 21 +++++++++++++++++++++
> dump/{win_dump.c => win_dump-x86.c} | 20 +-------------------
> Kconfig | 1 +
> dump/Kconfig | 4 ++++
> dump/meson.build | 3 ++-
> 5 files changed, 29 insertions(+), 20 deletions(-)
> create mode 100644 dump/win_dump-stubs.c
> rename dump/{win_dump.c => win_dump-x86.c} (97%)
> create mode 100644 dump/Kconfig
>
> diff --git a/dump/win_dump-stubs.c b/dump/win_dump-stubs.c
> new file mode 100644
> index 00000000000..07d1a0c5ea9
> --- /dev/null
> +++ b/dump/win_dump-stubs.c
> @@ -0,0 +1,21 @@
> +/*
> + * Windows crashdump stubs
> + *
> + * SPDX-License-Identifier: GPL-2.0-or-later
> + */
> +
> +#include "qemu/osdep.h"
> +#include "qapi/error.h"
> +#include "win_dump.h"
> +
> +bool win_dump_available(DumpState *s, Error **errp)
> +{
> + error_setg(errp, "x86-64 Windows guest dump not built-in");
> +
> + return false;
> +}
> +
> +void create_win_dump(DumpState *s, Error **errp)
> +{
> + g_assert_not_reached();
> +}
> diff --git a/dump/win_dump.c b/dump/win_dump-x86.c
> similarity index 97%
> rename from dump/win_dump.c
> rename to dump/win_dump-x86.c
> index e5fdc12ad34..4f8bcc356fc 100644
> --- a/dump/win_dump.c
> +++ b/dump/win_dump-x86.c
> @@ -1,5 +1,5 @@
> /*
> - * Windows crashdump (target specific implementations)
> + * Windows crashdump (x86 specific implementations)
> *
> * Copyright (c) 2018 Virtuozzo International GmbH
> *
> @@ -18,8 +18,6 @@
> #include "win_dump.h"
> #include "cpu.h"
>
> -#if defined(TARGET_X86_64)
> -
> static bool check_header(WinDumpHeader *h, bool *x64, Error **errp);
>
> bool win_dump_available(DumpState *s, Error **errp)
> @@ -494,19 +492,3 @@ out_free:
> out_cr3:
> first_x86_cpu->env.cr <http://env.cr>[3] = saved_cr3;
> }
> -
> -#else /* !TARGET_X86_64 */
> -
> -bool win_dump_available(DumpState *s, Error **errp)
> -{
> - error_setg(errp, "Windows dump is only available for x86-64");
> -
> - return false;
> -}
> -
> -void create_win_dump(DumpState *s, Error **errp)
> -{
> - g_assert_not_reached();
> -}
> -
> -#endif
> diff --git a/Kconfig b/Kconfig
> index 63ca7f46df7..26388c12838 100644
> --- a/Kconfig
> +++ b/Kconfig
> @@ -1,6 +1,7 @@
> source Kconfig.host
> source backends/Kconfig
> source accel/Kconfig
> +source dump/Kconfig
> source target/Kconfig
> source hw/Kconfig
> source semihosting/Kconfig
> diff --git a/dump/Kconfig b/dump/Kconfig
> new file mode 100644
> index 00000000000..99f99ff4a4f
> --- /dev/null
> +++ b/dump/Kconfig
> @@ -0,0 +1,4 @@
> +config WINDUMP
> + bool
> + default y if I386
> + depends on I386
> diff --git a/dump/meson.build b/dump/meson.build
> index 4277ce9328a..26e1561ed48 100644
> --- a/dump/meson.build
> +++ b/dump/meson.build
> @@ -1,2 +1,3 @@
> system_ss.add([files('dump.c', 'dump-hmp-cmds.c'), snappy, lzo])
> -specific_ss.add(when: 'CONFIG_SYSTEM_ONLY', if_true:
> files('win_dump.c'))
> +specific_ss.add(when: 'CONFIG_WINDUMP', if_true: files('win_dump-
> x86.c'))
>
>
> I thought this could end up in qemu-user, but apparently I was wrong..
I was myself surprised too. I think this is somehow by luck, because
IIUC Kconfig symbols aren't evaluated for user emulation (IOW the file
isn't added because CONFIG_WINDUMP is unset on USER).
>
> Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com
> <mailto:marcandre.lureau@redhat.com>>
Thanks!
>
> +system_ss.add(when: 'CONFIG_WINDUMP', if_false: files('win_dump-
> stubs.c'))
> --
> 2.52.0
>
© 2016 - 2026 Red Hat, Inc.