Title: [213901] trunk/Source/_javascript_Core
Revision
213901
Author
utatane....@gmail.com
Date
2017-03-14 09:59:37 -0700 (Tue, 14 Mar 2017)

Log Message

[JSC] Drop unnecessary pthread_attr_t for JIT enabled Linux / FreeBSD environment
https://bugs.webkit.org/show_bug.cgi?id=169592

Reviewed by Carlos Garcia Campos.

Since suspended mcontext_t has all the necessary information, we can drop
pthread_attr_t allocation and destroy for JIT enabled Linux / FreeBSD environment.

* heap/MachineStackMarker.cpp:
(JSC::MachineThreads::Thread::getRegisters):
(JSC::MachineThreads::Thread::Registers::stackPointer):
(JSC::MachineThreads::Thread::Registers::framePointer):
(JSC::MachineThreads::Thread::Registers::instructionPointer):
(JSC::MachineThreads::Thread::Registers::llintPC):
(JSC::MachineThreads::Thread::freeRegisters):
* heap/MachineStackMarker.h:

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (213900 => 213901)


--- trunk/Source/_javascript_Core/ChangeLog	2017-03-14 16:16:46 UTC (rev 213900)
+++ trunk/Source/_javascript_Core/ChangeLog	2017-03-14 16:59:37 UTC (rev 213901)
@@ -1,3 +1,22 @@
+2017-03-14  Yusuke Suzuki  <utatane....@gmail.com>
+
+        [JSC] Drop unnecessary pthread_attr_t for JIT enabled Linux / FreeBSD environment
+        https://bugs.webkit.org/show_bug.cgi?id=169592
+
+        Reviewed by Carlos Garcia Campos.
+
+        Since suspended mcontext_t has all the necessary information, we can drop
+        pthread_attr_t allocation and destroy for JIT enabled Linux / FreeBSD environment.
+
+        * heap/MachineStackMarker.cpp:
+        (JSC::MachineThreads::Thread::getRegisters):
+        (JSC::MachineThreads::Thread::Registers::stackPointer):
+        (JSC::MachineThreads::Thread::Registers::framePointer):
+        (JSC::MachineThreads::Thread::Registers::instructionPointer):
+        (JSC::MachineThreads::Thread::Registers::llintPC):
+        (JSC::MachineThreads::Thread::freeRegisters):
+        * heap/MachineStackMarker.h:
+
 2017-03-14  Zan Dobersek  <zdober...@igalia.com>
 
         [GLib] Use USE(GLIB) guards in _javascript_Core/inspector/EventLoop.cpp

Modified: trunk/Source/_javascript_Core/heap/MachineStackMarker.cpp (213900 => 213901)


--- trunk/Source/_javascript_Core/heap/MachineStackMarker.cpp	2017-03-14 16:16:46 UTC (rev 213900)
+++ trunk/Source/_javascript_Core/heap/MachineStackMarker.cpp	2017-03-14 16:59:37 UTC (rev 213901)
@@ -461,6 +461,9 @@
     regs.ContextFlags = CONTEXT_INTEGER | CONTEXT_CONTROL;
     GetThreadContext(platformThreadHandle, &regs);
     return sizeof(CONTEXT);
+#elif ((OS(FREEBSD) || defined(__GLIBC__)) && ENABLE(JIT))
+    regs = suspendedMachineContext;
+    return sizeof(Registers::PlatformRegisters);
 #elif USE(PTHREADS)
     pthread_attr_init(&regs.attribute);
 #if HAVE(PTHREAD_NP_H) || OS(NETBSD)
@@ -472,7 +475,6 @@
     // FIXME: this function is non-portable; other POSIX systems may have different np alternatives
     pthread_getattr_np(platformThread, &regs.attribute);
 #endif
-    regs.machineContext = suspendedMachineContext;
     return 0;
 #else
 #error Need a way to get thread registers on this platform
