From: Ben Langmuir Date: Wed, 20 Oct 2021 17:37:32 +0000 (-0700) Subject: Reapply [ORC-RT] Configure the ORC runtime for more architectures and platforms X-Git-Tag: upstream/15.0.7~28024 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=b8da594750762f811283820c19b02cedfb6632d4;p=platform%2Fupstream%2Fllvm.git Reapply [ORC-RT] Configure the ORC runtime for more architectures and platforms Reapply 5692ed0cce8c95, but with the ORC runtime disabled explicitly on CrossWinToARMLinux to match the other compiler-rt runtime libraries. Differential Revision: https://reviews.llvm.org/D112229 --- Enable building the ORC runtime for 64-bit and 32-bit ARM architectures, and for all Darwin embedded platforms (iOS, tvOS, and watchOS). This covers building the cross-platform code, but does not add TLV runtime support for the new architectures, which can be added independently. Incidentally, stop building the Mach-O TLS support file unnecessarily on other platforms. Differential Revision: https://reviews.llvm.org/D112111 --- diff --git a/clang/cmake/caches/CrossWinToARMLinux.cmake b/clang/cmake/caches/CrossWinToARMLinux.cmake index 778494e..63b49bc 100644 --- a/clang/cmake/caches/CrossWinToARMLinux.cmake +++ b/clang/cmake/caches/CrossWinToARMLinux.cmake @@ -101,6 +101,7 @@ set(COMPILER_RT_BUILD_XRAY OFF CACHE BOOL "") set(COMPILER_RT_BUILD_LIBFUZZER OFF CACHE BOOL "") set(COMPILER_RT_BUILD_PROFILE OFF CACHE BOOL "") set(COMPILER_RT_BUILD_CRT OFF CACHE BOOL "") +set(COMPILER_RT_BUILD_ORC OFF CACHE BOOL "") set(COMPILER_RT_DEFAULT_TARGET_ONLY ON CACHE BOOL "") set(COMPILER_RT_INCLUDE_TESTS ON CACHE BOOL "") diff --git a/compiler-rt/cmake/Modules/AllSupportedArchDefs.cmake b/compiler-rt/cmake/Modules/AllSupportedArchDefs.cmake index 882e12a..86fa3bb 100644 --- a/compiler-rt/cmake/Modules/AllSupportedArchDefs.cmake +++ b/compiler-rt/cmake/Modules/AllSupportedArchDefs.cmake @@ -78,5 +78,5 @@ endif() set(ALL_SHADOWCALLSTACK_SUPPORTED_ARCH ${ARM64}) if (UNIX) -set(ALL_ORC_SUPPORTED_ARCH ${X86_64}) +set(ALL_ORC_SUPPORTED_ARCH ${X86_64} ${ARM64} ${ARM32}) endif() diff --git a/compiler-rt/cmake/config-ix.cmake b/compiler-rt/cmake/config-ix.cmake index e2985dc..7624605 100644 --- a/compiler-rt/cmake/config-ix.cmake +++ b/compiler-rt/cmake/config-ix.cmake @@ -480,6 +480,7 @@ if(APPLE) list(APPEND PROFILE_SUPPORTED_OS ${platform}sim) list(APPEND TSAN_SUPPORTED_OS ${platform}sim) list(APPEND FUZZER_SUPPORTED_OS ${platform}sim) + list(APPEND ORC_SUPPORTED_OS ${platform}sim) endif() foreach(arch ${DARWIN_${platform}sim_ARCHS}) list(APPEND COMPILER_RT_SUPPORTED_ARCH ${arch}) @@ -510,6 +511,7 @@ if(APPLE) list(APPEND TSAN_SUPPORTED_OS ${platform}) endif() list(APPEND FUZZER_SUPPORTED_OS ${platform}) + list(APPEND ORC_SUPPORTED_OS ${platform}) endif() foreach(arch ${DARWIN_${platform}_ARCHS}) list(APPEND COMPILER_RT_SUPPORTED_ARCH ${arch}) diff --git a/compiler-rt/lib/orc/CMakeLists.txt b/compiler-rt/lib/orc/CMakeLists.txt index 7259f95..cc57707 100644 --- a/compiler-rt/lib/orc/CMakeLists.txt +++ b/compiler-rt/lib/orc/CMakeLists.txt @@ -10,8 +10,7 @@ set(ORC_SOURCES ) # Implementation files for all ORC architectures. -set(x86_64_SOURCES -# x86-64 specific assembly files will go here. +set(ALL_ORC_ASM_SOURCES macho_tlv.x86-64.S elfnix_tls.x86-64.S ) @@ -36,7 +35,7 @@ set(ORC_IMPL_HEADERS # consumption by tests. set(ORC_ALL_SOURCE_FILES ${ORC_SOURCES} - ${x86_64_SOURCES} + ${ALL_ORC_ASM_SOURCES} ${ORC_IMPL_HEADERS} ) @@ -61,17 +60,16 @@ if (TARGET cxx-headers OR HAVE_LIBCXX) endif() if (APPLE) - add_asm_sources(ORC_ASM_SOURCES macho_tlv.x86-64.S) + add_asm_sources(ORC_ASM_SOURCES macho_tlv.x86-64.S) add_compiler_rt_object_libraries(RTOrc OS ${ORC_SUPPORTED_OS} ARCHS ${ORC_SUPPORTED_ARCH} - SOURCES ${ORC_SOURCES} ${x86_64_SOURCES} + SOURCES ${ORC_SOURCES} ${ORC_ASM_SOURCES} ADDITIONAL_HEADERS ${ORC_IMPL_HEADERS} CFLAGS ${ORC_CFLAGS} DEPS ${ORC_DEPS}) - # We only support running on osx for now. add_compiler_rt_runtime(clang_rt.orc STATIC OS ${ORC_SUPPORTED_OS} @@ -82,13 +80,16 @@ if (APPLE) LINK_LIBS ${ORC_LINK_LIBS} PARENT_TARGET orc) else() # not Apple + add_asm_sources(ORC_ASM_SOURCES elfnix_tls.x86-64.S) + foreach(arch ${ORC_SUPPORTED_ARCH}) if(NOT CAN_TARGET_${arch}) continue() endif() + add_compiler_rt_object_libraries(RTOrc ARCHS ${arch} - SOURCES ${ORC_SOURCES} ${${arch}_SOURCES} + SOURCES ${ORC_SOURCES} ${ORC_ASM_SOURCES} ADDITIONAL_HEADERS ${ORC_IMPL_HEADERS} CFLAGS ${ORC_CFLAGS} DEPS ${ORC_DEPS}) diff --git a/compiler-rt/lib/orc/elfnix_tls.x86-64.S b/compiler-rt/lib/orc/elfnix_tls.x86-64.S index 0b0d7b3..b3e0bef 100644 --- a/compiler-rt/lib/orc/elfnix_tls.x86-64.S +++ b/compiler-rt/lib/orc/elfnix_tls.x86-64.S @@ -11,6 +11,9 @@ // //===----------------------------------------------------------------------===// +// The content of this file is x86_64-only +#if defined(__x86_64__) + #define REGISTER_SAVE_SPACE_SIZE 512 .text @@ -57,3 +60,5 @@ ___orc_rt_elfnix_tls_get_addr: addq $REGISTER_SAVE_SPACE_SIZE, %rsp popq %rbp ret + +#endif // defined(__x86_64__) diff --git a/compiler-rt/lib/orc/macho_tlv.x86-64.S b/compiler-rt/lib/orc/macho_tlv.x86-64.S index 0affe40..e3daf23 100644 --- a/compiler-rt/lib/orc/macho_tlv.x86-64.S +++ b/compiler-rt/lib/orc/macho_tlv.x86-64.S @@ -10,6 +10,9 @@ // //===----------------------------------------------------------------------===// +// The content of this file is x86_64-only +#if defined(__x86_64__) + #define REGISTER_SAVE_SPACE_SIZE 512 .text @@ -66,3 +69,5 @@ ___orc_rt_macho_tlv_get_addr: addq $REGISTER_SAVE_SPACE_SIZE, %rsp popq %rbp ret + +#endif // defined(__x86_64__) diff --git a/compiler-rt/lib/orc/simple_packed_serialization.h b/compiler-rt/lib/orc/simple_packed_serialization.h index b00707e..3a6d245 100644 --- a/compiler-rt/lib/orc/simple_packed_serialization.h +++ b/compiler-rt/lib/orc/simple_packed_serialization.h @@ -396,10 +396,12 @@ public: uint64_t Size; if (!SPSArgList::deserialize(IB, Size)) return false; + if (Size > std::numeric_limits::max()) + return false; Data = IB.data(); if (!IB.skip(Size)) return false; - S = {Data, Size}; + S = {Data, static_cast(Size)}; return true; } };