[LLVMdev] Wrong calling convention?

Duncan Sands baldrick at free.fr
Wed Mar 26 01:06:17 PDT 2008


> define internal i1 @Addr_045442A0() {
> 	alloca [8 x i8], align 4		; <[8 x i8]*>:1 [#uses=2]
> 	alloca i1, align 4		; <i1*>:2 [#uses=2]
> 	tail call void @F95478DA5_FFI_FN( [8 x i8]* %1 sret  )

this call uses the "struct-return" convention (due to the sret attribute).
On x86 this means that the caller is responsible for adjusting the stack
pointer after the call for the sret parameter.  If the callee is not following
the sret convention then the stack pointer will be adjusted wrongly and your
program will die horribly.

> 0x0e8d937b:     call   0x5053b0 <_ZN3lp04OpF0IN5IncDB9TDateTimeEXadL_ZNS2_3NowEvEEE1wEv>
> 0x0e8d9380:     sub    $0x4,%esp

Here you see the sret stack adjustment.



More information about the llvm-dev mailing list