From: Dmitry Vyukov <dvyukov@google.com>
To: "H. Peter Anvin" <hpa@zytor.com>
Cc: Josh Poimboeuf <jpoimboe@redhat.com>,
"x86@kernel.org" <x86@kernel.org>,
LKML <linux-kernel@vger.kernel.org>,
Ingo Molnar <mingo@kernel.org>,
Thomas Gleixner <tglx@linutronix.de>,
Andy Lutomirski <luto@kernel.org>,
Linus Torvalds <torvalds@linux-foundation.org>,
Alexander Potapenko <glider@google.com>,
Matthias Kaehlcke <mka@chromium.org>,
Arnd Bergmann <arnd@arndb.de>,
Peter Zijlstra <peterz@infradead.org>,
Andrey Ryabinin <aryabinin@virtuozzo.com>
Subject: Re: [PATCH 2/2] x86/asm: Fix inline asm call constraints for clang
Date: Wed, 20 Sep 2017 19:38:09 +0200 [thread overview]
Message-ID: <CACT4Y+YrgBgKSR1ViWCuw2rxe9jrk3YNnGXXo1MNL+3rsFPaMw@mail.gmail.com> (raw)
In-Reply-To: <eddc6128-9ae8-a5ea-0174-98dfadf7d07b@zytor.com>
On Wed, Sep 20, 2017 at 7:32 PM, H. Peter Anvin <hpa@zytor.com> wrote:
> On 09/19/17 11:45, Josh Poimboeuf wrote:
>> For inline asm statements which have a CALL instruction, we list the
>> stack pointer as a constraint to convince GCC to ensure the frame
>> pointer is set up first:
>>
>> static inline void foo()
>> {
>> register void *__sp asm(_ASM_SP);
>> asm("call bar" : "+r" (__sp))
>> }
>>
>> Unfortunately, that pattern causes clang to corrupt the stack pointer.
>>
>> There's actually an easier way to achieve the same goal in GCC, without
>> causing trouble for clang. If we declare the stack pointer register
>> variable as a global variable, and remove the constraint altogether,
>> that convinces GCC to always set up the frame pointer before inserting
>> *any* inline asm.
>>
>> It basically acts as if *every* inline asm statement has a CALL
>> instruction. It's a bit overkill, but the performance impact should be
>> negligible.
>>
>
> Again, probably negligible, but why do we need a frame pointer just
> because we have a call assembly instruction?
I think we need just the frame itself and RSP pointing below this
frame. If we don't have a frame, CALL instruction will smash whatever
RSP happens to point to. Compiler doesn't have to setup RSP to point
below used part of stack in leaf functions.
next prev parent reply other threads:[~2017-09-20 17:38 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-09-19 18:45 [PATCH 0/2] x86: Fix inline asm call constraints for clang Josh Poimboeuf
2017-09-19 18:45 ` [PATCH 1/2] objtool: Handle another GCC stack pointer adjustment bug Josh Poimboeuf
2017-09-19 18:45 ` [PATCH 2/2] x86/asm: Fix inline asm call constraints for clang Josh Poimboeuf
2017-09-19 21:55 ` Alexander Potapenko
2017-09-19 22:25 ` Alexander Potapenko
2017-09-20 1:47 ` Josh Poimboeuf
2017-09-20 1:18 ` Josh Poimboeuf
2017-09-20 17:54 ` Josh Poimboeuf
2017-09-20 17:32 ` H. Peter Anvin
2017-09-20 17:38 ` Dmitry Vyukov [this message]
2017-09-20 17:46 ` H. Peter Anvin
2017-09-20 18:01 ` Dmitry Vyukov
2017-09-20 21:07 ` Josh Poimboeuf
2017-09-20 21:19 ` Andy Lutomirski
2017-09-21 8:12 ` Dmitry Vyukov
2017-09-21 11:52 ` Brian Gerst
2017-09-21 12:18 ` Dmitry Vyukov
2017-09-20 17:51 ` Josh Poimboeuf
2017-09-21 15:35 ` Ingo Molnar
2017-09-21 16:18 ` Josh Poimboeuf
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=CACT4Y+YrgBgKSR1ViWCuw2rxe9jrk3YNnGXXo1MNL+3rsFPaMw@mail.gmail.com \
--to=dvyukov@google.com \
--cc=arnd@arndb.de \
--cc=aryabinin@virtuozzo.com \
--cc=glider@google.com \
--cc=hpa@zytor.com \
--cc=jpoimboe@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=luto@kernel.org \
--cc=mingo@kernel.org \
--cc=mka@chromium.org \
--cc=peterz@infradead.org \
--cc=tglx@linutronix.de \
--cc=torvalds@linux-foundation.org \
--cc=x86@kernel.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).