Messages in this thread | | | Subject | Re: [PATCH 2/2] x86/asm: Fix inline asm call constraints for clang | From | "H. Peter Anvin" <> | Date | Wed, 20 Sep 2017 10:32:43 -0700 |
| |
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?
-hpa
| |