Index: lib/asan/tests/CMakeLists.txt =================================================================== --- lib/asan/tests/CMakeLists.txt +++ lib/asan/tests/CMakeLists.txt @@ -237,6 +237,9 @@ if(APPLE) darwin_filter_host_archs(ASAN_SUPPORTED_ARCH ASAN_TEST_ARCH) endif() + if(OS_NAME MATCHES "SunOS") + list(REMOVE_ITEM ASAN_TEST_ARCH x86_64) + endif() foreach(arch ${ASAN_TEST_ARCH}) Index: lib/asan/tests/asan_test.cc =================================================================== --- lib/asan/tests/asan_test.cc +++ lib/asan/tests/asan_test.cc @@ -25,6 +25,11 @@ #endif #endif +#if defined(__sun__) && defined(__svr4__) +using std::_setjmp; +using std::_longjmp; +#endif + NOINLINE void *malloc_fff(size_t size) { void *res = malloc/**/(size); break_optimization(0); return res;} NOINLINE void *malloc_eee(size_t size) { Index: lib/sanitizer_common/tests/sanitizer_test_utils.h =================================================================== --- lib/sanitizer_common/tests/sanitizer_test_utils.h +++ lib/sanitizer_common/tests/sanitizer_test_utils.h @@ -104,10 +104,16 @@ #if !defined(__APPLE__) && !defined(__FreeBSD__) && !defined(__ANDROID__) && \ !defined(__NetBSD__) && !defined(_WIN32) # define SANITIZER_TEST_HAS_MEMALIGN 1 +#else +# define SANITIZER_TEST_HAS_MEMALIGN 0 +#endif + +#if !defined(__APPLE__) && !defined(__FreeBSD__) && !defined(__ANDROID__) && \ + !defined(__NetBSD__) && !defined(_WIN32) && \ + !(defined(__sun__) && defined(__svr4__)) # define SANITIZER_TEST_HAS_PVALLOC 1 # define SANITIZER_TEST_HAS_MALLOC_USABLE_SIZE 1 #else -# define SANITIZER_TEST_HAS_MEMALIGN 0 # define SANITIZER_TEST_HAS_PVALLOC 0 # define SANITIZER_TEST_HAS_MALLOC_USABLE_SIZE 0 #endif Index: test/asan/CMakeLists.txt =================================================================== --- test/asan/CMakeLists.txt +++ test/asan/CMakeLists.txt @@ -40,6 +40,9 @@ if(APPLE) darwin_filter_host_archs(ASAN_SUPPORTED_ARCH ASAN_TEST_ARCH) endif() +if(OS_NAME MATCHES "SunOS") + list(REMOVE_ITEM ASAN_TEST_ARCH x86_64) +endif() foreach(arch ${ASAN_TEST_ARCH}) if(ANDROID) Index: test/asan/TestCases/Posix/asan-sigbus.cpp =================================================================== --- test/asan/TestCases/Posix/asan-sigbus.cpp +++ test/asan/TestCases/Posix/asan-sigbus.cpp @@ -14,6 +14,10 @@ #include #include +#ifndef MAP_FILE +#define MAP_FILE 0 +#endif + char array[4096]; int main(int argc, char **argv) { int fd = open((std::string(argv[0]) + ".m").c_str(), O_RDWR | O_CREAT, 0700); Index: test/asan/TestCases/Posix/coverage.cc =================================================================== --- test/asan/TestCases/Posix/coverage.cc +++ test/asan/TestCases/Posix/coverage.cc @@ -14,7 +14,7 @@ // RUN: %sancov print merged-cov 2>&1 | FileCheck %s --check-prefix=CHECK-SANCOV2 // RUN: %env_asan_opts=coverage=1:verbosity=1 not %run %t foo bar 4 2>&1 | FileCheck %s --check-prefix=CHECK-report // RUN: %env_asan_opts=coverage=1:verbosity=1 not %run %t foo bar 4 5 2>&1 | FileCheck %s --check-prefix=CHECK-segv -// RUN: rm -r %T/coverage +// RUN: cd .. && rm -r %T/coverage // // https://code.google.com/p/address-sanitizer/issues/detail?id=263 // XFAIL: android Index: test/asan/TestCases/Posix/ioctl.cc =================================================================== --- test/asan/TestCases/Posix/ioctl.cc +++ test/asan/TestCases/Posix/ioctl.cc @@ -10,6 +10,10 @@ #include #include +#if defined(__sun__) && defined(__svr4__) +#include +#endif + int main(int argc, char **argv) { int fd = socket(AF_INET, SOCK_DGRAM, 0); Index: test/asan/TestCases/alloca_constant_size.cc =================================================================== --- test/asan/TestCases/alloca_constant_size.cc +++ test/asan/TestCases/alloca_constant_size.cc @@ -6,13 +6,13 @@ #include #include +#include // MSVC provides _alloca instead of alloca. #if defined(_MSC_VER) && !defined(alloca) # define alloca _alloca -#elif defined(__FreeBSD__) || defined(__NetBSD__) -#include -#else + +#if defined(__sun__) && defined(__svr4__) #include #endif Index: test/asan/TestCases/alloca_loop_unpoisoning.cc =================================================================== --- test/asan/TestCases/alloca_loop_unpoisoning.cc +++ test/asan/TestCases/alloca_loop_unpoisoning.cc @@ -15,6 +15,10 @@ # define alloca _alloca #endif +#if defined(__sun__) && defined(__svr4__) +#include +#endif + void *top, *bot; __attribute__((noinline)) void foo(int len) { Index: test/asan/TestCases/alloca_vla_interact.cc =================================================================== --- test/asan/TestCases/alloca_vla_interact.cc +++ test/asan/TestCases/alloca_vla_interact.cc @@ -15,6 +15,10 @@ # define alloca _alloca #endif +#if defined(__sun__) && defined(__svr4__) +#include +#endif + #define RZ 32 __attribute__((noinline)) void foo(int len) { Index: test/asan/TestCases/debug_double_free.cc =================================================================== --- test/asan/TestCases/debug_double_free.cc +++ test/asan/TestCases/debug_double_free.cc @@ -15,6 +15,9 @@ # else # define PTR_FMT "0x%08x" # endif +// Solaris libc omits the leading 0x. +#elif defined(__sun__) && defined(__svr4__) +# define PTR_FMT "0x%p" #else # define PTR_FMT "%p" #endif Index: test/asan/TestCases/debug_report.cc =================================================================== --- test/asan/TestCases/debug_report.cc +++ test/asan/TestCases/debug_report.cc @@ -30,6 +30,9 @@ # else # define PTR_FMT "0x%08x" # endif +// Solaris libc omits the leading 0x. +#elif defined(__sun__) && defined(__svr4__) +# define PTR_FMT "0x%p" #else # define PTR_FMT "%p" #endif Index: test/asan/TestCases/malloc-no-intercept.c =================================================================== --- test/asan/TestCases/malloc-no-intercept.c +++ test/asan/TestCases/malloc-no-intercept.c @@ -10,6 +10,11 @@ // Conflicts with BIONIC declarations. // UNSUPPORTED: android +// Inhibit conflicting declaration of memalign on Solaris. +#if defined(__sun__) && defined(__svr4__) +#undef __EXTENSIONS__ +#endif + #include // For glibc, cause link failures by referencing a nonexistent function. Index: test/asan/lit.cfg =================================================================== --- test/asan/lit.cfg +++ test/asan/lit.cfg @@ -209,7 +209,7 @@ config.substitutions.append(('%pie', '-pie')) # Only run the tests on supported OSs. -if config.host_os not in ['Linux', 'Darwin', 'FreeBSD', 'Windows']: +if config.host_os not in ['Linux', 'Darwin', 'FreeBSD', 'SunOS', 'Windows']: config.unsupported = True if config.host_os == 'Darwin' and config.target_arch in ["x86_64", "x86_64h"]: Index: test/lit.common.cfg =================================================================== --- test/lit.common.cfg +++ test/lit.common.cfg @@ -300,6 +300,9 @@ elif config.host_os == 'Linux': config.substitutions.append( ("%ld_flags_rpath_exe", "-Wl,-rpath,\$ORIGIN -L%T -l%xdynamiclib_namespec") ) config.substitutions.append( ("%ld_flags_rpath_so", '') ) +elif config.host_os == 'SunOS': + config.substitutions.append( ("%ld_flags_rpath_exe", "-Wl,-R\$ORIGIN -L%T -l%xdynamiclib_namespec") ) + config.substitutions.append( ("%ld_flags_rpath_so", '') ) # Must be defined after the substitutions that use %dynamiclib. config.substitutions.append( ("%dynamiclib", '%T/%xdynamiclib_filename') ) Index: test/sanitizer_common/CMakeLists.txt =================================================================== --- test/sanitizer_common/CMakeLists.txt +++ test/sanitizer_common/CMakeLists.txt @@ -4,7 +4,7 @@ set(SANITIZER_COMMON_TESTSUITES) set(SUPPORTED_TOOLS) -if(CMAKE_SYSTEM_NAME MATCHES "Darwin|Linux|FreeBSD|NetBSD") +if(CMAKE_SYSTEM_NAME MATCHES "Darwin|Linux|FreeBSD|NetBSD|SunOS") list(APPEND SUPPORTED_TOOLS asan) endif() if(CMAKE_SYSTEM_NAME MATCHES "Linux" AND NOT ANDROID) Index: test/ubsan/CMakeLists.txt =================================================================== --- test/ubsan/CMakeLists.txt +++ test/ubsan/CMakeLists.txt @@ -38,6 +38,9 @@ if(APPLE) darwin_filter_host_archs(UBSAN_SUPPORTED_ARCH UBSAN_TEST_ARCH) endif() +if(OS_NAME MATCHES "SunOS") + list(REMOVE_ITEM UBSAN_TEST_ARCH x86_64) +endif() foreach(arch ${UBSAN_TEST_ARCH}) set(UBSAN_TEST_TARGET_ARCH ${arch}) Index: test/ubsan/TestCases/Float/cast-overflow.cpp =================================================================== --- test/ubsan/TestCases/Float/cast-overflow.cpp +++ test/ubsan/TestCases/Float/cast-overflow.cpp @@ -29,6 +29,16 @@ # ifndef LITTLE_ENDIAN # define LITTLE_ENDIAN _LITTLE_ENDIAN # endif +#elif defined(__sun__) && defined(__svr4__) +// Solaris provides _BIG_ENDIAN/_LITTLE_ENDIAN selector in sys/types.h. +# include +# define BIG_ENDIAN 4321 +# define LITTLE_ENDIAN 1234 +# if defined(_BIG_ENDIAN) +# define BYTE_ORDER BIG_ENDIAN +# else +# define BYTE_ORDER LITTLE_ENDIAN +# endif #elif defined(_WIN32) # define BYTE_ORDER 0 # define BIG_ENDIAN 1 Index: test/ubsan/lit.common.cfg =================================================================== --- test/ubsan/lit.common.cfg +++ test/ubsan/lit.common.cfg @@ -68,7 +68,7 @@ config.suffixes = ['.c', '.cc', '.cpp'] # Check that the host supports UndefinedBehaviorSanitizer tests -if config.host_os not in ['Linux', 'Darwin', 'FreeBSD', 'Windows', 'NetBSD']: +if config.host_os not in ['Linux', 'Darwin', 'FreeBSD', 'Windows', 'NetBSD', 'SunOS']: config.unsupported = True config.available_features.add('arch=' + config.target_arch) Index: test/ubsan_minimal/CMakeLists.txt =================================================================== --- test/ubsan_minimal/CMakeLists.txt +++ test/ubsan_minimal/CMakeLists.txt @@ -4,6 +4,9 @@ if(APPLE) darwin_filter_host_archs(UBSAN_SUPPORTED_ARCH UBSAN_TEST_ARCH) endif() +if(OS_NAME MATCHES "SunOS") + list(REMOVE_ITEM UBSAN_TEST_ARCH x86_64) +endif() set(UBSAN_TESTSUITES) set(UBSAN_TEST_DEPS ${SANITIZER_COMMON_LIT_TEST_DEPS})