@@ -481,13 +483,9 @@
 
 void* MachineThreads::Thread::Registers::stackPointer() const
 {
-#if OS(DARWIN) || OS(WINDOWS)
+#if OS(DARWIN) || OS(WINDOWS) || ((OS(FREEBSD) || defined(__GLIBC__)) && ENABLE(JIT))
     return MachineContext::stackPointer(regs);
 #elif USE(PTHREADS)
-
-#if (OS(FREEBSD) || defined(__GLIBC__)) && ENABLE(JIT)
-    return MachineContext::stackPointer(regs.machineContext);
-#else
     void* stackBase = 0;
     size_t stackSize = 0;
 #if OS(OPENBSD)
@@ -501,8 +499,6 @@
     (void)rc; // FIXME: Deal with error code somehow? Seems fatal.
     ASSERT(stackBase);
     return static_cast<char*>(stackBase) + stackSize;
-#endif
-
 #else
 #error Need a way to get the stack pointer for another thread on this platform
 #endif
@@ -511,10 +507,8 @@
 #if ENABLE(SAMPLING_PROFILER)
 void* MachineThreads::Thread::Registers::framePointer() const
 {
-#if OS(DARWIN) || OS(WINDOWS)
+#if OS(DARWIN) || OS(WINDOWS) || (OS(FREEBSD) || defined(__GLIBC__))
     return MachineContext::framePointer(regs);
-#elif OS(FREEBSD) || defined(__GLIBC__)
-    return MachineContext::framePointer(regs.machineContext);
 #else
 #error Need a way to get the frame pointer for another thread on this platform
 #endif
@@ -522,10 +516,8 @@
 
 void* MachineThreads::Thread::Registers::instructionPointer() const
 {
-#if OS(DARWIN) || OS(WINDOWS)
+#if OS(DARWIN) || OS(WINDOWS) || (OS(FREEBSD) || defined(__GLIBC__))
     return MachineContext::instructionPointer(regs);
-#elif OS(FREEBSD) || defined(__GLIBC__)
-    return MachineContext::instructionPointer(regs.machineContext);
 #else
 #error Need a way to get the instruction pointer for another thread on this platform
 #endif
@@ -534,10 +526,8 @@
 void* MachineThreads::Thread::Registers::llintPC() const
 {
     // LLInt uses regT4 as PC.
-#if OS(DARWIN) || OS(WINDOWS)
+#if OS(DARWIN) || OS(WINDOWS) || (OS(FREEBSD) || defined(__GLIBC__))
     return MachineContext::llintInstructionPointer(regs);
-#elif OS(FREEBSD) || defined(__GLIBC__)
-    return MachineContext::llintInstructionPointer(regs.machineContext);
 #else
 #error Need a way to get the LLIntPC for another thread on this platform
 #endif
@@ -547,7 +537,7 @@
 void MachineThreads::Thread::freeRegisters(Thread::Registers& registers)
 {
     Thread::Registers::PlatformRegisters& regs = registers.regs;
-#if USE(PTHREADS) && !OS(WINDOWS) && !OS(DARWIN)
+#if USE(PTHREADS) && !OS(WINDOWS) && !OS(DARWIN) && !((OS(FREEBSD) || defined(__GLIBC__)) && ENABLE(JIT))
     pthread_attr_destroy(&regs.attribute);
 #else
     UNUSED_PARAM(regs);

Modified: trunk/Source/_javascript_Core/heap/MachineStackMarker.h (213900 => 213901)


--- trunk/Source/_javascript_Core/heap/MachineStackMarker.h	2017-03-14 16:16:46 UTC (rev 213900)
+++ trunk/Source/_javascript_Core/heap/MachineStackMarker.h	2017-03-14 16:59:37 UTC (rev 213901)
@@ -83,10 +83,11 @@
             
 #if OS(DARWIN) || OS(WINDOWS)
             using PlatformRegisters = MachineContext::PlatformRegisters;
+#elif (OS(FREEBSD) || defined(__GLIBC__)) && ENABLE(JIT)
+            using PlatformRegisters = mcontext_t;
 #elif USE(PTHREADS)
             struct PlatformRegisters {
                 pthread_attr_t attribute;
-                mcontext_t machineContext;
             };
 #else
 #error Need a thread register struct for this platform
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to