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
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 :|
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.
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 :|
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
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 :|
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/
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
© 2016 - 2026 Red Hat, Inc.