[PATCH v2 4/4] dump: Build stubs once for non-x86 targets

Philippe Mathieu-Daudé posted 4 patches 1 month ago
Maintainers: Paolo Bonzini <pbonzini@redhat.com>, "Marc-André Lureau" <marcandre.lureau@redhat.com>, Ani Sinha <anisinha@redhat.com>
There is a newer version of this series
[PATCH v2 4/4] dump: Build stubs once for non-x86 targets
Posted by Philippe Mathieu-Daudé 1 month ago
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


Re: [PATCH v2 4/4] dump: Build stubs once for non-x86 targets
Posted by Marc-André Lureau 1 month ago
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
>
>
Re: [PATCH v2 4/4] dump: Build stubs once for non-x86 targets
Posted by Philippe Mathieu-Daudé 1 month ago
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
>