More PAL layer cleanup for GNU and add build script support for GCC (dotnet/coreclr...
authorSinan Kaya <41809318+franksinankaya@users.noreply.github.com>
Thu, 7 Feb 2019 21:39:13 +0000 (16:39 -0500)
committerJan Vorlicek <janvorli@microsoft.com>
Thu, 7 Feb 2019 21:39:13 +0000 (22:39 +0100)
commit7e7b2c3fa479974b9b39c75afe31c4ba605b0e7b
tree13da0c520bd4acb61cebaad4e0bd31e9d268b454
parent9499b8af9f8ee474d115adb27785316b1b09b748
More PAL layer cleanup for GNU and add build script support for GCC (dotnet/coreclr#22369)

* Declare throw only when compiling for c++

Prevent the definition from getting defined multiple times and
map it to throw() only when compiling c++ code.

* Suppress warnings for tests

Suppress:
 -Wno-write-strings
 -Wno-sign-compare
 -Wno-narrowing
 -fpermissive
 -Wno-int-to-pointer-cast

to allow tests to compile

* Add gcc option to build.sh script

Following clangx.y model add -gccx.y command line
arguments with gcc5 and gcc7 being the currnetly supported
options.

* Allow environment variable to be used for TOOLCHAIN

Remove CLANG specific compiler options as well.

* Hide non-GNU compiler options

* Do not include local directory if cross compiling

[  0%] Building CXX object src/pal/src/eventprovider/tracepointprovider/CMakeFiles/coreclrtraceptprovider.dir/__/lttng/traceptprovdotnetruntime.cpp.o
cc1plus: error: include location "/usr/local/include" is unsafe for cross-compilation [-Werror=poison-system-directories]

* Suppress unknown pragma warnings

src/pal/src/exception/seh-unwind.cpp:37:0:
warning: ignoring #pragma clang diagnostic [-Wunknown-pragmas]
    #pragma clang diagnostic pop

Removing these cause compilation error on clang7 and arm as follows:

In file included from /bin/obj/Linux.arm.Debug/src/pal/src/libunwind/include/libunwind.h:9:
/src/pal/src/libunwind/include/libunwind-arm.h:247:9: error: empty struct has size 0 in C, size 1 in C++ [-Werror,-Wextern-c-compat]
typedef struct unw_tdep_save_loc
        ^
/src/pal/src/libunwind/include/libunwind-arm.h:288:9: error: empty struct has size 0 in C, size 1 in C++ [-Werror,-Wextern-c-compat]
typedef struct

* plt not useful for GNU and ARM64/ARM

src/pal/src/arch/arm64/callsignalhandlerwrapper.S: Assembler messages:
src/pal/src/arch/arm64/callsignalhandlerwrapper.S:31: Error: unexpected characters following instruction at operand 1 -- `bl signal_handler_worker@plt'
src/pal/src/arch/arm64/callsignalhandlerwrapper.S:32: Error: unexpected characters following instruction at operand 1 -- `bl signal_handler_worker@plt'

* Remove double const from argv in PAL_Initialize

Seeing compilation error with GNU for C source files as follows:

if (PAL_Initialize(argc, argv) != 0)
                          ^
src/pal/tests/palsuite/common/palsuite.h:21:0,
from src/pal/tests/palsuite/c_runtime/asinhf/test1/test1.c:18:
src/pal/inc/pal.h:374:1: note: expected ‘const char * const*’ but argument is of type ‘char **’

* Suppress format warnings using GNU for libunwind

warning: format ‘%li’ expects argument of type ‘long int’, but argument 3 has type ‘int’ [-Wformat=]
     Debug (4, " aligned frame, offset %li\n", f->cfa_reg_offset);

* Fix -fpermissive warnings for GNU

* Suppress unused variable warning in libunwind

src/pal/src/libunwind/include/libunwind-aarch64.h:201:5: warning: right-hand operand of comma expression has no effect [-Wunused-value]
 #define unw_tdep_getcontext(uc) (({     \
                                 ~~~~~~~~~
   unw_tdep_context_t *unw_ctx = (uc);     \
   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   register uint64_t *unw_base asm ("x0") = (uint64_t*) unw_ctx->uc_mcontext.regs;  \
   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   __asm__ __volatile__ (      \
   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      "stp x0, x1, [%[base], dotnet/coreclr#0]\n" \
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      "stp x2, x3, [%[base], dotnet/coreclr#16]\n" \
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      "stp x4, x5, [%[base], dotnet/coreclr#32]\n" \
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      "stp x6, x7, [%[base], dotnet/coreclr#48]\n" \
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      "stp x8, x9, [%[base], dotnet/coreclr#64]\n" \
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      "stp x10, x11, [%[base], dotnet/coreclr#80]\n" \
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      "stp x12, x13, [%[base], dotnet/coreclr#96]\n" \
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      "stp x14, x13, [%[base], dotnet/coreclr#112]\n" \
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      "stp x16, x17, [%[base], dotnet/coreclr#128]\n" \
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      "stp x18, x19, [%[base], dotnet/coreclr#144]\n" \
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      "stp x20, x21, [%[base], dotnet/coreclr#160]\n" \
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      "stp x22, x23, [%[base], dotnet/coreclr#176]\n" \
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      "stp x24, x25, [%[base], dotnet/coreclr#192]\n" \
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      "stp x26, x27, [%[base], dotnet/coreclr#208]\n" \
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      "stp x28, x29, [%[base], dotnet/coreclr#224]\n" \
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      "str x30, [%[base], dotnet/coreclr#240]\n" \
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      "mov x1, sp\n" \
      ~~~~~~~~~~~~~~~~
      "stp x1, x30, [%[base], dotnet/coreclr#248]\n" \
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      : [base] "+r" (unw_base) : : "x1", "memory"); \
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   }), 0)

