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}
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)
include(builtin-config-ix)
+pythonize_bool(MSVC)
+
#TODO: Add support for Apple.
if (NOT APPLE)
foreach(arch ${BUILTIN_SUPPORTED_ARCH})
#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);
#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) {
#include <complex.h>
#include <stdio.h>
+// REQUIRES: c99-complex
+
// Returns: the quotient of (a + ib) / (c + id)
COMPILER_RT_ABI double _Complex
#include <complex.h>
#include <stdio.h>
+// REQUIRES: c99-complex
+
// Returns: the quotient of (a + ib) / (c + id)
COMPILER_RT_ABI float _Complex
#include <math.h>
#include <complex.h>
+// REQUIRES: c99-complex
+
// Returns: the quotient of (a + ib) / (c + id)
COMPILER_RT_ABI long double _Complex
#include <complex.h>
#include <stdio.h>
+// REQUIRES: c99-complex
+
// Returns: the quotient of (a + ib) / (c + id)
COMPILER_RT_ABI long double _Complex
#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) {
// 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;
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]
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 = ""
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")
#include <complex.h>
#include <stdio.h>
+// REQUIRES: c99-complex
+
// Returns: the product of a + ib and c + id
COMPILER_RT_ABI double _Complex
#include <complex.h>
#include <stdio.h>
+// REQUIRES: c99-complex
+
// Returns: the product of a + ib and c + id
COMPILER_RT_ABI float _Complex
#include <complex.h>
#include <stdio.h>
+// REQUIRES: c99-complex
+
// Returns: the product of a + ib and c + id
COMPILER_RT_ABI long double _Complex
#include <stdio.h>
#include <string.h>
#include <stdint.h>
-#include <sys/mman.h>
/*
* Tests nested functions