Skip to content

Commit 6ee64a3

Browse files
[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: git-svn-id: http://svn.webkit.org/repository/webkit/trunk@213901 268f45cc-cd09-0410-ab3c-d52691b4dbfc
1 parent 1baf6ed commit 6ee64a3

File tree

3 files changed

+29
-19
lines changed

3 files changed

+29
-19
lines changed

Source/JavaScriptCore/ChangeLog

+19
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,22 @@
1+
2017-03-14 Yusuke Suzuki <[email protected]>
2+
3+
[JSC] Drop unnecessary pthread_attr_t for JIT enabled Linux / FreeBSD environment
4+
https://bugs.webkit.org/show_bug.cgi?id=169592
5+
6+
Reviewed by Carlos Garcia Campos.
7+
8+
Since suspended mcontext_t has all the necessary information, we can drop
9+
pthread_attr_t allocation and destroy for JIT enabled Linux / FreeBSD environment.
10+
11+
* heap/MachineStackMarker.cpp:
12+
(JSC::MachineThreads::Thread::getRegisters):
13+
(JSC::MachineThreads::Thread::Registers::stackPointer):
14+
(JSC::MachineThreads::Thread::Registers::framePointer):
15+
(JSC::MachineThreads::Thread::Registers::instructionPointer):
16+
(JSC::MachineThreads::Thread::Registers::llintPC):
17+
(JSC::MachineThreads::Thread::freeRegisters):
18+
* heap/MachineStackMarker.h:
19+
120
2017-03-14 Zan Dobersek <[email protected]>
221

322
[GLib] Use USE(GLIB) guards in JavaScriptCore/inspector/EventLoop.cpp

Source/JavaScriptCore/heap/MachineStackMarker.cpp

+8-18
Original file line numberDiff line numberDiff line change
@@ -461,6 +461,9 @@ size_t MachineThreads::Thread::getRegisters(Thread::Registers& registers)
461461
regs.ContextFlags = CONTEXT_INTEGER | CONTEXT_CONTROL;
462462
GetThreadContext(platformThreadHandle, &regs);
463463
return sizeof(CONTEXT);
464+
#elif ((OS(FREEBSD) || defined(__GLIBC__)) && ENABLE(JIT))
465+
regs = suspendedMachineContext;
466+
return sizeof(Registers::PlatformRegisters);
464467
#elif USE(PTHREADS)
465468
pthread_attr_init(&regs.attribute);
466469
#if HAVE(PTHREAD_NP_H) || OS(NETBSD)
@@ -472,7 +475,6 @@ size_t MachineThreads::Thread::getRegisters(Thread::Registers& registers)
472475
// FIXME: this function is non-portable; other POSIX systems may have different np alternatives
473476
pthread_getattr_np(platformThread, &regs.attribute);
474477
#endif
475-
regs.machineContext = suspendedMachineContext;
476478
return 0;
477479
#else
478480
#error Need a way to get thread registers on this platform
@@ -481,13 +483,9 @@ size_t MachineThreads::Thread::getRegisters(Thread::Registers& registers)
481483

482484
void* MachineThreads::Thread::Registers::stackPointer() const
483485
{
484-
#if OS(DARWIN) || OS(WINDOWS)
486+
#if OS(DARWIN) || OS(WINDOWS) || ((OS(FREEBSD) || defined(__GLIBC__)) && ENABLE(JIT))
485487
return MachineContext::stackPointer(regs);
486488
#elif USE(PTHREADS)
487-
488-
#if (OS(FREEBSD) || defined(__GLIBC__)) && ENABLE(JIT)
489-
return MachineContext::stackPointer(regs.machineContext);
490-
#else
491489
void* stackBase = 0;
492490
size_t stackSize = 0;
493491
#if OS(OPENBSD)
@@ -501,8 +499,6 @@ void* MachineThreads::Thread::Registers::stackPointer() const
501499
(void)rc; // FIXME: Deal with error code somehow? Seems fatal.
502500
ASSERT(stackBase);
503501
return static_cast<char*>(stackBase) + stackSize;
504-
#endif
505-
506502
#else
507503
#error Need a way to get the stack pointer for another thread on this platform
508504
#endif
@@ -511,21 +507,17 @@ void* MachineThreads::Thread::Registers::stackPointer() const
511507
#if ENABLE(SAMPLING_PROFILER)
512508
void* MachineThreads::Thread::Registers::framePointer() const
513509
{
514-
#if OS(DARWIN) || OS(WINDOWS)
510+
#if OS(DARWIN) || OS(WINDOWS) || (OS(FREEBSD) || defined(__GLIBC__))
515511
return MachineContext::framePointer(regs);
516-
#elif OS(FREEBSD) || defined(__GLIBC__)
517-
return MachineContext::framePointer(regs.machineContext);
518512
#else
519513
#error Need a way to get the frame pointer for another thread on this platform
520514
#endif
521515
}
522516

523517
void* MachineThreads::Thread::Registers::instructionPointer() const
524518
{
525-
#if OS(DARWIN) || OS(WINDOWS)
519+
#if OS(DARWIN) || OS(WINDOWS) || (OS(FREEBSD) || defined(__GLIBC__))
526520
return MachineContext::instructionPointer(regs);
527-
#elif OS(FREEBSD) || defined(__GLIBC__)
528-
return MachineContext::instructionPointer(regs.machineContext);
529521
#else
530522
#error Need a way to get the instruction pointer for another thread on this platform
531523
#endif
@@ -534,10 +526,8 @@ void* MachineThreads::Thread::Registers::instructionPointer() const
534526
void* MachineThreads::Thread::Registers::llintPC() const
535527
{
536528
// LLInt uses regT4 as PC.
537-
#if OS(DARWIN) || OS(WINDOWS)
529+
#if OS(DARWIN) || OS(WINDOWS) || (OS(FREEBSD) || defined(__GLIBC__))
538530
return MachineContext::llintInstructionPointer(regs);
539-
#elif OS(FREEBSD) || defined(__GLIBC__)
540-
return MachineContext::llintInstructionPointer(regs.machineContext);
541531
#else
542532
#error Need a way to get the LLIntPC for another thread on this platform
543533
#endif
@@ -547,7 +537,7 @@ void* MachineThreads::Thread::Registers::llintPC() const
547537
void MachineThreads::Thread::freeRegisters(Thread::Registers& registers)
548538
{
549539
Thread::Registers::PlatformRegisters& regs = registers.regs;
550-
#if USE(PTHREADS) && !OS(WINDOWS) && !OS(DARWIN)
540+
#if USE(PTHREADS) && !OS(WINDOWS) && !OS(DARWIN) && !((OS(FREEBSD) || defined(__GLIBC__)) && ENABLE(JIT))
551541
pthread_attr_destroy(&regs.attribute);
552542
#else
553543
UNUSED_PARAM(regs);

Source/JavaScriptCore/heap/MachineStackMarker.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -83,10 +83,11 @@ class MachineThreads {
8383

8484
#if OS(DARWIN) || OS(WINDOWS)
8585
using PlatformRegisters = MachineContext::PlatformRegisters;
86+
#elif (OS(FREEBSD) || defined(__GLIBC__)) && ENABLE(JIT)
87+
using PlatformRegisters = mcontext_t;
8688
#elif USE(PTHREADS)
8789
struct PlatformRegisters {
8890
pthread_attr_t attribute;
89-
mcontext_t machineContext;
9091
};
9192
#else
9293
#error Need a thread register struct for this platform

0 commit comments

Comments
 (0)