Skip to content
This repository has been archived by the owner on Jan 23, 2023. It is now read-only.

More PAL layer cleanup for GNU and add build script support for GCC #22369

Merged
merged 14 commits into from
Feb 7, 2019

Conversation

franksinankaya
Copy link

No description provided.

@franksinankaya franksinankaya force-pushed the gnuport_pal_2 branch 3 times, most recently from f5eab67 to 6447604 Compare February 2, 2019 18:05
@franksinankaya franksinankaya mentioned this pull request Feb 2, 2019
@franksinankaya franksinankaya force-pushed the gnuport_pal_2 branch 5 times, most recently from 499936b to db340bc Compare February 4, 2019 06:36
@franksinankaya
Copy link
Author

@dotnet-bot test Ubuntu arm Cross Checked crossgen_comparison Build and Test
@dotnet-bot test Ubuntu arm Cross Release crossgen_comparison Build and Test
@dotnet-bot test coreclr-ci

cross/toolchain.cmake Show resolved Hide resolved
src/pal/inc/mbusafecrt.h Show resolved Hide resolved
src/pal/inc/unixasmmacros.inc Show resolved Hide resolved
src/pal/src/CMakeLists.txt Show resolved Hide resolved
src/pal/src/libunwind/src/CMakeLists.txt Outdated Show resolved Hide resolved
src/pal/src/libunwind/src/x86_64/Gstash_frame.c Outdated Show resolved Hide resolved
src/pal/tests/palsuite/CMakeLists.txt Outdated Show resolved Hide resolved
src/pal/tests/palsuite/c_runtime/_finitef/test1/test1.c Outdated Show resolved Hide resolved
Prevent the definition from getting defined multiple times and
map it to throw() only when compiling c++ code.
@franksinankaya franksinankaya force-pushed the gnuport_pal_2 branch 3 times, most recently from 1e6dd9b to c96cfb7 Compare February 5, 2019 05:13
@franksinankaya
Copy link
Author

I'm trying to figure out the Ubuntu arm Cross build failures:

21:21:00 /mnt/j/workspace/dotnet_coreclr/master/arm_cross_checked_ubuntu_crossgen_comparison_prtest/bin/obj/Linux.arm.Checked/CMakeFiles/CMakeTmp/testCCompiler.c
21:21:00
21:21:00
21:21:00 clang: warning: argument unused during compilation: '-mthumb'
21:21:00 [-Wunused-command-line-argument]
21:21:00
21:21:00 clang: warning: argument unused during compilation: '-mfpu=vfpv3'
21:21:00 [-Wunused-command-line-argument]
21:21:00
21:21:00 Linking C executable cmTryCompileExec3393045208
21:21:00
21:21:00 /usr/bin/cmake -E cmake_link_script
21:21:00 CMakeFiles/cmTryCompileExec3393045208.dir/link.txt --verbose=1
21:21:00
21:21:00 /usr/bin/clang-5.0 -Wall -std=c11 --sysroot=/crossrootfs/arm -fuse-ld=gold
21:21:00 CMakeFiles/cmTryCompileExec3393045208.dir/testCCompiler.c.o -o
21:21:00 cmTryCompileExec3393045208 -rdynamic
21:21:00
21:21:00 /usr/bin/ld.gold: error: cannot open crt1.o: No such file or directory
21:21:00
21:21:00 /usr/bin/ld.gold: error: cannot open crti.o: No such file or directory
21:21:00
21:21:00 /usr/bin/ld.gold: error: cannot open crtn.o: No such file or directory
21:21:00
21:21:00 /usr/bin/ld.gold: error: cannot find -lc

