aboutsummaryrefslogtreecommitdiffstats
path: root/x86
diff options
context:
space:
mode:
authorXavier Leroy <xavier.leroy@college-de-france.fr>2020-12-11 11:31:22 +0100
committerXavier Leroy <xavier.leroy@college-de-france.fr>2020-12-11 11:31:22 +0100
commite76c156250cabb9da97e105098208478eb9bdd2d (patch)
treeea56611ff027492b6e96db64f19c9dd990a268d8 /x86
parentb40aef6c55b837786cd749260e8e8d8a1d328034 (diff)
downloadcompcert-kvx-e76c156250cabb9da97e105098208478eb9bdd2d.tar.gz
compcert-kvx-e76c156250cabb9da97e105098208478eb9bdd2d.zip
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
Diffstat (limited to 'x86')
-rw-r--r--x86/TargetPrinter.ml2
1 files changed, 1 insertions, 1 deletions
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"