From e76c156250cabb9da97e105098208478eb9bdd2d Mon Sep 17 00:00:00 2001 From: Xavier Leroy Date: Fri, 11 Dec 2020 11:31:22 +0100 Subject: x86 32 bits: ABI non-conformance for functions returning structs/unions The wrong value was returned in EAX, instead of the address of the struct/union. Report and fix by Zhenguo Yin. Fixes: #377 --- x86/TargetPrinter.ml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'x86') diff --git a/x86/TargetPrinter.ml b/x86/TargetPrinter.ml index 481b09b9..da47d5c7 100644 --- a/x86/TargetPrinter.ml +++ b/x86/TargetPrinter.ml @@ -733,7 +733,7 @@ module Target(System: SYSTEM):TARGET = | Pret -> if (not Archi.ptr64) && (!current_function_sig).sig_cc.cc_structret then begin - fprintf oc " movl 0(%%esp), %%eax\n"; + fprintf oc " movl 4(%%esp), %%eax\n"; fprintf oc " ret $4\n" end else begin fprintf oc " ret\n" -- cgit