[PATCH 2/2] dump/win_dump: Use stubs on non-Windows hosts like POSIX

Philippe Mathieu-Daudé posted 2 patches 1 month ago
Maintainers: "Marc-André Lureau" <marcandre.lureau@redhat.com>, Ani Sinha <anisinha@redhat.com>
There is a newer version of this series
[PATCH 2/2] dump/win_dump: Use stubs on non-Windows hosts like POSIX
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 ...), build it once per
POSIX hosts. Check Windows host (less likely) before x86 host.

Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
 dump/win_dump-stubs.c | 21 +++++++++++++++++++++
 dump/win_dump.c       | 12 ++++++++----
 dump/meson.build      |  6 +++++-
 3 files changed, 34 insertions(+), 5 deletions(-)
 create mode 100644 dump/win_dump-stubs.c

diff --git a/dump/win_dump-stubs.c b/dump/win_dump-stubs.c
new file mode 100644
index 00000000000..722c66740a2
--- /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(Error **errp)
+{
+    error_setg(errp, "Windows dump is only available on Windows");
+
+    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.c
index 6e07913dfb4..5b2b55d9ff7 100644
--- a/dump/win_dump.c
+++ b/dump/win_dump.c
@@ -12,14 +12,16 @@
 #include "system/dump.h"
 #include "qapi/error.h"
 #include "qemu/error-report.h"
+#include "win_dump.h"
+
+#ifdef CONFIG_WIN32
+#if defined(TARGET_X86_64)
+
 #include "exec/cpu-defs.h"
 #include "hw/core/cpu.h"
 #include "qemu/win_dump_defs.h"
-#include "win_dump.h"
 #include "cpu.h"
 
-#if defined(TARGET_X86_64)
-
 bool win_dump_available(Error **errp)
 {
     return true;
@@ -478,7 +480,9 @@ out_cr3:
     first_x86_cpu->env.cr[3] = saved_cr3;
 }
 
-#else /* !TARGET_X86_64 */
+#endif /* !TARGET_X86_64 */
+
+#else /* !CONFIG_WIN32 */
 
 bool win_dump_available(Error **errp)
 {
diff --git a/dump/meson.build b/dump/meson.build
index 4277ce9328a..0aaf3f65d9c 100644
--- a/dump/meson.build
+++ b/dump/meson.build
@@ -1,2 +1,6 @@
 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'))
+if host_os == 'windows'
+  system_ss.add(files('win_dump.c'))
+else
+  system_ss.add(files('win_dump-stubs.c'))
+endif
-- 
2.52.0


Re: [PATCH 2/2] dump/win_dump: Use stubs on non-Windows hosts like POSIX
Posted by Daniel P. Berrangé 1 month ago
On Wed, Jan 07, 2026 at 07:05:19PM +0100, Philippe Mathieu-Daudé wrote:
> Rather than compiling the same content for all targets (unused
> most of the time, i.e. qemu-system-avr ...), build it once per
> POSIX hosts. Check Windows host (less likely) before x86 host.
> 
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---
>  dump/win_dump-stubs.c | 21 +++++++++++++++++++++
>  dump/win_dump.c       | 12 ++++++++----
>  dump/meson.build      |  6 +++++-
>  3 files changed, 34 insertions(+), 5 deletions(-)
>  create mode 100644 dump/win_dump-stubs.c

snip

> diff --git a/dump/meson.build b/dump/meson.build
> index 4277ce9328a..0aaf3f65d9c 100644
> --- a/dump/meson.build
> +++ b/dump/meson.build
> @@ -1,2 +1,6 @@
>  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'))
> +if host_os == 'windows'
> +  system_ss.add(files('win_dump.c'))
> +else
> +  system_ss.add(files('win_dump-stubs.c'))
> +endif

This is very wrong.

The win_dump.c  file has no association with Windows hosts. It is about
creating crash dumps of Windows *guests* in the Windows dump format. The
current conditional which builds it on TARGET_X86_64 is correct.


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 :|


Re: [PATCH 2/2] dump/win_dump: Use stubs on non-Windows hosts like POSIX
Posted by Philippe Mathieu-Daudé 1 month ago
On 8/1/26 10:11, Daniel P. Berrangé wrote:
> On Wed, Jan 07, 2026 at 07:05:19PM +0100, Philippe Mathieu-Daudé wrote:
>> Rather than compiling the same content for all targets (unused
>> most of the time, i.e. qemu-system-avr ...), build it once per
>> POSIX hosts. Check Windows host (less likely) before x86 host.
>>
>> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
>> ---
>>   dump/win_dump-stubs.c | 21 +++++++++++++++++++++
>>   dump/win_dump.c       | 12 ++++++++----
>>   dump/meson.build      |  6 +++++-
>>   3 files changed, 34 insertions(+), 5 deletions(-)
>>   create mode 100644 dump/win_dump-stubs.c
> 
> snip
> 
>> diff --git a/dump/meson.build b/dump/meson.build
>> index 4277ce9328a..0aaf3f65d9c 100644
>> --- a/dump/meson.build
>> +++ b/dump/meson.build
>> @@ -1,2 +1,6 @@
>>   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'))
>> +if host_os == 'windows'
>> +  system_ss.add(files('win_dump.c'))
>> +else
>> +  system_ss.add(files('win_dump-stubs.c'))
>> +endif
> 
> This is very wrong.
> 
> The win_dump.c  file has no association with Windows hosts. It is about
> creating crash dumps of Windows *guests* in the Windows dump format. The
> current conditional which builds it on TARGET_X86_64 is correct.

Great to know this is a *guest* feature and not a *host* one.

Something else is currently wrong, because this file is built with
qemu-system-avr on macOS.

Anyway, I'll revisit, thanks.

Re: [PATCH 2/2] dump/win_dump: Use stubs on non-Windows hosts like POSIX
Posted by Daniel P. Berrangé 1 month ago
On Thu, Jan 08, 2026 at 11:51:00AM +0100, Philippe Mathieu-Daudé wrote:
> On 8/1/26 10:11, Daniel P. Berrangé wrote:
> > On Wed, Jan 07, 2026 at 07:05:19PM +0100, Philippe Mathieu-Daudé wrote:
> > > Rather than compiling the same content for all targets (unused
> > > most of the time, i.e. qemu-system-avr ...), build it once per
> > > POSIX hosts. Check Windows host (less likely) before x86 host.
> > > 
> > > Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> > > ---
> > >   dump/win_dump-stubs.c | 21 +++++++++++++++++++++
> > >   dump/win_dump.c       | 12 ++++++++----
> > >   dump/meson.build      |  6 +++++-
> > >   3 files changed, 34 insertions(+), 5 deletions(-)
> > >   create mode 100644 dump/win_dump-stubs.c
> > 
> > snip
> > 
> > > diff --git a/dump/meson.build b/dump/meson.build
> > > index 4277ce9328a..0aaf3f65d9c 100644
> > > --- a/dump/meson.build
> > > +++ b/dump/meson.build
> > > @@ -1,2 +1,6 @@
> > >   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'))
> > > +if host_os == 'windows'
> > > +  system_ss.add(files('win_dump.c'))
> > > +else
> > > +  system_ss.add(files('win_dump-stubs.c'))
> > > +endif
> > 
> > This is very wrong.
> > 
> > The win_dump.c  file has no association with Windows hosts. It is about
> > creating crash dumps of Windows *guests* in the Windows dump format. The
> > current conditional which builds it on TARGET_X86_64 is correct.
> 
> Great to know this is a *guest* feature and not a *host* one.
> 
> Something else is currently wrong, because this file is built with
> qemu-system-avr on macOS.

Why is that a problem ? The entire file content is surrounded with

  #if defined(TARGET_X86_64)
  ...the impl...
  #else
  ...stubs...
  #endif

soo qemu-system-avr will be building the stubs which is fine. macOS
is not a factor, since QEMU is fine to emulate Windows guests on
macOS hosts and thus Win dump is in scope for macOS

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 :|


Re: [PATCH 2/2] dump/win_dump: Use stubs on non-Windows hosts like POSIX
Posted by Philippe Mathieu-Daudé 1 month ago
On 8/1/26 11:53, Daniel P. Berrangé wrote:
> On Thu, Jan 08, 2026 at 11:51:00AM +0100, Philippe Mathieu-Daudé wrote:
>> On 8/1/26 10:11, Daniel P. Berrangé wrote:
>>> On Wed, Jan 07, 2026 at 07:05:19PM +0100, Philippe Mathieu-Daudé wrote:
>>>> Rather than compiling the same content for all targets (unused
>>>> most of the time, i.e. qemu-system-avr ...), build it once per
>>>> POSIX hosts. Check Windows host (less likely) before x86 host.
>>>>
>>>> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
>>>> ---
>>>>    dump/win_dump-stubs.c | 21 +++++++++++++++++++++
>>>>    dump/win_dump.c       | 12 ++++++++----
>>>>    dump/meson.build      |  6 +++++-
>>>>    3 files changed, 34 insertions(+), 5 deletions(-)
>>>>    create mode 100644 dump/win_dump-stubs.c
>>>
>>> snip
>>>
>>>> diff --git a/dump/meson.build b/dump/meson.build
>>>> index 4277ce9328a..0aaf3f65d9c 100644
>>>> --- a/dump/meson.build
>>>> +++ b/dump/meson.build
>>>> @@ -1,2 +1,6 @@
>>>>    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'))
>>>> +if host_os == 'windows'
>>>> +  system_ss.add(files('win_dump.c'))
>>>> +else
>>>> +  system_ss.add(files('win_dump-stubs.c'))
>>>> +endif
>>>
>>> This is very wrong.
>>>
>>> The win_dump.c  file has no association with Windows hosts. It is about
>>> creating crash dumps of Windows *guests* in the Windows dump format. The
>>> current conditional which builds it on TARGET_X86_64 is correct.
>>
>> Great to know this is a *guest* feature and not a *host* one.
>>
>> Something else is currently wrong, because this file is built with
>> qemu-system-avr on macOS.
> 
> Why is that a problem ?

Single binary can not be linked because each target has these same symbols.

> The entire file content is surrounded with
> 
>    #if defined(TARGET_X86_64)
>    ...the impl...
>    #else
>    ...stubs...
>    #endif
> 
> soo qemu-system-avr will be building the stubs which is fine. macOS
> is not a factor, since QEMU is fine to emulate Windows guests on
> macOS hosts and thus Win dump is in scope for macOS
> 
> With regards,
> Daniel


Re: [PATCH 2/2] dump/win_dump: Use stubs on non-Windows hosts like POSIX
Posted by Daniel P. Berrangé 1 month ago
On Thu, Jan 08, 2026 at 12:14:30PM +0100, Philippe Mathieu-Daudé wrote:
> On 8/1/26 11:53, Daniel P. Berrangé wrote:
> > On Thu, Jan 08, 2026 at 11:51:00AM +0100, Philippe Mathieu-Daudé wrote:
> > > On 8/1/26 10:11, Daniel P. Berrangé wrote:
> > > > On Wed, Jan 07, 2026 at 07:05:19PM +0100, Philippe Mathieu-Daudé wrote:
> > > > > Rather than compiling the same content for all targets (unused
> > > > > most of the time, i.e. qemu-system-avr ...), build it once per
> > > > > POSIX hosts. Check Windows host (less likely) before x86 host.
> > > > > 
> > > > > Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> > > > > ---
> > > > >    dump/win_dump-stubs.c | 21 +++++++++++++++++++++
> > > > >    dump/win_dump.c       | 12 ++++++++----
> > > > >    dump/meson.build      |  6 +++++-
> > > > >    3 files changed, 34 insertions(+), 5 deletions(-)
> > > > >    create mode 100644 dump/win_dump-stubs.c
> > > > 
> > > > snip
> > > > 
> > > > > diff --git a/dump/meson.build b/dump/meson.build
> > > > > index 4277ce9328a..0aaf3f65d9c 100644
> > > > > --- a/dump/meson.build
> > > > > +++ b/dump/meson.build
> > > > > @@ -1,2 +1,6 @@
> > > > >    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'))
> > > > > +if host_os == 'windows'
> > > > > +  system_ss.add(files('win_dump.c'))
> > > > > +else
> > > > > +  system_ss.add(files('win_dump-stubs.c'))
> > > > > +endif
> > > > 
> > > > This is very wrong.
> > > > 
> > > > The win_dump.c  file has no association with Windows hosts. It is about
> > > > creating crash dumps of Windows *guests* in the Windows dump format. The
> > > > current conditional which builds it on TARGET_X86_64 is correct.
> > > 
> > > Great to know this is a *guest* feature and not a *host* one.
> > > 
> > > Something else is currently wrong, because this file is built with
> > > qemu-system-avr on macOS.
> > 
> > Why is that a problem ?
> 
> Single binary can not be linked because each target has these same symbols.

So we need a make 'win_dump_available()' into a runtime check against
the current target == x86, and then unconditionally build the rest of
the file ? How do we provide access to target specific types in such
builds as merely removing the #ifdef shows missing X86CPU / CPUX86State
types for most targets.

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 :|


Re: [PATCH 2/2] dump/win_dump: Use stubs on non-Windows hosts like POSIX
Posted by Philippe Mathieu-Daudé 1 month ago
On 8/1/26 12:36, Daniel P. Berrangé wrote:
> On Thu, Jan 08, 2026 at 12:14:30PM +0100, Philippe Mathieu-Daudé wrote:
>> On 8/1/26 11:53, Daniel P. Berrangé wrote:
>>> On Thu, Jan 08, 2026 at 11:51:00AM +0100, Philippe Mathieu-Daudé wrote:
>>>> On 8/1/26 10:11, Daniel P. Berrangé wrote:
>>>>> On Wed, Jan 07, 2026 at 07:05:19PM +0100, Philippe Mathieu-Daudé wrote:
>>>>>> Rather than compiling the same content for all targets (unused
>>>>>> most of the time, i.e. qemu-system-avr ...), build it once per
>>>>>> POSIX hosts. Check Windows host (less likely) before x86 host.
>>>>>>
>>>>>> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
>>>>>> ---
>>>>>>     dump/win_dump-stubs.c | 21 +++++++++++++++++++++
>>>>>>     dump/win_dump.c       | 12 ++++++++----
>>>>>>     dump/meson.build      |  6 +++++-
>>>>>>     3 files changed, 34 insertions(+), 5 deletions(-)
>>>>>>     create mode 100644 dump/win_dump-stubs.c
>>>>>
>>>>> snip
>>>>>
>>>>>> diff --git a/dump/meson.build b/dump/meson.build
>>>>>> index 4277ce9328a..0aaf3f65d9c 100644
>>>>>> --- a/dump/meson.build
>>>>>> +++ b/dump/meson.build
>>>>>> @@ -1,2 +1,6 @@
>>>>>>     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'))
>>>>>> +if host_os == 'windows'
>>>>>> +  system_ss.add(files('win_dump.c'))
>>>>>> +else
>>>>>> +  system_ss.add(files('win_dump-stubs.c'))
>>>>>> +endif
>>>>>
>>>>> This is very wrong.
>>>>>
>>>>> The win_dump.c  file has no association with Windows hosts. It is about
>>>>> creating crash dumps of Windows *guests* in the Windows dump format. The
>>>>> current conditional which builds it on TARGET_X86_64 is correct.
>>>>
>>>> Great to know this is a *guest* feature and not a *host* one.
>>>>
>>>> Something else is currently wrong, because this file is built with
>>>> qemu-system-avr on macOS.
>>>
>>> Why is that a problem ?
>>
>> Single binary can not be linked because each target has these same symbols.
> 
> So we need a make 'win_dump_available()' into a runtime check against
> the current target == x86, and then unconditionally build the rest of
> the file ? How do we provide access to target specific types in such
> builds as merely removing the #ifdef shows missing X86CPU / CPUX86State
> types for most targets.

I went with using a new Kconfig symbol in v2, see:
http://lore.kernel.org/qemu-devel/20260108161220.15146-5-philmd@linaro.org/

Re: [PATCH 2/2] dump/win_dump: Use stubs on non-Windows hosts like POSIX
Posted by Marc-André Lureau 1 month ago
Hi

On Wed, Jan 7, 2026 at 10:08 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 ...), build it once per
> POSIX hosts. Check Windows host (less likely) before x86 host.
>
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---
>  dump/win_dump-stubs.c | 21 +++++++++++++++++++++
>  dump/win_dump.c       | 12 ++++++++----
>  dump/meson.build      |  6 +++++-
>  3 files changed, 34 insertions(+), 5 deletions(-)
>  create mode 100644 dump/win_dump-stubs.c
>
> diff --git a/dump/win_dump-stubs.c b/dump/win_dump-stubs.c
> new file mode 100644
> index 00000000000..722c66740a2
> --- /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(Error **errp)
> +{
> +    error_setg(errp, "Windows dump is only available on Windows");
> +
> +    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.c
> index 6e07913dfb4..5b2b55d9ff7 100644
> --- a/dump/win_dump.c
> +++ b/dump/win_dump.c
> @@ -12,14 +12,16 @@
>  #include "system/dump.h"
>  #include "qapi/error.h"
>  #include "qemu/error-report.h"
> +#include "win_dump.h"
> +
> +#ifdef CONFIG_WIN32

Why check CONFIG_WIN32 in a windows-only file?

> +#if defined(TARGET_X86_64)
> +
>  #include "exec/cpu-defs.h"
>  #include "hw/core/cpu.h"
>  #include "qemu/win_dump_defs.h"
> -#include "win_dump.h"
>  #include "cpu.h"
>
> -#if defined(TARGET_X86_64)
> -
>  bool win_dump_available(Error **errp)
>  {
>      return true;
> @@ -478,7 +480,9 @@ out_cr3:
>      first_x86_cpu->env.cr[3] = saved_cr3;
>  }
>
> -#else /* !TARGET_X86_64 */
> +#endif /* !TARGET_X86_64 */
> +
> +#else /* !CONFIG_WIN32 */
>
>  bool win_dump_available(Error **errp)
>  {
> diff --git a/dump/meson.build b/dump/meson.build
> index 4277ce9328a..0aaf3f65d9c 100644
> --- a/dump/meson.build
> +++ b/dump/meson.build
> @@ -1,2 +1,6 @@
>  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'))
> +if host_os == 'windows'
> +  system_ss.add(files('win_dump.c'))
> +else
> +  system_ss.add(files('win_dump-stubs.c'))
> +endif
> --
> 2.52.0
>
>


-- 
Marc-André Lureau