I suspect it has something to do with change:
if (("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") OR ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC"))

Should I do selective undo to figure out? Any other recommendations?

cross/toolchain.cmake Outdated Show resolved Hide resolved
build.sh Outdated Show resolved Hide resolved
cross/toolchain.cmake Outdated Show resolved Hide resolved
src/pal/src/exception/remote-unwind.cpp Show resolved Hide resolved
src/pal/src/libunwind/src/CMakeLists.txt Outdated Show resolved Hide resolved
src/pal/src/libunwind/src/CMakeLists.txt Outdated Show resolved Hide resolved
src/pal/tests/CMakeLists.txt Outdated Show resolved Hide resolved
src/pal/tests/palsuite/CMakeLists.txt Outdated Show resolved Hide resolved
cross/toolchain.cmake Outdated Show resolved Hide resolved
cross/toolchain.cmake Outdated Show resolved Hide resolved
Suppress:
 -Wno-write-strings
 -Wno-sign-compare
 -Wno-narrowing
 -fpermissive
 -Wno-int-to-pointer-cast

to allow tests to compile
@franksinankaya franksinankaya force-pushed the gnuport_pal_2 branch 5 times, most recently from b04fcb8 to dfaf7be Compare February 6, 2019 05:09
@franksinankaya
Copy link
Author

Is there any way to force re-run all tests? I saw some failures on arm cross compiling before I pushed the debug code.

@janvorli
Copy link
Member

janvorli commented Feb 6, 2019

Any commit reruns all the tests. You can also re-run a test leg if you want, see this as an example:
#22435 (comment)

CMakeLists.txt Outdated Show resolved Hide resolved
Following clangx.y model add -gccx.y command line
arguments with gcc5 and gcc7 being the currnetly supported
options.
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
Remove CLANG specific compiler options as well.
[  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]
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 **’
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);
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'
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], #0]\n" \
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      "stp x2, x3, [%[base], dotnet#16]\n" \
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      "stp x4, x5, [%[base], dotnet#32]\n" \
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      "stp x6, x7, [%[base], dotnet#48]\n" \
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      "stp x8, x9, [%[base], dotnet#64]\n" \
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      "stp x10, x11, [%[base], dotnet#80]\n" \
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      "stp x12, x13, [%[base], dotnet#96]\n" \
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      "stp x14, x13, [%[base], dotnet#112]\n" \
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      "stp x16, x17, [%[base], #128]\n" \
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      "stp x18, x19, [%[base], dotnet#144]\n" \
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      "stp x20, x21, [%[base], dotnet#160]\n" \
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      "stp x22, x23, [%[base], #176]\n" \
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      "stp x24, x25, [%[base], #192]\n" \
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      "stp x26, x27, [%[base], #208]\n" \
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      "stp x28, x29, [%[base], dotnet#224]\n" \
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      "str x30, [%[base], #240]\n" \
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      "mov x1, sp\n" \
      ~~~~~~~~~~~~~~~~
      "stp x1, x30, [%[base], dotnet#248]\n" \
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      : [base] "+r" (unw_base) : : "x1", "memory"); \
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   }), 0)
…rning

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);
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.
@franksinankaya
Copy link
Author

@dotnet-bot test OSX10.12 x64 Checked Innerloop Build and Test

@franksinankaya
Copy link
Author

For my education, is there a way to tell the build.sh to just compile the pal layer? I have been hacking CmakeLists.txt file to exclude all other directories from the build.

@janvorli
Copy link
Member

janvorli commented Feb 7, 2019

is there a way to tell the build.sh to just compile the pal layer

No, there is no such option.

@franksinankaya
Copy link
Author

@dotnet-bot test OSX10.12 x64 Checked Innerloop Build and Test

@franksinankaya
Copy link
Author

Is there any other comment on the review meanwhile I'm fighting the CI system?

@janvorli
Copy link
Member

janvorli commented Feb 7, 2019

I believe we are good to go in after the CI gets green.

@franksinankaya
Copy link
Author

@dotnet-bot test OSX10.12 x64 Checked Innerloop Build and Test

1 similar comment
@janvorli
Copy link
Member

janvorli commented Feb 7, 2019

@dotnet-bot test OSX10.12 x64 Checked Innerloop Build and Test

@franksinankaya
Copy link
Author

nice, time to check in?

@janvorli janvorli merged commit 34d50b0 into dotnet:master Feb 7, 2019
@franksinankaya
Copy link
Author

Awesome, thanks

@franksinankaya franksinankaya deleted the gnuport_pal_2 branch February 7, 2019 22:12
picenka21 pushed a commit to picenka21/runtime that referenced this pull request Feb 18, 2022
…otnet/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 dotnet/coreclr@34d50b0
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants