summaryrefslogtreecommitdiffstats
path: root/pkgs/development/compilers/llvm/8/compiler-rt/crtbegin-and-end.patch
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/development/compilers/llvm/8/compiler-rt/crtbegin-and-end.patch')
-rw-r--r--pkgs/development/compilers/llvm/8/compiler-rt/crtbegin-and-end.patch595
1 files changed, 0 insertions, 595 deletions
diff --git a/pkgs/development/compilers/llvm/8/compiler-rt/crtbegin-and-end.patch b/pkgs/development/compilers/llvm/8/compiler-rt/crtbegin-and-end.patch
deleted file mode 100644
index e63be181f95c..000000000000
--- a/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")