This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
Hello! Due to the fact that libFFI does not handle C99 _Complex arguments correctly [1], libgo passes Complex64 and Complex128 arguments via a temporary structure. However, passing parts of complex number in a structure is not the same as passing true C99 _Complex value, so this workaround introduces ABI mismatch between caller and callee. This mismatch results in wrong passed values of complex types. Fortunately all x86 ABIs tolerate this mismatch, but other targets (i.e. alpha) don't have this privilege. Attached patch disables passing of C99 _Complex arguments via FFI on all targets, other than x86 (to be on the safe side w.r.t. other targets). Hopefully, someday libffi will be extended to handle _Complex arguments in correct way. Patch was tested on x86_64-pc-linux-gnu {,-m32} and alphaev68-pc-linux-gnu. [1] http://sourceware.org/ml/libffi-discuss/2007/msg00010.html Uros.
Attachment:
g.diff.txt
Description: Text document
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |