On Tue, Jul 07, 2015 at 07:53:49PM +0200, Martin Jambor wrote: > I've been asked to look into the item one of > http://permalink.gmane.org/gmane.linux.kernel/1990397 and found out > that at least shrink-wrapping happily moves prologue past an asm > statement which can be bad if the asm statement contains a call > instruction. > > Am I right concluding that this is a bug? Looking into the manual and > at requires_stack_frame_p() in shrink-wrap.c, I do not see any obvious > way of marking the asm statement as requiring the stack frame (but I > will not mind being proven wrong). Do we want to create one, such as > only disallowing moving prologue past volatile asm statements? Any > other ideas?
For architectures like PowerPC where all calls clobber some register, you can write e.g. asm("bl func" : : : "lr"); and all is well (better than saving/restoring LR manually, too). For other archs, e.g. x86-64, you can do register void *sp asm("%sp"); asm volatile("call func" : "+r"(sp)); and the result seems to be optimal as well. Some special clobber, maybe "stack" (like "memory", which won't work) could be nicer? What should the *exact* semantics of that be? Segher