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 <unistd.h>
 #include <string>
 
+#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 <sys/socket.h>
 #include <unistd.h>
 
+#if defined(__sun__) && defined(__svr4__)
+#include <sys/filio.h>
+#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 <stdio.h>
 #include <string.h>
+#include <stdlib.h>
 
 // MSVC provides _alloca instead of alloca.
 #if defined(_MSC_VER) && !defined(alloca)
 # define alloca _alloca
-#elif defined(__FreeBSD__) || defined(__NetBSD__)
-#include <stdlib.h>
-#else
+
+#if defined(__sun__) && defined(__svr4__)
 #include <alloca.h>
 #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 <alloca.h>
+#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 <alloca.h>
+#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 <stdlib.h>
 
 // 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 <sys/types.h>
+# 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})