From: "Daniel P. Berrange" <berrange@redhat.com>
To: Stefan Weil <sw@weilnetz.de>
Cc: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] Win32 stdio not working if SDL is enabled
Date: Fri, 14 Aug 2015 13:15:18 +0100 [thread overview]
Message-ID: <20150814121518.GH7776@redhat.com> (raw)
In-Reply-To: <20150814111415.GF7776@redhat.com>
On Fri, Aug 14, 2015 at 12:14:15PM +0100, Daniel P. Berrange wrote:
> On Thu, Aug 13, 2015 at 07:48:47PM +0200, Stefan Weil wrote:
> > Am 13.08.2015 um 14:06 schrieb Daniel P. Berrange:
> > > When debugging some patches on Windows, I discovered that nothing printed
> > > to stderr ever appears on the console. Eventually I discovered that if I
> > > build with --disable-sdl, then stderr appears just fine.
> > >
> > > Looking at the code in vl.c I see a hack for SDL introduced in
> > >
> > > commit 59a36a2f6728081050afc6ec97d0018467999f79
> > > Author: Stefan Weil <weil@mail.berlios.de>
> > > Date: Thu Jun 18 20:11:03 2009 +0200
> > >
> > > Win32: Fix compilation with SDL.
> > >
> > >
> > > If I mostly kill the hack from vl.c, and just leave a plain '#undef main'
> > > then I get working console stderr once again.
> > >
> >
> > Hi Daniel,
> >
> > that's a feature of SDL 1.2: stdout and stderr are by default
> > redirected to files stdout.txt and stderr.txt in the executable's
> > directory.
> >
> > This redirection can be disabled by an environment variable
> > (SDL_STDIO_REDIRECT="no"). On my Linux machines, I always
> > set this variable, so when I run QEMU for Windows with
> > wine32 or wine64, stdout and stderr work.
> >
> > Printing to stdout / stderr on Windows can be an adventure:
> > depending on your shell (command.exe, cmd.exe, MinGW shell,
> > MinGW rxvt, Cygwin shell, ...) it works different, and I also
> > had application crashes when a GUI application which was
> > not started from a shell tried to print to stdout.
>
> I see it is something intentional done by SDL, but I don't think it is
> desirable in general. I rather doubt it would crash as that would imply
> that code is checking the return value of fprintf() and taking some action
> on error. Instead we exclusive ignore fprintf() return values, so if the
> OS is reporting an I/O error we'll be ignoring it. In any case, it is
> possible to build QEMU on Win32 without SDL, or set that env variable,
> at which point QEMU will be printing to stdio anyway. So in the unlikely
> case there is a crash scenario, we need to fix that regardless.
>
> IMHO we should be disabling this bogus behaviour of SDL so QEMU does not
> have different behaviour wrt stdio depending on what libraries you happen
> to build against, or what platform you choose. Expecting people to know
> about a magic env variable to make QEMU work as it does everywhere else
> is just broken.
A thought occurs to me - on Windows we actually build two copies of
the emulator
- qemu-system-x86_64.exe - linked to the "console" subsystem
- qemu-system-x86_64w.exe - linked to the "windows" subsystem [1]
With the 'windows' subsystem build it is reasonable to believe that the
user will not have any console generally available to view stderr/out.
So how about we make it such that when linked to the 'console' subsystem
we have stdout/stderr open by default, and when linked to the 'windows'
subsystem we have stdout/stderr redirected to a file (as SDL does). Except
that we make this redirection to a file happen in QEMU code, so it has
consistent behaviour even in non-SDL builds on Windows.
Regards,
Daniel
[1] '-mwindows'
This option is available for Cygwin and MinGW targets. It
specifies that a GUI application is to be generated by instructing
the linker to set the PE header subsystem type appropriately.
--
|: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org -o- http://virt-manager.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|
next prev parent reply other threads:[~2015-08-14 12:15 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-08-13 12:06 [Qemu-devel] Win32 stdio not working if SDL is enabled Daniel P. Berrange
2015-08-13 12:14 ` Pavel Fedin
2015-08-13 14:18 ` Daniel P. Berrange
2015-08-13 17:48 ` Stefan Weil
2015-08-14 11:14 ` Daniel P. Berrange
2015-08-14 12:15 ` Daniel P. Berrange [this message]
2015-08-14 14:59 ` Liviu Ionescu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20150814121518.GH7776@redhat.com \
--to=berrange@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=sw@weilnetz.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.