diff options
-rw-r--r-- | lib/builtins/CMakeLists.txt | 13 | ||||
-rw-r--r-- | test/builtins/CMakeLists.txt | 2 | ||||
-rw-r--r-- | test/builtins/Unit/clear_cache_test.c | 21 | ||||
-rw-r--r-- | test/builtins/Unit/divdc3_test.c | 2 | ||||
-rw-r--r-- | test/builtins/Unit/divsc3_test.c | 2 | ||||
-rw-r--r-- | test/builtins/Unit/divtc3_test.c | 2 | ||||
-rw-r--r-- | test/builtins/Unit/divxc3_test.c | 2 | ||||
-rw-r--r-- | test/builtins/Unit/enable_execute_stack_test.c | 32 | ||||
-rw-r--r-- | test/builtins/Unit/lit.cfg | 14 | ||||
-rw-r--r-- | test/builtins/Unit/lit.site.cfg.in | 2 | ||||
-rw-r--r-- | test/builtins/Unit/muldc3_test.c | 2 | ||||
-rw-r--r-- | test/builtins/Unit/mulsc3_test.c | 2 | ||||
-rw-r--r-- | test/builtins/Unit/mulxc3_test.c | 2 | ||||
-rw-r--r-- | test/builtins/Unit/trampoline_setup_test.c | 1 |
14 files changed, 38 insertions, 61 deletions
diff --git a/lib/builtins/CMakeLists.txt b/lib/builtins/CMakeLists.txt index 28901034e..161487e70 100644 --- a/lib/builtins/CMakeLists.txt +++ b/lib/builtins/CMakeLists.txt @@ -176,15 +176,6 @@ if(COMPILER_RT_HAS_ATOMIC_KEYWORD AND NOT COMPILER_RT_EXCLUDE_ATOMIC_BUILTIN) atomic.c) endif() -set(MSVC_SOURCES - divsc3.c - divdc3.c - divxc3.c - mulsc3.c - muldc3.c - mulxc3.c) - - if(APPLE) set(GENERIC_SOURCES ${GENERIC_SOURCES} @@ -264,9 +255,9 @@ else () # MSVC x86_64/floatdidf.c x86_64/floatdisf.c x86_64/floatdixf.c - ${MSVC_SOURCES}) + ${GENERIC_SOURCES}) set(x86_64h_SOURCES ${x86_64_SOURCES}) - set(i386_SOURCES ${MSVC_SOURCES}) + set(i386_SOURCES ${GENERIC_SOURCES}) set(i686_SOURCES ${i386_SOURCES}) endif () # if (NOT MSVC) diff --git a/test/builtins/CMakeLists.txt b/test/builtins/CMakeLists.txt index f37e46d3a..cabf76722 100644 --- a/test/builtins/CMakeLists.txt +++ b/test/builtins/CMakeLists.txt @@ -13,6 +13,8 @@ configure_lit_site_cfg( include(builtin-config-ix) +pythonize_bool(MSVC) + #TODO: Add support for Apple. if (NOT APPLE) foreach(arch ${BUILTIN_SUPPORTED_ARCH}) diff --git a/test/builtins/Unit/clear_cache_test.c b/test/builtins/Unit/clear_cache_test.c index 590be7eb2..58960ce3c 100644 --- a/test/builtins/Unit/clear_cache_test.c +++ b/test/builtins/Unit/clear_cache_test.c @@ -16,12 +16,6 @@ #include <stdint.h> #if defined(_WIN32) #include <windows.h> -void __clear_cache(void* start, void* end) -{ - if (!FlushInstructionCache(GetCurrentProcess(), start, end-start)) - exit(1); -} - static uintptr_t get_page_size() { SYSTEM_INFO si; GetSystemInfo(&si); @@ -30,27 +24,20 @@ static uintptr_t get_page_size() { #else #include <unistd.h> #include <sys/mman.h> -extern void __clear_cache(void* start, void* end); static uintptr_t get_page_size() { return sysconf(_SC_PAGE_SIZE); } #endif - +extern void __clear_cache(void* start, void* end); typedef int (*pfunc)(void); -int func1() -{ - return 1; -} - -int func2() -{ - return 2; -} +// Make these static to avoid ILT jumps for incremental linking on Windows. +static int func1() { return 1; } +static int func2() { return 2; } void *__attribute__((noinline)) memcpy_f(void *dst, const void *src, size_t n) { diff --git a/test/builtins/Unit/divdc3_test.c b/test/builtins/Unit/divdc3_test.c index 3c69cf3d0..042fd23f0 100644 --- a/test/builtins/Unit/divdc3_test.c +++ b/test/builtins/Unit/divdc3_test.c @@ -17,6 +17,8 @@ #include <complex.h> #include <stdio.h> +// REQUIRES: c99-complex + // Returns: the quotient of (a + ib) / (c + id) COMPILER_RT_ABI double _Complex diff --git a/test/builtins/Unit/divsc3_test.c b/test/builtins/Unit/divsc3_test.c index 42430151f..daa221825 100644 --- a/test/builtins/Unit/divsc3_test.c +++ b/test/builtins/Unit/divsc3_test.c @@ -17,6 +17,8 @@ #include <complex.h> #include <stdio.h> +// REQUIRES: c99-complex + // Returns: the quotient of (a + ib) / (c + id) COMPILER_RT_ABI float _Complex diff --git a/test/builtins/Unit/divtc3_test.c b/test/builtins/Unit/divtc3_test.c index f561a9644..7474330f6 100644 --- a/test/builtins/Unit/divtc3_test.c +++ b/test/builtins/Unit/divtc3_test.c @@ -18,6 +18,8 @@ #include <math.h> #include <complex.h> +// REQUIRES: c99-complex + // Returns: the quotient of (a + ib) / (c + id) COMPILER_RT_ABI long double _Complex diff --git a/test/builtins/Unit/divxc3_test.c b/test/builtins/Unit/divxc3_test.c index d71660bfe..d0cdb0169 100644 --- a/test/builtins/Unit/divxc3_test.c +++ b/test/builtins/Unit/divxc3_test.c @@ -19,6 +19,8 @@ #include <complex.h> #include <stdio.h> +// REQUIRES: c99-complex + // Returns: the quotient of (a + ib) / (c + id) COMPILER_RT_ABI long double _Complex diff --git a/test/builtins/Unit/enable_execute_stack_test.c b/test/builtins/Unit/enable_execute_stack_test.c index 24165ed9f..72fc042e6 100644 --- a/test/builtins/Unit/enable_execute_stack_test.c +++ b/test/builtins/Unit/enable_execute_stack_test.c @@ -13,39 +13,14 @@ #include <stdio.h> #include <string.h> #include <stdint.h> -#if defined(_WIN32) -#include <windows.h> -void __clear_cache(void* start, void* end) -{ - if (!FlushInstructionCache(GetCurrentProcess(), start, end-start)) - exit(1); -} -void __enable_execute_stack(void *addr) -{ - MEMORY_BASIC_INFORMATION b; - - if (!VirtualQuery(addr, &b, sizeof(b))) - exit(1); - if (!VirtualProtect(b.BaseAddress, b.RegionSize, PAGE_EXECUTE_READWRITE, &b.Protect)) - exit(1); -} -#else -#include <sys/mman.h> extern void __clear_cache(void* start, void* end); extern void __enable_execute_stack(void* addr); -#endif typedef int (*pfunc)(void); -int func1() -{ - return 1; -} - -int func2() -{ - return 2; -} +// Make these static to avoid ILT jumps for incremental linking on Windows. +static int func1() { return 1; } +static int func2() { return 2; } void *__attribute__((noinline)) memcpy_f(void *dst, const void *src, size_t n) { @@ -69,6 +44,7 @@ int main() // verify you can copy and execute a function pfunc f1 = (pfunc)memcpy_f(execution_buffer, func1, 128); __clear_cache(execution_buffer, &execution_buffer[128]); + printf("f1: %p\n", f1); if ((*f1)() != 1) return 1; diff --git a/test/builtins/Unit/lit.cfg b/test/builtins/Unit/lit.cfg index f29f7e00d..9e3a0d6f7 100644 --- a/test/builtins/Unit/lit.cfg +++ b/test/builtins/Unit/lit.cfg @@ -24,15 +24,21 @@ default_builtins_opts = '' config.test_source_root = os.path.dirname(__file__) # Path to the static library -base_lib = os.path.join(config.compiler_rt_libdir, "libclang_rt.builtins-%s.a " - % config.target_arch) +is_msvc = get_required_attr(config, "builtins_is_msvc") +if is_msvc: + base_lib = os.path.join(config.compiler_rt_libdir, "clang_rt.builtins-%s.lib " + % config.target_arch) + config.substitutions.append( ("%librt ", base_lib) ) +else: + base_lib = os.path.join(config.compiler_rt_libdir, "libclang_rt.builtins-%s.a" + % config.target_arch) + config.substitutions.append( ("%librt ", base_lib + ' -lc -lm ') ) builtins_source_dir = os.path.join( get_required_attr(config, "compiler_rt_src_root"), "lib", "builtins") builtins_lit_source_dir = get_required_attr(config, "builtins_lit_source_dir") extra_link_flags = ["-nodefaultlibs"] -config.substitutions.append( ("%librt ", base_lib + ' -lc -lm ') ) target_cflags = [get_required_attr(config, "target_cflags")] target_cflags += ['-fno-builtin', '-I', builtins_source_dir] @@ -46,6 +52,8 @@ clang_builtins_static_cxxflags = config.cxx_mode_flags + \ clang_builtins_cflags = clang_builtins_static_cflags clang_builtins_cxxflags = clang_builtins_static_cxxflags +if not is_msvc: + config.available_features.add('c99-complex') config.available_features.add('not-android') clang_wrapper = "" diff --git a/test/builtins/Unit/lit.site.cfg.in b/test/builtins/Unit/lit.site.cfg.in index 4b4009d1e..16dc5ab68 100644 --- a/test/builtins/Unit/lit.site.cfg.in +++ b/test/builtins/Unit/lit.site.cfg.in @@ -4,7 +4,7 @@ config.name_suffix = "@BUILTINS_TEST_CONFIG_SUFFIX@" config.builtins_lit_source_dir = "@BUILTINS_LIT_SOURCE_DIR@/Unit" config.target_cflags = "@BUILTINS_TEST_TARGET_CFLAGS@" config.target_arch = "@BUILTINS_TEST_TARGET_ARCH@" - +config.builtins_is_msvc = "@MSVC_PYBOOL@" # Load common config for all compiler-rt lit tests. lit_config.load_config(config, "@COMPILER_RT_BINARY_DIR@/test/lit.common.configured") diff --git a/test/builtins/Unit/muldc3_test.c b/test/builtins/Unit/muldc3_test.c index add09f4e8..5a856bc2c 100644 --- a/test/builtins/Unit/muldc3_test.c +++ b/test/builtins/Unit/muldc3_test.c @@ -17,6 +17,8 @@ #include <complex.h> #include <stdio.h> +// REQUIRES: c99-complex + // Returns: the product of a + ib and c + id COMPILER_RT_ABI double _Complex diff --git a/test/builtins/Unit/mulsc3_test.c b/test/builtins/Unit/mulsc3_test.c index b14e237d3..46309c3e4 100644 --- a/test/builtins/Unit/mulsc3_test.c +++ b/test/builtins/Unit/mulsc3_test.c @@ -19,6 +19,8 @@ #include <complex.h> #include <stdio.h> +// REQUIRES: c99-complex + // Returns: the product of a + ib and c + id COMPILER_RT_ABI float _Complex diff --git a/test/builtins/Unit/mulxc3_test.c b/test/builtins/Unit/mulxc3_test.c index 384c6ee11..3260b7521 100644 --- a/test/builtins/Unit/mulxc3_test.c +++ b/test/builtins/Unit/mulxc3_test.c @@ -19,6 +19,8 @@ #include <complex.h> #include <stdio.h> +// REQUIRES: c99-complex + // Returns: the product of a + ib and c + id COMPILER_RT_ABI long double _Complex diff --git a/test/builtins/Unit/trampoline_setup_test.c b/test/builtins/Unit/trampoline_setup_test.c index 5a75724f4..b8c3eae2d 100644 --- a/test/builtins/Unit/trampoline_setup_test.c +++ b/test/builtins/Unit/trampoline_setup_test.c @@ -13,7 +13,6 @@ #include <stdio.h> #include <string.h> #include <stdint.h> -#include <sys/mman.h> /* * Tests nested functions |