From: Josh Poimboeuf <jpoimboe@redhat.com>
To: "H. Peter Anvin" <hpa@zytor.com>
Cc: x86@kernel.org, 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>,
Dmitriy Vyukov <dvyukov@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 12:51:25 -0500 [thread overview]
Message-ID: <20170920175125.2quikhfdy2okubsw@treble> (raw)
In-Reply-To: <eddc6128-9ae8-a5ea-0174-98dfadf7d07b@zytor.com>
On Wed, Sep 20, 2017 at 10:32:43AM -0700, H. Peter Anvin 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?
It's frame pointer convention. Without it, if dumping the stack from
the called function, a function will get skipped in the stack trace.
--
Josh
next prev parent reply other threads:[~2017-09-20 17:51 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-09-19 18:45 [PATCH 0/2] x86: " 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
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 [this message]
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=20170920175125.2quikhfdy2okubsw@treble \
--to=jpoimboe@redhat.com \
--cc=arnd@arndb.de \
--cc=aryabinin@virtuozzo.com \
--cc=dvyukov@google.com \
--cc=glider@google.com \
--cc=hpa@zytor.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
Powered by JetHome