From: Florian Weimer <fweimer@redhat.com>
To: Peter Maydell <peter.maydell@linaro.org>
Cc: Kevin Wolf <kwolf@redhat.com>, Fam Zheng <fam@euphon.net>,
thuth@redhat.com, Daniel Berrange <berrange@redhat.com>,
qemu-block@nongnu.org,
Richard Henderson <richard.henderson@linaro.org>,
qemu-devel@nongnu.org, Stefan Hajnoczi <stefanha@redhat.com>,
Paolo Bonzini <pbonzini@redhat.com>, Warner Losh <imp@bsdimp.com>,
sguelton@redhat.com
Subject: Re: [RFC v2 1/4] tls: add macros for coroutine-safe TLS variables
Date: Thu, 02 Dec 2021 15:57:34 +0100 [thread overview]
Message-ID: <8735nb3vhd.fsf@oldenburg.str.redhat.com> (raw)
In-Reply-To: <CAFEAcA9psJ_vpZSduFVCqgisWgJVFnn2Vgap3vezWCrHK8yfjQ@mail.gmail.com> (Peter Maydell's message of "Thu, 2 Dec 2021 14:50:46 +0000")
* Peter Maydell:
> On Thu, 2 Dec 2021 at 14:44, Peter Maydell <peter.maydell@linaro.org> wrote:
>> My compiler-developer colleagues present the following case where
>> 'noinline' is not sufficient for the compiler to definitely
>> use different values of the address-of-the-TLS-var across an
>> intervening function call:
>>
>> __thread int i;
>>
>> __attribute__((noinline)) long get_ptr_i()
>> {
>> return (long)&i;
>> }
>>
>> void switcher();
>>
>> int g()
>> {
>> long a = get_ptr_i();
>> switcher();
>> return a == get_ptr_i();
>> }
>>
>> Trunk clang optimizes the comparison of the two pointers down
>> to "must be always true" even though they might not be if the
>> switcher() function has resulted in a change-of-thread:
>> https://godbolt.org/z/hd67zh6jW
>>
>> The 'optnone' attribute (clang-specific) seems to be able
>> to suppress this
>
> ...no it doesn't -- although the get_ptr_i() function is
> called both before and after, its return value is ignored
> and g() always still returns 'true'.
__attribute__ ((weak)) would mark get_ptr_i as interposable and should
act as an optimization barrier for any compiler. Unless the compiler
defaults -fno-semantic-interposition *and* feels very, very strongly
about its meaning (clang 13 doesn't seem to, despite the
-fno-semantic-interposition default even with -fpic).
Thanks,
Florian
next prev parent reply other threads:[~2021-12-02 14:59 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-12-01 17:01 [RFC v2 0/4] tls: add macros for coroutine-safe TLS variables Stefan Hajnoczi
2021-12-01 17:01 ` [RFC v2 1/4] " Stefan Hajnoczi
2021-12-01 18:24 ` Florian Weimer
2021-12-02 9:53 ` Stefan Hajnoczi
2021-12-02 14:44 ` Peter Maydell
2021-12-02 14:50 ` Peter Maydell
2021-12-02 14:57 ` Florian Weimer [this message]
2021-12-03 6:24 ` Serge Guelton
2021-12-01 17:01 ` [RFC v2 2/4] util/async: replace __thread with QEMU TLS macros Stefan Hajnoczi
2021-12-01 17:01 ` [RFC v2 3/4] rcu: use coroutine " Stefan Hajnoczi
2021-12-01 17:01 ` [RFC v2 4/4] cpus: use coroutine TLS macros for iothread_locked Stefan Hajnoczi
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=8735nb3vhd.fsf@oldenburg.str.redhat.com \
--to=fweimer@redhat.com \
--cc=berrange@redhat.com \
--cc=fam@euphon.net \
--cc=imp@bsdimp.com \
--cc=kwolf@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=richard.henderson@linaro.org \
--cc=sguelton@redhat.com \
--cc=stefanha@redhat.com \
--cc=thuth@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.