From 02aae22397fe38e70fb488195a035c913c4f71b1 Mon Sep 17 00:00:00 2001 From: Ryan Dahl Date: Thu, 16 Dec 2010 14:22:41 -0800 Subject: [PATCH] Add solaris patch file --- .gitignore | 1 - deps/v8/0003-Fix-Solaris-build.patch | 103 +++++++++++++++++++++++++++ 2 files changed, 103 insertions(+), 1 deletion(-) create mode 100644 deps/v8/0003-Fix-Solaris-build.patch diff --git a/.gitignore b/.gitignore index 3c28c07a7f..410d0a098c 100644 --- a/.gitignore +++ b/.gitignore @@ -3,7 +3,6 @@ build tags .lock-wscript *.pyc -*.patch doc/api.xml tools/nodejs.pc test/fixtures/hello.txt diff --git a/deps/v8/0003-Fix-Solaris-build.patch b/deps/v8/0003-Fix-Solaris-build.patch new file mode 100644 index 0000000000..db6f0909a5 --- /dev/null +++ b/deps/v8/0003-Fix-Solaris-build.patch @@ -0,0 +1,103 @@ +From 2a40926a1e1c8d385afefc1fe5255e21cc1a8f1e Mon Sep 17 00:00:00 2001 +From: Ryan Dahl +Date: Thu, 16 Dec 2010 22:20:44 +0000 +Subject: [PATCH] Fix Solaris build + +--- + src/platform-solaris.cc | 49 ++++++++++++++++++++++++++++++++++++---------- + src/v8utils.h | 1 + + 2 files changed, 39 insertions(+), 11 deletions(-) + +diff --git a/src/platform-solaris.cc b/src/platform-solaris.cc +index f84e80d..b302c59 100644 +--- a/src/platform-solaris.cc ++++ b/src/platform-solaris.cc +@@ -45,6 +45,7 @@ + #include + #include // finite() + #include // sigemptyset(), etc ++#include + + + #undef MAP_TYPE +@@ -481,6 +482,16 @@ class SolarisMutex : public Mutex { + + int Unlock() { return pthread_mutex_unlock(&mutex_); } + ++ virtual bool TryLock() { ++ int result = pthread_mutex_trylock(&mutex_); ++ // Return false if the lock is busy and locking failed. ++ if (result == EBUSY) { ++ return false; ++ } ++ ASSERT(result == 0); // Verify no other errors. ++ return true; ++ } ++ + private: + pthread_mutex_t mutex_; + }; +@@ -572,21 +583,37 @@ Semaphore* OS::CreateSemaphore(int count) { + #ifdef ENABLE_LOGGING_AND_PROFILING + + static Sampler* active_sampler_ = NULL; ++static pthread_t vm_tid_ = 0; ++ + + static void ProfilerSignalHandler(int signal, siginfo_t* info, void* context) { + USE(info); + if (signal != SIGPROF) return; +- if (active_sampler_ == NULL) return; +- +- TickSample sample; +- sample.pc = 0; +- sample.sp = 0; +- sample.fp = 0; +- +- // We always sample the VM state. +- sample.state = VMState::current_state(); +- +- active_sampler_->Tick(&sample); ++ if (active_sampler_ == NULL || !active_sampler_->IsActive()) return; ++ if (vm_tid_ != pthread_self()) return; ++ ++ TickSample sample_obj; ++ TickSample* sample = CpuProfiler::TickSampleEvent(); ++ if (sample == NULL) sample = &sample_obj; ++ ++ // Extracting the sample from the context is extremely machine dependent. ++ ucontext_t* ucontext = reinterpret_cast(context); ++ mcontext_t& mcontext = ucontext->uc_mcontext; ++ sample->state = Top::current_vm_state(); ++ ++#if V8_HOST_ARCH_IA32 ++ sample->pc = reinterpret_cast
(mcontext.gregs[KDIREG_EIP]); ++ sample->sp = reinterpret_cast
(mcontext.gregs[KDIREG_ESP]); ++ sample->fp = reinterpret_cast
(mcontext.gregs[KDIREG_EBP]); ++#elif V8_HOST_ARCH_X64 ++ sample->pc = reinterpret_cast
(mcontext.gregs[KDIREG_RIP]); ++ sample->sp = reinterpret_cast
(mcontext.gregs[KDIREG_RSP]); ++ sample->fp = reinterpret_cast
(mcontext.gregs[KDIREG_RBP]); ++#else ++ UNIMPLEMENTED(); ++#endif ++ active_sampler_->SampleStack(sample); ++ active_sampler_->Tick(sample); + } + + +diff --git a/src/v8utils.h b/src/v8utils.h +index f6ed520..59b3898 100644 +--- a/src/v8utils.h ++++ b/src/v8utils.h +@@ -29,6 +29,7 @@ + #define V8_V8UTILS_H_ + + #include "utils.h" ++#include + + namespace v8 { + namespace internal { +-- +1.6.3.3 +