From: Peter Maydell <peter.maydell@linaro.org>
To: Laszlo Ersek <lersek@redhat.com>
Cc: Kevin Wolf <kwolf@redhat.com>,
"qemu-devel@nongnu.org" <qemu-devel@nongnu.org>,
Stefan Hajnoczi <stefanha@redhat.com>,
Max Reitz <mreitz@redhat.com>
Subject: Re: Thread safety of coroutine-sigaltstack
Date: Sat, 23 Jan 2021 13:35:14 +0000 [thread overview]
Message-ID: <CAFEAcA_ZtJAQDiGRNeBzcmJ8mvrR-nDVGr=7ECHJmEogY-_T_Q@mail.gmail.com> (raw)
In-Reply-To: <bd4c2b77-11f5-88aa-ff9b-63f5782e99cd@redhat.com>
On Sat, 23 Jan 2021 at 00:06, Laszlo Ersek <lersek@redhat.com> wrote:
> On 01/22/21 11:14, Peter Maydell wrote:
> > I think (but have not checked) that that means we will build and
> > link the object file into the user-mode binaries if you happen
> > to build them in the same run as system-mode binaries,
>
> I did that, first running
>
> ./configure \
> --enable-debug \
> --target-list==x86_64-softmmu,x86_64-linux-user \
> --with-coroutine=sigaltstack
>
> Then I checked the "qemu-system-x86_64" and "qemu-x86_64" binaries with
> "nm". Only the former contains "coroutine_init":
>
> 00000000009725e4 t coroutine_init
>
> So I believe the coroutine object file(s) are not even linked into the
> user-mode emulators. (coroutine_init() is a constructor function, so I
> think it would be preserved otherwise, even if it had no explicit caller.)
I think the linker will only pull in a .o file from a static
library (for us, libqemuutil.a) if there's an explicit reference
to a real function that it needs; it won't pull it in merely because
it has a constructor function in it. I can't offhand find an official
docs reference for this, but here's a stack overflow question:
https://stackoverflow.com/questions/6589772/gcc-functions-with-constructor-attribute-are-not-being-linked
You can also touch the coroutine source file and watch the
build system rebuild the usermode binary. If you do a complete build,
then touch util/coroutine-ucontext.c, then do 'make -C builddir qemu-arm'
(or whatever usermode emulator you've configured) then:
* we build coroutine-ucontext.c into
libqemuutil.a.p/util_coroutine-ucontext.c.o
* we blow away libqemuutil.a and then run 'ar' to put a lot of .o
files into it, including libqemuutil.a.p/util_coroutine-ucontext.c.o
* we do some things with scripts/undefsym.py that aren't important here
* we re-link qemu-arm with all its directly used objects and also with
libqemuutil.a
So right now we aren't actually using the coroutine functions, but
if you did put in a call to one in code used by the usermode
emulator then that code would only fail to compile if you
were building the usermode emulators without either the tools
or the system emulators.
thanks
-- PMM
next prev parent reply other threads:[~2021-01-23 13:36 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-01-20 16:26 Thread safety of coroutine-sigaltstack Max Reitz
2021-01-20 16:50 ` Paolo Bonzini
2021-01-20 16:58 ` Eric Blake
2021-01-20 17:25 ` Laszlo Ersek
2021-01-21 9:27 ` Max Reitz
2021-01-21 13:34 ` Laszlo Ersek
2021-01-21 15:42 ` Max Reitz
2021-01-21 16:04 ` Daniel P. Berrangé
2021-01-21 16:05 ` Laszlo Ersek
2021-01-21 15:14 ` Paolo Bonzini
2021-01-21 16:07 ` Daniel P. Berrangé
2021-01-21 16:44 ` Peter Maydell
2021-01-21 17:24 ` Paolo Bonzini
2021-01-22 20:38 ` Laszlo Ersek
2021-01-22 21:34 ` Laszlo Ersek
2021-01-22 21:41 ` Laszlo Ersek
2021-01-22 7:55 ` Markus Armbruster
2021-01-22 8:48 ` Max Reitz
2021-01-22 10:14 ` Peter Maydell
2021-01-22 10:16 ` Max Reitz
2021-01-22 12:24 ` Laszlo Ersek
2021-01-23 0:06 ` Laszlo Ersek
2021-01-23 13:35 ` Peter Maydell [this message]
2021-01-25 22:15 ` Laszlo Ersek
2021-01-25 22:45 ` Paolo Bonzini
2021-01-26 8:57 ` Laszlo Ersek
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='CAFEAcA_ZtJAQDiGRNeBzcmJ8mvrR-nDVGr=7ECHJmEogY-_T_Q@mail.gmail.com' \
--to=peter.maydell@linaro.org \
--cc=kwolf@redhat.com \
--cc=lersek@redhat.com \
--cc=mreitz@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.com \
/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.