Even though __cdecl is accepted but typically ignored on ARM and x64 processors by the compiler, the cross build for Linux/ARM is broken (while doing the build time) by the [-Werror,-Wignored-attributes] policy of the compiler. This issue was suddenly generated since appending of 'Interop' test folder. Mr. @tijoytom, Could you explain us why we have to keep the __cdecl calling convention?.
/cc @jkotas , @benpye , @tijoytom
Build environment:
- Build PC: Intel i5 CPU (quad core) , MEM 8GiB
- Build OS: Ubuntu 14.04 X86 64bit
- Memory: DDR3 8GiB
- Commit number: 586ce53 (Fri Mar 11 18:57:50 2016)
- Build command:
u14.04$> cd ./coreclr
u14.04$> time ROOTFS_DIR=/work/dotnet/rootfs-coreclr/arm ./build.sh arm debug verbose cross
Build Break:
. . . . UPPER OMISSIOn . . . . .
/usr/bin/clang++-3.5 -fPIC -Wall -Wno-null-conversion -std=c++11 -g -O0 -target arm-linux-gnueabihf -B /work/dotnet/rootfs-coreclr/arm/usr/lib/gcc/arm-linux-gnueabihf -L/work/dotnet/rootfs-coreclr/arm/lib/arm-linux-gnueabihf --sysroot=/work/dotnet/rootfs-coreclr/arm -target arm-linux-gnueabihf -B /work/dotnet/rootfs-coreclr/arm/usr/lib/gcc/arm-linux-gnueabihf -L/work/dotnet/rootfs-coreclr/arm/lib/arm-linux-gnueabihf --sysroot=/work/dotnet/rootfs-coreclr/arm -target arm-linux-gnueabihf -B /work/dotnet/rootfs-coreclr/arm/usr/lib/gcc/arm-linux-gnueabihf -L/work/dotnet/rootfs-coreclr/arm/lib/arm-linux-gnueabihf --sysroot=/work/dotnet/rootfs-coreclr/arm -shared -Wl,-soname,libRefCharArrayNative.so -o libRefCharArrayNative.so CMakeFiles/RefCharArrayNative.dir/RefCharArrayNative.cpp.o
/work/dotnet/arm32/coreclr/tests/src/Interop/StringMarshalling/LPSTR/LPSTRTestNative.cpp:111:27: error:
calling convention '__cdecl' ignored for this target
[-Werror,-Wignored-attributes]
extern "C" DLL_EXPORT int __cdecl Writeline(char * pFormat, int i, char ...
^
/work/dotnet/arm32/coreclr/tests/src/Interop/StringMarshalling/LPSTR/LPSTRTestNative.cpp:127:28: error:
calling convention '__cdecl' ignored for this target
[-Werror,-Wignored-attributes]
extern "C" DLL_EXPORT BOOL __cdecl RPinvoke_DelMarshal_InOut(Test_DelMar...
^
/work/dotnet/arm32/coreclr/tests/src/Interop/StringMarshalling/LPSTR/LPSTRTestNative.cpp:146:17: error:
calling convention '__cdecl' ignored for this target
[-Werror,-Wignored-attributes]
typedef LPCSTR (__cdecl * Test_DelMarshalPointer_Out)(/*[out]*/ LPSTR * s);
^
3 errors generated.
make[2]: *** [tests/src/Interop/StringMarshalling/LPSTR/CMakeFiles/LPSTRTestNative.dir/LPSTRTestNative.cpp.o] 오류 1
make[2]: Leaving directory `/work/dotnet/arm32/coreclr/bin/obj/Linux.arm.Debug'
make[1]: *** [tests/src/Interop/StringMarshalling/LPSTR/CMakeFiles/LPSTRTestNative.dir/all] 오류 2
make[1]: /usr/bin/cmake -E cmake_progress_report /work/dotnet/arm32/coreclr/bin/obj/Linux.arm.Debug/CMakeFiles
*** 끝나지 않은 작업을 기다리고 있습니다....
/work/dotnet/arm32/coreclr/tests/src/Interop/StringMarshalling/LPTSTR/LPTSTRTestNative.cpp:129:17: error:
calling convention '__cdecl' ignored for this target
[-Werror,-Wignored-attributes]
typedef LPTSTR (__cdecl * Test_Del_MarshalStrB_Out)(/*[out]*/ LPTSTR * s);
^
1 error generated.
/work/dotnet/arm32/coreclr/src/pal/tests/palsuite/exception_handling/pal_sxs/test1/exceptionsxs.cpp:74:5: error: calling convention '__cdecl' ignored for this target [-Werror,-Wignored-attributes]
int __cdecl main(int argc, char *argv[])
^
1 error generated.
[ 89%] make[2]: *** [src/pal/tests/palsuite/exception_handling/pal_sxs/test1/CMakeFiles/paltest_pal_sxs_test1.dir/exceptionsxs.cpp.o] 오류 1
make[2]: Leaving directory `/work/dotnet/arm32/coreclr/bin/obj/Linux.arm.Debug'
make[1]: *** [src/pal/tests/palsuite/exception_handling/pal_sxs/test1/CMakeFiles/paltest_pal_sxs_test1.dir/all] 오류 2
make[1]: *** 끝나지 않은 작업을 기다리고 있습니다....
Dependee "/work/dotnet/arm32/coreclr/bin/obj/Linux.arm.Debug/src/ilasm/CMakeFiles/ilasm.dir/DependInfo.cmake" is newer than depender "/work/dotnet/arm32/coreclr/bin/obj/Linux.arm.Debug/src/ilasm/CMakeFiles/ilasm.dir/depend.internal".
Dependee "/work/dotnet/arm32/coreclr/bin/obj/Linux.arm.Debug/src/ilasm/CMakeFiles/CMakeDirectoryInformation.cmake" is newer than depender "/work/dotnet/arm32/coreclr/bin/obj/Linux.arm.Debug/src/ilasm/CMakeFiles/ilasm.dir/depend.internal".
Scanning dependencies of target ilasm
make[2]: Leaving directory `/work/dotnet/arm32/coreclr/bin/obj/Linux.arm.Debug'
make[2]: Leaving directory `/work/dotnet/arm32/coreclr/bin/obj/Linux.arm.Debug'
make -f src/jit/dll/CMakeFiles/ClrJit.dir/build.make src/jit/dll/CMakeFiles/ClrJit.dir/build
make -f src/dlls/dbgshim/CMakeFiles/dbgshim.dir/build.make src/dlls/dbgshim/CMakeFiles/dbgshim.dir/build
make[2]: Entering directory `/work/dotnet/arm32/coreclr/bin/obj/Linux.arm.Debug'
/usr/bin/cmake -E cmake_progress_report /work/dotnet/arm32/coreclr/bin/obj/Linux.arm.Debug/CMakeFiles
git blame:
invain@DB400:/work/dotnet/arm32/coreclr$ git blame -L 110,113 tests/src/Interop/StringMarshalling/LPSTR/LPSTRTestNative.cpp
282b9fce (tijoytom 2016-03-03 21:14:14 +0000 110)
282b9fce (tijoytom 2016-03-03 21:14:14 +0000 111) extern "C" DLL_EXPORT int __cdecl Writeline(char * pFormat, int i, char c, double d, short s, unsigned u)
282b9fce (tijoytom 2016-03-03 21:14:14 +0000 112) {
282b9fce (tijoytom 2016-03-03 21:14:14 +0000 113) int sum = i;
invain@DB400:/work/dotnet/arm32/coreclr$ git blame -L 121,126 tests/src/Interop/StringMarshalling/LPSTR/LPSTRTestNative.cpp
282b9fce (tijoytom 2016-03-03 21:14:14 +0000 121) sum += (int)u;
282b9fce (tijoytom 2016-03-03 21:14:14 +0000 122) return sum;
282b9fce (tijoytom 2016-03-03 21:14:14 +0000 123) }
282b9fce (tijoytom 2016-03-03 21:14:14 +0000 124)
282b9fce (tijoytom 2016-03-03 21:14:14 +0000 125)
282b9fce (tijoytom 2016-03-03 21:14:14 +0000 126) typedef LPCTSTR (__stdcall * Test_DelMarshal_InOut)(/*[in]*/ LPCSTR s);
invain@DB400:/work/dotnet/arm32/coreclr$
invain@DB400:/work/dotnet/arm32/coreclr$
invain@DB400:/work/dotnet/arm32/coreclr$
invain@DB400:/work/dotnet/arm32/coreclr$
invain@DB400:/work/dotnet/arm32/coreclr$ git blame -L 142,147 tests/src/Interop/StringMarshalling/LPSTR/LPSTRTestNative.cpp
282b9fce (tijoytom 2016-03-03 21:14:14 +0000 142)
282b9fce (tijoytom 2016-03-03 21:14:14 +0000 143) return TRUE;
282b9fce (tijoytom 2016-03-03 21:14:14 +0000 144) }
282b9fce (tijoytom 2016-03-03 21:14:14 +0000 145)
282b9fce (tijoytom 2016-03-03 21:14:14 +0000 146) typedef LPCSTR (__cdecl * Test_DelMarshalPointer_Out)(/*[out]*/ LPSTR * s);
282b9fce (tijoytom 2016-03-03 21:14:14 +0000 147) extern "C" DLL_EXPORT BOOL WINAPI RPinvoke_DelMarshalPointer_Out(Test_DelMarshalPointer_Out d)
invain@DB400:/work/dotnet/arm32/coreclr$
Even though __cdecl is accepted but typically ignored on ARM and x64 processors by the compiler, the cross build for Linux/ARM is broken (while doing the build time) by the [-Werror,-Wignored-attributes] policy of the compiler. This issue was suddenly generated since appending of 'Interop' test folder. Mr. @tijoytom, Could you explain us why we have to keep the __cdecl calling convention?.
/cc @jkotas , @benpye , @tijoytom
Build environment:
u14.04$> cd ./coreclr
u14.04$> time ROOTFS_DIR=/work/dotnet/rootfs-coreclr/arm ./build.sh arm debug verbose cross
Build Break:
git blame: