diff options
author | Xavier Leroy <xavier.leroy@college-de-france.fr> | 2020-12-11 11:31:22 +0100 |
---|---|---|
committer | Xavier Leroy <xavier.leroy@college-de-france.fr> | 2020-12-11 11:31:22 +0100 |
commit | e76c156250cabb9da97e105098208478eb9bdd2d (patch) | |
tree | ea56611ff027492b6e96db64f19c9dd990a268d8 /x86 | |
parent | b40aef6c55b837786cd749260e8e8d8a1d328034 (diff) | |
download | compcert-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.ml | 2 |
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" |