diff options
Diffstat (limited to 'nixpkgs/pkgs/development/compilers/llvm/8/compiler-rt/crtbegin-and-end.patch')
-rw-r--r-- | nixpkgs/pkgs/development/compilers/llvm/8/compiler-rt/crtbegin-and-end.patch | 595 |
1 files changed, 0 insertions, 595 deletions
diff --git a/nixpkgs/pkgs/development/compilers/llvm/8/compiler-rt/crtbegin-and-end.patch b/nixpkgs/pkgs/development/compilers/llvm/8/compiler-rt/crtbegin-and-end.patch deleted file mode 100644 index e63be181f95c..000000000000 --- a/nixpkgs/pkgs/development/compilers/llvm/8/compiler-rt/crtbegin-and-end.patch +++ /dev/null @@ -1,595 +0,0 @@ -Get crtbegin and crtend without compiler GCC! PR is at https://reviews.llvm.org/D28791 - -Index: compiler-rt/CMakeLists.txt -=================================================================== ---- compiler-rt/CMakeLists.txt -+++ compiler-rt/CMakeLists.txt -@@ -29,6 +29,8 @@ - - option(COMPILER_RT_BUILD_BUILTINS "Build builtins" ON) - mark_as_advanced(COMPILER_RT_BUILD_BUILTINS) -+option(COMPILER_RT_BUILD_CRT "Build crtbegin.o/crtend.o" ON) -+mark_as_advanced(COMPILER_RT_BUILD_CRT) - option(COMPILER_RT_BUILD_SANITIZERS "Build sanitizers" ON) - mark_as_advanced(COMPILER_RT_BUILD_SANITIZERS) - option(COMPILER_RT_BUILD_XRAY "Build xray" ON) -Index: compiler-rt/cmake/Modules/AddCompilerRT.cmake -=================================================================== ---- compiler-rt/cmake/Modules/AddCompilerRT.cmake -+++ compiler-rt/cmake/Modules/AddCompilerRT.cmake -@@ -132,7 +132,7 @@ - # Adds static or shared runtime for a list of architectures and operating - # systems and puts it in the proper directory in the build and install trees. - # add_compiler_rt_runtime(<name> --# {STATIC|SHARED} -+# {OBJECT|STATIC|SHARED} - # ARCHS <architectures> - # OS <os list> - # SOURCES <source files> -@@ -144,8 +144,8 @@ - # PARENT_TARGET <convenience parent target> - # ADDITIONAL_HEADERS <header files>) - function(add_compiler_rt_runtime name type) -- if(NOT type MATCHES "^(STATIC|SHARED)$") -- message(FATAL_ERROR "type argument must be STATIC or SHARED") -+ if(NOT type MATCHES "^(OBJECT|STATIC|SHARED)$") -+ message(FATAL_ERROR "type argument must be OBJECT, STATIC or SHARED") - return() - endif() - cmake_parse_arguments(LIB -@@ -204,7 +204,10 @@ - message(FATAL_ERROR "Architecture ${arch} can't be targeted") - return() - endif() -- if(type STREQUAL "STATIC") -+ if(type STREQUAL "OBJECT") -+ set(libname "${name}-${arch}") -+ set(output_name_${libname} ${libname}${COMPILER_RT_OS_SUFFIX}) -+ elseif(type STREQUAL "STATIC") - set(libname "${name}-${arch}") - set_output_name(output_name_${libname} ${name} ${arch}) - else() -@@ -270,12 +273,34 @@ - set(COMPONENT_OPTION COMPONENT ${libname}) - endif() - -- add_library(${libname} ${type} ${sources_${libname}}) -- set_target_compile_flags(${libname} ${extra_cflags_${libname}}) -- set_target_link_flags(${libname} ${extra_link_flags_${libname}}) -- set_property(TARGET ${libname} APPEND PROPERTY -- COMPILE_DEFINITIONS ${LIB_DEFS}) -- set_target_output_directories(${libname} ${output_dir_${libname}}) -+ if(type STREQUAL "OBJECT") -+ string(TOUPPER ${CMAKE_BUILD_TYPE} config) -+ get_property(cflags SOURCE ${sources_${libname}} PROPERTY COMPILE_FLAGS) -+ separate_arguments(cflags) -+ add_custom_command( -+ OUTPUT ${output_dir_${libname}}/${libname}.o -+ COMMAND ${CMAKE_C_COMPILER} ${sources_${libname}} ${cflags} ${extra_cflags_${libname}} -c -o ${output_dir_${libname}}/${libname}.o -+ DEPENDS ${sources_${libname}} -+ COMMENT "Building C object ${libname}.o") -+ add_custom_target(${libname} DEPENDS ${output_dir_${libname}}/${libname}.o) -+ install(FILES ${output_dir_${libname}}/${libname}.o -+ DESTINATION ${install_dir_${libname}} -+ ${COMPONENT_OPTION}) -+ else() -+ add_library(${libname} ${type} ${sources_${libname}}) -+ set_target_compile_flags(${libname} ${extra_cflags_${libname}}) -+ set_target_link_flags(${libname} ${extra_link_flags_${libname}}) -+ set_property(TARGET ${libname} APPEND PROPERTY -+ COMPILE_DEFINITIONS ${LIB_DEFS}) -+ set_target_output_directories(${libname} ${output_dir_${libname}}) -+ install(TARGETS ${libname} -+ ARCHIVE DESTINATION ${install_dir_${libname}} -+ ${COMPONENT_OPTION} -+ LIBRARY DESTINATION ${install_dir_${libname}} -+ ${COMPONENT_OPTION} -+ RUNTIME DESTINATION ${install_dir_${libname}} -+ ${COMPONENT_OPTION}) -+ endif() - set_target_properties(${libname} PROPERTIES - OUTPUT_NAME ${output_name_${libname}}) - set_target_properties(${libname} PROPERTIES FOLDER "Compiler-RT Runtime") -@@ -299,13 +324,6 @@ - ) - endif() - endif() -- install(TARGETS ${libname} -- ARCHIVE DESTINATION ${install_dir_${libname}} -- ${COMPONENT_OPTION} -- LIBRARY DESTINATION ${install_dir_${libname}} -- ${COMPONENT_OPTION} -- RUNTIME DESTINATION ${install_dir_${libname}} -- ${COMPONENT_OPTION}) - - # We only want to generate per-library install targets if you aren't using - # an IDE because the extra targets get cluttered in IDEs. -Index: compiler-rt/cmake/config-ix.cmake -=================================================================== ---- compiler-rt/cmake/config-ix.cmake -+++ compiler-rt/cmake/config-ix.cmake -@@ -227,6 +227,7 @@ - ${ARM32} ${ARM64} ${MIPS32} ${MIPS64} ${S390X}) - set(ALL_ASAN_SUPPORTED_ARCH ${X86} ${X86_64} ${ARM32} ${ARM64} - ${MIPS32} ${MIPS64} ${PPC64} ${S390X}) -+set(ALL_CRT_SUPPORTED_ARCH ${X86} ${X86_64} ${ARM32} ${ARM64}) - set(ALL_DFSAN_SUPPORTED_ARCH ${X86_64} ${MIPS64} ${ARM64}) - set(ALL_FUZZER_SUPPORTED_ARCH ${X86_64} ${ARM64}) - -@@ -474,6 +475,7 @@ - SANITIZER_COMMON_SUPPORTED_ARCH) - - else() -+ filter_available_targets(CRT_SUPPORTED_ARCH ${ALL_CRT_SUPPORTED_ARCH}) - # Architectures supported by compiler-rt libraries. - filter_available_targets(SANITIZER_COMMON_SUPPORTED_ARCH - ${ALL_SANITIZER_COMMON_SUPPORTED_ARCH}) -@@ -563,6 +565,12 @@ - - # TODO: Add builtins support. - -+if (CRT_SUPPORTED_ARCH AND OS_NAME MATCHES "Linux") -+ set(COMPILER_RT_HAS_CRT TRUE) -+else() -+ set(COMPILER_RT_HAS_CRT FALSE) -+endif() -+ - if (COMPILER_RT_HAS_SANITIZER_COMMON AND DFSAN_SUPPORTED_ARCH AND - OS_NAME MATCHES "Linux") - set(COMPILER_RT_HAS_DFSAN TRUE) -Index: compiler-rt/lib/CMakeLists.txt -=================================================================== ---- compiler-rt/lib/CMakeLists.txt -+++ compiler-rt/lib/CMakeLists.txt -@@ -17,6 +17,10 @@ - add_subdirectory(builtins) - endif() - -+if(COMPILER_RT_BUILD_CRT) -+ add_subdirectory(crt) -+endif() -+ - function(compiler_rt_build_runtime runtime) - string(TOUPPER ${runtime} runtime_uppercase) - if(COMPILER_RT_HAS_${runtime_uppercase}) -Index: compiler-rt/lib/crt/CMakeLists.txt -=================================================================== ---- /dev/null -+++ compiler-rt/lib/crt/CMakeLists.txt -@@ -0,0 +1,102 @@ -+add_compiler_rt_component(crt) -+ -+function(check_cxx_section_exists section output) -+ cmake_parse_arguments(ARG "" "" "SOURCE;FLAGS" ${ARGN}) -+ if(NOT ARG_SOURCE) -+ set(ARG_SOURCE "int main() { return 0; }\n") -+ endif() -+ -+ string(RANDOM TARGET_NAME) -+ set(TARGET_NAME "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/cmTC_${TARGET_NAME}.dir") -+ file(MAKE_DIRECTORY ${TARGET_NAME}) -+ -+ file(WRITE "${TARGET_NAME}/CheckSectionExists.c" "${ARG_SOURCE}\n") -+ -+ string(REGEX MATCHALL "<[A-Za-z0-9_]*>" substitutions -+ ${CMAKE_C_COMPILE_OBJECT}) -+ -+ set(try_compile_flags "${ARG_FLAGS}") -+ if(CMAKE_C_COMPILER_ID MATCHES Clang AND CMAKE_C_COMPILER_TARGET) -+ list(APPEND try_compile_flags "-target ${CMAKE_C_COMPILER_TARGET}") -+ endif() -+ -+ string(REPLACE ";" " " extra_flags "${try_compile_flags}") -+ -+ set(test_compile_command "${CMAKE_C_COMPILE_OBJECT}") -+ foreach(substitution ${substitutions}) -+ if(substitution STREQUAL "<CMAKE_C_COMPILER>") -+ string(REPLACE "<CMAKE_C_COMPILER>" -+ "${CMAKE_C_COMPILER}" test_compile_command ${test_compile_command}) -+ elseif(substitution STREQUAL "<OBJECT>") -+ string(REPLACE "<OBJECT>" "${TARGET_NAME}/CheckSectionExists.o" -+ test_compile_command ${test_compile_command}) -+ elseif(substitution STREQUAL "<SOURCE>") -+ string(REPLACE "<SOURCE>" "${TARGET_NAME}/CheckSectionExists.c" -+ test_compile_command ${test_compile_command}) -+ elseif(substitution STREQUAL "<FLAGS>") -+ string(REPLACE "<FLAGS>" "${CMAKE_C_FLAGS} ${extra_flags}" -+ test_compile_command ${test_compile_command}) -+ else() -+ string(REPLACE "${substitution}" "" test_compile_command -+ ${test_compile_command}) -+ endif() -+ endforeach() -+ -+ string(REPLACE " " ";" test_compile_command "${test_compile_command}") -+ -+ execute_process( -+ COMMAND ${test_compile_command} -+ RESULT_VARIABLE TEST_RESULT -+ OUTPUT_VARIABLE TEST_OUTPUT -+ ERROR_VARIABLE TEST_ERROR -+ ) -+ -+ execute_process( -+ COMMAND ${CMAKE_OBJDUMP} -h "${TARGET_NAME}/CheckSectionExists.o" -+ RESULT_VARIABLE CHECK_RESULT -+ OUTPUT_VARIABLE CHECK_OUTPUT -+ ERROR_VARIABLE CHECK_ERROR -+ ) -+ string(FIND "${CHECK_OUTPUT}" "${section}" SECTION_FOUND) -+ -+ if(NOT SECTION_FOUND EQUAL -1) -+ set(${output} TRUE PARENT_SCOPE) -+ else() -+ set(${output} FALSE PARENT_SCOPE) -+ endif() -+ -+ file(REMOVE_RECURSE ${TARGET_NAME}) -+endfunction() -+ -+check_cxx_section_exists(".init_array" COMPILER_RT_HAS_INITFINI_ARRAY -+ SOURCE "__attribute__((constructor)) void f() {}\nint main() { return 0; }\n") -+ -+append_list_if(COMPILER_RT_HAS_INITFINI_ARRAY -DCRT_HAS_INITFINI_ARRAY CRT_CFLAGS) -+append_list_if(COMPILER_RT_HAS_FPIC_FLAG -fPIC CRT_CFLAGS) -+ -+foreach(arch ${CRT_SUPPORTED_ARCH}) -+ add_compiler_rt_runtime(clang_rt.crtbegin -+ OBJECT -+ ARCHS ${arch} -+ SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/crtbegin.c -+ CFLAGS ${CRT_CFLAGS} -+ PARENT_TARGET crt) -+ add_compiler_rt_runtime(clang_rt.crtbegin_shared -+ OBJECT -+ ARCHS ${arch} -+ SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/crtbegin.c -+ CFLAGS ${CRT_CFLAGS} -DCRT_SHARED -+ PARENT_TARGET crt) -+ add_compiler_rt_runtime(clang_rt.crtend -+ OBJECT -+ ARCHS ${arch} -+ SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/crtend.c -+ CFLAGS ${CRT_CFLAGS} -+ PARENT_TARGET crt) -+ add_compiler_rt_runtime(clang_rt.crtend_shared -+ OBJECT -+ ARCHS ${arch} -+ SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/crtend.c -+ CFLAGS ${CRT_CFLAGS} -DCRT_SHARED -+ PARENT_TARGET crt) -+endforeach() -Index: compiler-rt/lib/crt/crtbegin.c -=================================================================== ---- /dev/null -+++ compiler-rt/lib/crt/crtbegin.c -@@ -0,0 +1,108 @@ -+/* ===-- crtbegin.c - Start of constructors and destructors ----------------=== -+ * -+ * The LLVM Compiler Infrastructure -+ * -+ * This file is dual licensed under the MIT and the University of Illinois Open -+ * Source Licenses. See LICENSE.TXT for details. -+ * -+ * ===----------------------------------------------------------------------=== -+ */ -+ -+#include <stddef.h> -+ -+__attribute__((visibility("hidden"))) -+#ifdef CRT_SHARED -+void *__dso_handle = &__dso_handle; -+#else -+void *__dso_handle = (void *)0; -+#endif -+ -+static long __EH_FRAME_LIST__[] -+ __attribute__((section(".eh_frame"), aligned(sizeof(void *)))) = {}; -+ -+extern void __register_frame_info(const void *, void *) __attribute__((weak)); -+extern void *__deregister_frame_info(const void *) __attribute__((weak)); -+ -+#ifndef CRT_HAS_INITFINI_ARRAY -+typedef void (*fp)(void); -+ -+static fp __CTOR_LIST__[] -+ __attribute__((section(".ctors"), aligned(sizeof(fp)), used)) = {(fp)-1}; -+extern fp __CTOR_LIST_END__[]; -+#endif -+ -+#ifdef CRT_SHARED -+extern void __cxa_finalize(void *) __attribute__((weak)); -+#endif -+ -+static void __attribute__((used)) __do_init() { -+ static _Bool __initialized; -+ if (__builtin_expect(__initialized, 0)) -+ return; -+ __initialized = 1; -+ -+ static struct { void *p[8]; } __object; -+ if (__register_frame_info) -+ __register_frame_info(__EH_FRAME_LIST__, &__object); -+ -+#ifndef CRT_HAS_INITFINI_ARRAY -+ const size_t n = __CTOR_LIST_END__ - __CTOR_LIST__ - 1; -+ for (size_t i = n; i >= 1; i--) __CTOR_LIST__[i](); -+#endif -+} -+ -+#ifdef CRT_HAS_INITFINI_ARRAY -+__attribute__((section(".init_array"), -+ used)) static void (*__init)(void) = __do_init; -+#else // CRT_HAS_INITFINI_ARRAY -+#if defined(__i386__) || defined(__x86_64__) -+asm(".pushsection .init,\"ax\",@progbits\n\t" -+ "call " __USER_LABEL_PREFIX__ "__do_init\n\t" -+ ".popsection"); -+#elif defined(__arm__) -+asm(".pushsection .init,\"ax\",%progbits\n\t" -+ "bl " __USER_LABEL_PREFIX__ "__do_init\n\t" -+ ".popsection"); -+#endif // CRT_HAS_INITFINI_ARRAY -+#endif -+ -+#ifndef CRT_HAS_INITFINI_ARRAY -+static fp __DTOR_LIST__[] -+ __attribute__((section(".dtors"), aligned(sizeof(fp)), used)) = {(fp)-1}; -+extern fp __DTOR_LIST_END__[]; -+#endif -+ -+static void __attribute__((used)) __do_fini() { -+ static _Bool __finalized; -+ if (__builtin_expect(__finalized, 0)) -+ return; -+ __finalized = 1; -+ -+#ifdef CRT_SHARED -+ if (__cxa_finalize) -+ __cxa_finalize(__dso_handle); -+#endif -+ -+#ifndef CRT_HAS_INITFINI_ARRAY -+ if (__deregister_frame_info) -+ __deregister_frame_info(__EH_FRAME_LIST__); -+ -+ const size_t n = __DTOR_LIST_END__ - __DTOR_LIST__ - 1; -+ for (size_t i = 1; i < n; i++) __DTOR_LIST__[i](); -+#endif -+} -+ -+#ifdef CRT_HAS_INITFINI_ARRAY -+__attribute__((section(".fini_array"), -+ used)) static void (*__fini)(void) = __do_fini; -+#else // CRT_HAS_INITFINI_ARRAY -+#if defined(__i386__) || defined(__x86_64__) -+asm(".pushsection .fini,\"ax\",@progbits\n\t" -+ "call " __USER_LABEL_PREFIX__ "__do_fini\n\t" -+ ".popsection"); -+#elif defined(__arm__) -+asm(".pushsection .fini,\"ax\",%progbits\n\t" -+ "bl " __USER_LABEL_PREFIX__ "__do_fini\n\t" -+ ".popsection"); -+#endif -+#endif // CRT_HAS_INIT_FINI_ARRAY -Index: compiler-rt/lib/crt/crtend.c -=================================================================== ---- /dev/null -+++ compiler-rt/lib/crt/crtend.c -@@ -0,0 +1,24 @@ -+/* ===-- crtend.c - End of constructors and destructors --------------------=== -+ * -+ * The LLVM Compiler Infrastructure -+ * -+ * This file is dual licensed under the MIT and the University of Illinois Open -+ * Source Licenses. See LICENSE.TXT for details. -+ * -+ * ===----------------------------------------------------------------------=== -+ */ -+ -+#include <stdint.h> -+ -+// Put 4-byte zero which is the length field in FDE at the end as a terminator. -+const int32_t __EH_FRAME_LIST_END__[] -+ __attribute__((section(".eh_frame"), aligned(sizeof(int32_t)), -+ visibility("hidden"), used)) = {0}; -+ -+#ifndef CRT_HAS_INITFINI_ARRAY -+typedef void (*fp)(void); -+fp __CTOR_LIST_END__[] -+ __attribute__((section(".ctors"), visibility("hidden"), used)) = {0}; -+fp __DTOR_LIST_END__[] -+ __attribute__((section(".dtors"), visibility("hidden"), used)) = {0}; -+#endif -Index: compiler-rt/test/CMakeLists.txt -=================================================================== ---- compiler-rt/test/CMakeLists.txt -+++ compiler-rt/test/CMakeLists.txt -@@ -73,6 +73,9 @@ - if(COMPILER_RT_BUILD_XRAY) - compiler_rt_test_runtime(xray) - endif() -+ if(COMPILER_RT_HAS_CRT) -+ add_subdirectory(crt) -+ endif() - # ShadowCallStack does not yet provide a runtime with compiler-rt, the tests - # include their own minimal runtime - add_subdirectory(shadowcallstack) -Index: compiler-rt/test/crt/CMakeLists.txt -=================================================================== ---- /dev/null -+++ compiler-rt/test/crt/CMakeLists.txt -@@ -0,0 +1,31 @@ -+set(CRT_LIT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) -+ -+set(CRT_TESTSUITES) -+ -+set(CRT_TEST_DEPS "") -+ -+if(NOT COMPILER_RT_STANDALONE_BUILD AND COMPILER_RT_BUILD_CRT AND -+ COMPILER_RT_HAS_CRT) -+ list(APPEND CRT_TEST_DEPS crt) -+endif() -+ -+set(CRT_TEST_ARCH ${CRT_SUPPORTED_ARCH}) -+if (COMPILER_RT_BUILD_CRT AND COMPILER_RT_HAS_CRT) -+ foreach(arch ${CRT_TEST_ARCH}) -+ set(CRT_TEST_TARGET_ARCH ${arch}) -+ string(TOLOWER "-${arch}-${OS_NAME}" CRT_TEST_CONFIG_SUFFIX) -+ get_test_cc_for_arch(${arch} CRT_TEST_TARGET_CC CRT_TEST_TARGET_CFLAGS) -+ string(TOUPPER ${arch} ARCH_UPPER_CASE) -+ set(CONFIG_NAME ${ARCH_UPPER_CASE}${OS_NAME}Config) -+ -+ configure_lit_site_cfg( -+ ${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.in -+ ${CMAKE_CURRENT_BINARY_DIR}/${CONFIG_NAME}/lit.site.cfg) -+ list(APPEND CRT_TESTSUITES ${CMAKE_CURRENT_BINARY_DIR}/${CONFIG_NAME}) -+ endforeach() -+endif() -+ -+add_lit_testsuite(check-crt "Running the CRT tests" -+ ${CRT_TESTSUITES} -+ DEPENDS ${CRT_TEST_DEPS}) -+set_target_properties(check-crt PROPERTIES FOLDER "Compiler-RT Misc") -Index: compiler-rt/test/crt/dso_handle.cpp -=================================================================== ---- /dev/null -+++ compiler-rt/test/crt/dso_handle.cpp -@@ -0,0 +1,33 @@ -+// RUN: %clangxx -g -DCRT_SHARED -c %s -fPIC -o %tshared.o -+// RUN: %clangxx -g -c %s -fPIC -o %t.o -+// RUN: %clangxx -g -shared -o %t.so -nostdlib %crti %shared_crtbegin %tshared.o %libstdcxx -lc -lm -lgcc_s %shared_crtend %crtn -+// RUN: %clangxx -g -o %t -nostdlib %crt1 %crti %crtbegin %t.o %libstdcxx -lc -lm %libgcc %t.so %crtend %crtn -+// RUN: %run %t 2>&1 | FileCheck %s -+ -+#include <stdio.h> -+ -+// CHECK: 1 -+// CHECK-NEXT: ~A() -+ -+#ifdef CRT_SHARED -+bool G; -+void C() { -+ printf("%d\n", G); -+} -+ -+struct A { -+ A() { G = true; } -+ ~A() { -+ printf("~A()\n"); -+ } -+}; -+ -+A a; -+#else -+void C(); -+ -+int main() { -+ C(); -+ return 0; -+} -+#endif -Index: compiler-rt/test/crt/lit.cfg -=================================================================== ---- /dev/null -+++ compiler-rt/test/crt/lit.cfg -@@ -0,0 +1,80 @@ -+# -*- Python -*- -+ -+import os -+import subprocess -+ -+# Setup config name. -+config.name = 'CRT' + config.name_suffix -+ -+# Setup source root. -+config.test_source_root = os.path.dirname(__file__) -+ -+ -+def get_library_path(file): -+ cmd = subprocess.Popen([config.clang.strip(), -+ config.target_cflags.strip(), -+ '-print-file-name=%s' % file], -+ stdout=subprocess.PIPE, -+ env=config.environment) -+ if not cmd.stdout: -+ lit_config.fatal("Couldn't find the library path for '%s'" % file) -+ dir = cmd.stdout.read().strip() -+ if sys.platform in ['win32'] and execute_external: -+ # Don't pass dosish path separator to msys bash.exe. -+ dir = dir.replace('\\', '/') -+ # Ensure the result is an ascii string, across Python2.5+ - Python3. -+ return str(dir.decode('ascii')) -+ -+ -+def get_libgcc_file_name(): -+ cmd = subprocess.Popen([config.clang.strip(), -+ config.target_cflags.strip(), -+ '-print-libgcc-file-name'], -+ stdout=subprocess.PIPE, -+ env=config.environment) -+ if not cmd.stdout: -+ lit_config.fatal("Couldn't find the library path for '%s'" % file) -+ dir = cmd.stdout.read().strip() -+ if sys.platform in ['win32'] and execute_external: -+ # Don't pass dosish path separator to msys bash.exe. -+ dir = dir.replace('\\', '/') -+ # Ensure the result is an ascii string, across Python2.5+ - Python3. -+ return str(dir.decode('ascii')) -+ -+ -+def build_invocation(compile_flags): -+ return ' ' + ' '.join([config.clang] + compile_flags) + ' ' -+ -+ -+# Setup substitutions. -+config.substitutions.append( -+ ('%clang ', build_invocation([config.target_cflags]))) -+config.substitutions.append( -+ ('%clangxx ', -+ build_invocation(config.cxx_mode_flags + [config.target_cflags]))) -+ -+base_lib = os.path.join( -+ config.compiler_rt_libdir, "clang_rt.%%s-%s.o" % config.target_arch) -+config.substitutions.append(('%crtbegin', base_lib % "crtbegin")) -+config.substitutions.append(('%shared_crtbegin', base_lib % "crtbegin_shared")) -+config.substitutions.append(('%crtend', base_lib % "crtend")) -+config.substitutions.append(('%shared_crtend', base_lib % "crtend_shared")) -+ -+config.substitutions.append( -+ ('%crt1', get_library_path('crt1.o'))) -+config.substitutions.append( -+ ('%crti', get_library_path('crti.o'))) -+config.substitutions.append( -+ ('%crtn', get_library_path('crtn.o'))) -+ -+config.substitutions.append( -+ ('%libgcc', get_libgcc_file_name())) -+ -+config.substitutions.append( -+ ('%libstdcxx', '-l' + config.sanitizer_cxx_lib.lstrip('lib'))) -+ -+# Default test suffixes. -+config.suffixes = ['.c', '.cc', '.cpp'] -+ -+if config.host_os not in ['Linux']: -+ config.unsupported = True -Index: compiler-rt/test/crt/lit.site.cfg.in -=================================================================== ---- /dev/null -+++ compiler-rt/test/crt/lit.site.cfg.in -@@ -0,0 +1,14 @@ -+@LIT_SITE_CFG_IN_HEADER@ -+ -+# Tool-specific config options. -+config.name_suffix = "@CRT_TEST_CONFIG_SUFFIX@" -+config.crt_lit_source_dir = "@CRT_LIT_SOURCE_DIR@" -+config.target_cflags = "@CRT_TEST_TARGET_CFLAGS@" -+config.target_arch = "@CRT_TEST_TARGET_ARCH@" -+config.sanitizer_cxx_lib = "@SANITIZER_TEST_CXX_LIBNAME@" -+ -+# Load common config for all compiler-rt lit tests -+lit_config.load_config(config, "@COMPILER_RT_BINARY_DIR@/test/lit.common.configured") -+ -+# Load tool-specific config that would do the real work. -+lit_config.load_config(config, "@CRT_LIT_SOURCE_DIR@/lit.cfg") |