summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/builtins/CMakeLists.txt13
-rw-r--r--test/builtins/CMakeLists.txt2
-rw-r--r--test/builtins/Unit/clear_cache_test.c21
-rw-r--r--test/builtins/Unit/divdc3_test.c2
-rw-r--r--test/builtins/Unit/divsc3_test.c2
-rw-r--r--test/builtins/Unit/divtc3_test.c2
-rw-r--r--test/builtins/Unit/divxc3_test.c2
-rw-r--r--test/builtins/Unit/enable_execute_stack_test.c32
-rw-r--r--test/builtins/Unit/lit.cfg14
-rw-r--r--test/builtins/Unit/lit.site.cfg.in2
-rw-r--r--test/builtins/Unit/muldc3_test.c2
-rw-r--r--test/builtins/Unit/mulsc3_test.c2
-rw-r--r--test/builtins/Unit/mulxc3_test.c2
-rw-r--r--test/builtins/Unit/trampoline_setup_test.c1
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