From ae2ece93da446b53b354b12f2f1dfd0cba6f57b7 Mon Sep 17 00:00:00 2001 From: James Lyon Date: Fri, 26 Apr 2013 00:31:46 +0100 Subject: Fixed i386 calling convention issue and CMake build on i386. The i386 calling convention expects the callee to pop 1 word of the stack when performing a struct ret. --- i386-gen.c | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'i386-gen.c') diff --git a/i386-gen.c b/i386-gen.c index 67123d6..044f9e6 100644 --- a/i386-gen.c +++ b/i386-gen.c @@ -464,6 +464,10 @@ ST_FUNC void gfunc_call(int nb_args) args_size -= 4; } } +#ifndef TCC_TARGET_PE + else if ((vtop->type.ref->type.t & VT_BTYPE) == VT_STRUCT) + args_size -= 4; +#endif gcall_or_jmp(0); if (args_size && func_call != FUNC_STDCALL) @@ -549,6 +553,10 @@ ST_FUNC void gfunc_prolog(CType *func_type) /* pascal type call ? */ if (func_call == FUNC_STDCALL) func_ret_sub = addr - 8; +#ifndef TCC_TARGET_PE + else if (func_vc) + func_ret_sub = 4; +#endif #ifdef CONFIG_TCC_BCHECK /* leave some room for bound checking code */ -- cgit v1.3.1