* Fix warning: ‘memset’ used with length equal to number of elements warning

Fix similar warnings to these by including the element size into total size
calculation.

src/pal/tests/palsuite/miscellaneous/SetEnvironmentVariableW/test1/test.cpp: In function ‘int main(int, char**)’:
src/pal/tests/palsuite/miscellaneous/SetEnvironmentVariableW/test1/test.cpp:89:31: warning: ‘memset’ used with length equal to number of elements without multiplication by element size [-Wmemset-elt-size]
     memset(NewValue,0,BUF_SIZE);

* Define CLR specific compiler option CLR_CMAKE_COMPILER

By the time toolchain.cmake is called, the compiler detection from
cmake is not active. We need an intermediate definition to pass
to compiler detection.

Commit migrated from https://github.com/dotnet/coreclr/commit/34d50b056150ba9101ee977dded9cee3c663fab6
33 files changed:
src/coreclr/build.sh
src/coreclr/configurecompiler.cmake
src/coreclr/cross/toolchain.cmake
src/coreclr/src/pal/inc/mbusafecrt.h
src/coreclr/src/pal/inc/pal.h
src/coreclr/src/pal/inc/unixasmmacros.inc
src/coreclr/src/pal/src/CMakeLists.txt
src/coreclr/src/pal/src/examples/example1.cpp
src/coreclr/src/pal/src/exception/remote-unwind.cpp
src/coreclr/src/pal/src/exception/seh-unwind.cpp
src/coreclr/src/pal/src/init/pal.cpp
src/coreclr/src/pal/src/libunwind/src/CMakeLists.txt
src/coreclr/src/pal/tests/CMakeLists.txt
src/coreclr/src/pal/tests/palsuite/CMakeLists.txt
src/coreclr/src/pal/tests/palsuite/c_runtime/_wfopen/test1/test1.cpp
src/coreclr/src/pal/tests/palsuite/file_io/GetFullPathNameW/test3/test3.cpp
src/coreclr/src/pal/tests/palsuite/file_io/GetFullPathNameW/test4/test4.cpp
src/coreclr/src/pal/tests/palsuite/miscellaneous/FormatMessageW/test2/test.cpp
src/coreclr/src/pal/tests/palsuite/miscellaneous/SetEnvironmentVariableW/test1/test.cpp
src/coreclr/src/pal/tests/palsuite/threading/CreateThread/test2/test2.cpp
src/coreclr/src/pal/tests/palsuite/threading/ExitThread/test1/test1.cpp
src/coreclr/src/pal/tests/palsuite/threading/ResumeThread/test1/test1.cpp
src/coreclr/src/pal/tests/palsuite/threading/SleepEx/test2/test2.cpp
src/coreclr/src/pal/tests/palsuite/threading/SwitchToThread/test1/test1.cpp
src/coreclr/src/pal/tests/palsuite/threading/WaitForMultipleObjectsEx/test2/test2.cpp
src/coreclr/src/pal/tests/palsuite/threading/WaitForMultipleObjectsEx/test5/test5.cpp
src/coreclr/src/pal/tests/palsuite/threading/WaitForMultipleObjectsEx/test6/test6.cpp
src/coreclr/src/pal/tests/palsuite/threading/WaitForSingleObject/WFSOExMutexTest/WFSOExMutexTest.cpp
src/coreclr/src/pal/tests/palsuite/threading/WaitForSingleObject/WFSOExSemaphoreTest/WFSOExSemaphoreTest.cpp
src/coreclr/src/pal/tests/palsuite/threading/WaitForSingleObject/WFSOExThreadTest/WFSOExThreadTest.cpp
src/coreclr/src/pal/tools/gcc-compiler-override.txt [new file with mode: 0644]
src/coreclr/src/pal/tools/gen-buildsys-clang.sh
src/coreclr/src/pal/tools/gen-buildsys-gcc.sh [new file with mode: 0755]