Ignore:
Timestamp:
Jun 11, 2017, 5:47:18 PM (8 years ago)
Author:
Yusuke Suzuki
Message:

[WTF] Make ThreadMessage portable
https://bugs.webkit.org/show_bug.cgi?id=172073

Reviewed by Keith Miller.

Source/JavaScriptCore:

  • runtime/MachineContext.h:

(JSC::MachineContext::stackPointer):

  • tools/CodeProfiling.cpp:

(JSC::profilingTimer):

Source/WTF:

Recently, we change ThreadMessage semantics: message handler
can be executed in the sender thread.
This allows ThreadMessage to be implemented in a portable way.

This patch implements ThreadMessage for all the platforms.
We use platform-independent Thread APIs, suspend(), resume(),
and getRegisters().

  • wtf/PlatformRegisters.h:

(WTF::registersFromUContext):

  • wtf/ThreadMessage.cpp:

(WTF::sendMessageScoped):
(WTF::ThreadMessageData::ThreadMessageData): Deleted.
(): Deleted.
(WTF::initializeThreadMessages): Deleted.
(WTF::sendMessageUsingSignal): Deleted.
(WTF::sendMessageUsingMach): Deleted.
(WTF::deliverMessagesUsingMach): Deleted.

  • wtf/ThreadMessage.h:
  • wtf/Threading.cpp:

(WTF::initializeThreading):

  • wtf/Threading.h:

(WTF::Thread::threadMessages): Deleted.

  • wtf/ThreadingPthreads.cpp:

(WTF::Thread::signalHandlerSuspendResume):
(WTF::threadStateMetadata):
(WTF::Thread::getRegisters):

  • wtf/threads/Signals.cpp:

(WTF::handleSignalsWithMach):

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/runtime/MachineContext.h

    r215270 r218080  
    3434namespace MachineContext {
    3535
    36 
     36void* stackPointer(const PlatformRegisters&);
     37
     38#if OS(WINDOWS) || HAVE(MACHINE_CONTEXT)
    3739void*& stackPointer(PlatformRegisters&);
    38 void* stackPointer(const PlatformRegisters&);
    39 
    40 #if OS(WINDOWS) || HAVE(MACHINE_CONTEXT)
    4140void*& framePointer(PlatformRegisters&);
    4241void* framePointer(const PlatformRegisters&);
     
    6564#endif // OS(WINDOWS) || HAVE(MACHINE_CONTEXT)
    6665
     66#if OS(WINDOWS) || HAVE(MACHINE_CONTEXT)
    6767inline void*& stackPointer(PlatformRegisters& regs)
    6868{
     
    112112#elif HAVE(MACHINE_CONTEXT)
    113113    return stackPointer(regs.machineContext);
    114 #else
     114#endif
     115}
     116
     117inline void* stackPointer(const PlatformRegisters& regs)
     118{
     119    return stackPointer(const_cast<PlatformRegisters&>(regs));
     120}
     121#else // not OS(WINDOWS) || HAVE(MACHINE_CONTEXT)
     122inline void* stackPointer(const PlatformRegisters& regs)
     123{
    115124    return regs.stackPointer;
    116 #endif
    117 }
    118 
    119 inline void* stackPointer(const PlatformRegisters& regs)
    120 {
    121     return stackPointer(const_cast<PlatformRegisters&>(regs));
    122 }
    123 
     125}
     126#endif // OS(WINDOWS) || HAVE(MACHINE_CONTEXT)
    124127
    125128#if HAVE(MACHINE_CONTEXT)
Note: See TracChangeset for help on using the changeset viewer.