Skip to content

Build break of calling convention __cdecl since appending of 'Interop' test folder #5318

Description

@leemgs

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$ 

Activity

  1. leemgs commented on Mar 11, 2016

    @leemgs
    ContributorAuthor

    I have submitted PR to fix this issue.
    dotnet/coreclr#3656

  2. sergiy-k commented on Mar 23, 2016

    @sergiy-k
    Contributor

    Closing the issue since it has been fixed in PR dotnet/coreclr#3656

  3. leemgs commented on Mar 23, 2016

    @leemgs
    ContributorAuthor

    Thanks. 👍

  4. sergiy-k commented on Mar 23, 2016

    @sergiy-k
    Contributor

    Thank you for fixing it!

  5. transferred this issue fromdotnet/coreclron Jan 30, 2020
  6. ghost locked as resolved and limited conversation to collaborators on Jan 2, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions