diff options
author | Xavier Leroy <xavier.leroy@inria.fr> | 2015-01-27 16:57:20 +0100 |
---|---|---|
committer | Xavier Leroy <xavier.leroy@inria.fr> | 2015-01-27 16:57:20 +0100 |
commit | e096fa7aa6161e1f5a74001185eb3873a684c48d (patch) | |
tree | ca928bcb3f7b6b2237a626fbb1dbc1ce62b2e5d1 /driver/Driver.ml | |
parent | f00b70b6a17fdfb4e8606df891f6becc8102ef12 (diff) | |
download | compcert-e096fa7aa6161e1f5a74001185eb3873a684c48d.tar.gz compcert-e096fa7aa6161e1f5a74001185eb3873a684c48d.zip |
ABI compatibility for struct/union function arguments passed by value.
The passing of struct/union arguments by value implemented in the verified
part of CompCert is not compatible with the ARM, PowerPC and x86 ABI.
Here we enrich the StructReturn source-to-source emulation pass
so that it implements the calling conventions defined in these ABIs.
Plus: for x86, implement the returning of struct/union results by value
in a way compatible with the ABI.
Diffstat (limited to 'driver/Driver.ml')
-rw-r--r-- | driver/Driver.ml | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/driver/Driver.ml b/driver/Driver.ml index 5d4c2f9c..31d5096b 100644 --- a/driver/Driver.ml +++ b/driver/Driver.ml @@ -241,6 +241,7 @@ let process_c_file sourcename = let preproname = Filename.temp_file "compcert" ".i" in preprocess sourcename preproname; if !option_interp then begin + Machine.config := Machine.compcert_interpreter !Machine.config; let csyntax = parse_c_file sourcename preproname in safe_remove preproname; Interp.execute csyntax; @@ -583,7 +584,9 @@ let _ = begin match Configuration.arch with | "powerpc" -> Machine.ppc_32_bigendian | "arm" -> Machine.arm_littleendian - | "ia32" -> Machine.x86_32 + | "ia32" -> if Configuration.system = "macosx" + then Machine.x86_32_macosx + else Machine.x86_32 | _ -> assert false end; Builtins.set C2C.builtins; |