diff options
Diffstat (limited to 'deps/v8/test/unittests/base/platform/platform-unittest.cc')
-rw-r--r-- | deps/v8/test/unittests/base/platform/platform-unittest.cc | 116 |
1 files changed, 0 insertions, 116 deletions
diff --git a/deps/v8/test/unittests/base/platform/platform-unittest.cc b/deps/v8/test/unittests/base/platform/platform-unittest.cc index cb07ad1ca4..f9fc26a2df 100644 --- a/deps/v8/test/unittests/base/platform/platform-unittest.cc +++ b/deps/v8/test/unittests/base/platform/platform-unittest.cc @@ -4,23 +4,8 @@ #include "src/base/platform/platform.h" -#if V8_OS_POSIX -#include <setjmp.h> -#include <signal.h> -#include <unistd.h> // NOLINT -#endif - -#if V8_OS_WIN -#include "src/base/win32-headers.h" -#endif #include "testing/gtest/include/gtest/gtest.h" -#if V8_OS_ANDROID -#define DISABLE_ON_ANDROID(Name) DISABLED_##Name -#else -#define DISABLE_ON_ANDROID(Name) Name -#endif - namespace v8 { namespace base { @@ -98,106 +83,5 @@ TEST_F(ThreadLocalStorageTest, DoTest) { Join(); } -#if V8_OS_POSIX -// TODO(eholk): Add a windows version of these tests - -namespace { - -// These tests make sure the routines to allocate memory do so with the correct -// permissions. -// -// Unfortunately, there is no API to find the protection of a memory address, -// so instead we test permissions by installing a signal handler, probing a -// memory location and recovering from the fault. -// -// We don't test the execution permission because to do so we'd have to -// dynamically generate code and test if we can execute it. - -class MemoryAllocationPermissionsTest : public ::testing::Test { - static void SignalHandler(int signal, siginfo_t* info, void*) { - siglongjmp(continuation_, 1); - } - struct sigaction old_action_; -// On Mac, sometimes we get SIGBUS instead of SIGSEGV. -#if V8_OS_MACOSX - struct sigaction old_bus_action_; -#endif - - protected: - virtual void SetUp() { - struct sigaction action; - action.sa_sigaction = SignalHandler; - sigemptyset(&action.sa_mask); - action.sa_flags = SA_SIGINFO; - sigaction(SIGSEGV, &action, &old_action_); -#if V8_OS_MACOSX - sigaction(SIGBUS, &action, &old_bus_action_); -#endif - } - - virtual void TearDown() { - // be a good citizen and restore the old signal handler. - sigaction(SIGSEGV, &old_action_, nullptr); -#if V8_OS_MACOSX - sigaction(SIGBUS, &old_bus_action_, nullptr); -#endif - } - - public: - static sigjmp_buf continuation_; - - enum class MemoryAction { kRead, kWrite }; - - void ProbeMemory(volatile int* buffer, MemoryAction action, - bool should_succeed) { - const int save_sigs = 1; - if (!sigsetjmp(continuation_, save_sigs)) { - switch (action) { - case MemoryAction::kRead: { - // static_cast to remove the reference and force a memory read. - USE(static_cast<int>(*buffer)); - break; - } - case MemoryAction::kWrite: { - *buffer = 0; - break; - } - } - if (should_succeed) { - SUCCEED(); - } else { - FAIL(); - } - return; - } - if (should_succeed) { - FAIL(); - } else { - SUCCEED(); - } - } - - void TestPermissions(OS::MemoryPermission permission, bool can_read, - bool can_write) { - const size_t page_size = OS::AllocatePageSize(); - int* buffer = static_cast<int*>( - OS::Allocate(nullptr, page_size, page_size, permission)); - ProbeMemory(buffer, MemoryAction::kRead, can_read); - ProbeMemory(buffer, MemoryAction::kWrite, can_write); - CHECK(OS::Free(buffer, page_size)); - } -}; - -sigjmp_buf MemoryAllocationPermissionsTest::continuation_; - -TEST_F(MemoryAllocationPermissionsTest, DoTest) { - TestPermissions(OS::MemoryPermission::kNoAccess, false, false); - TestPermissions(OS::MemoryPermission::kReadWrite, true, true); - TestPermissions(OS::MemoryPermission::kReadWriteExecute, true, true); -} - -} // namespace -#endif // V8_OS_POSIX - } // namespace base } // namespace v8 |