Changeset 234649 in webkit


Ignore:
Timestamp:
Aug 7, 2018 6:11:49 AM (6 years ago)
Author:
mark.lam@apple.com
Message:

Use a more specific PtrTag for PlatformRegisters PC and LR.
https://bugs.webkit.org/show_bug.cgi?id=188366
<rdar://problem/42984123>

Reviewed by Keith Miller.

Also fixed a bug in linkRegister(), which was previously returning the PC instead
of LR. It now returns LR.

  • runtime/JSCPtrTag.h:
  • runtime/MachineContext.h:

(JSC::MachineContext::instructionPointer):
(JSC::MachineContext::linkRegister):

  • runtime/VMTraps.cpp:

(JSC::SignalContext::SignalContext):

  • tools/SigillCrashAnalyzer.cpp:

(JSC::SignalContext::SignalContext):

Location:
trunk/Source/JavaScriptCore
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/ChangeLog

    r234648 r234649  
     12018-08-07  Mark Lam  <mark.lam@apple.com>
     2
     3        Use a more specific PtrTag for PlatformRegisters PC and LR.
     4        https://bugs.webkit.org/show_bug.cgi?id=188366
     5        <rdar://problem/42984123>
     6
     7        Reviewed by Keith Miller.
     8
     9        Also fixed a bug in linkRegister(), which was previously returning the PC instead
     10        of LR.  It now returns LR.
     11
     12        * runtime/JSCPtrTag.h:
     13        * runtime/MachineContext.h:
     14        (JSC::MachineContext::instructionPointer):
     15        (JSC::MachineContext::linkRegister):
     16        * runtime/VMTraps.cpp:
     17        (JSC::SignalContext::SignalContext):
     18        * tools/SigillCrashAnalyzer.cpp:
     19        (JSC::SignalContext::SignalContext):
     20
    1212018-08-07  Karo Gyoker  <karogyoker2+webkit@gmail.com>
    222
  • trunk/Source/JavaScriptCore/runtime/JSCPtrTag.h

    r231175 r234649  
    4747    v(OperationPtrTag) \
    4848    v(OSRExitPtrTag) \
     49    v(PlatformRegistersLRPtrTag) \
     50    v(PlatformRegistersPCPtrTag) \
    4951    v(SlowPathPtrTag) \
    5052    v(WasmEntryPtrTag) \
  • trunk/Source/JavaScriptCore/runtime/MachineContext.h

    r234528 r234649  
    4444template<typename T = void*> T framePointer(const PlatformRegisters&);
    4545template<typename T = void*> void setFramePointer(PlatformRegisters&, T);
    46 inline MacroAssemblerCodePtr<CFunctionPtrTag> linkRegister(const PlatformRegisters&);
     46inline MacroAssemblerCodePtr<PlatformRegistersLRPtrTag> linkRegister(const PlatformRegisters&);
    4747inline void setLinkRegister(PlatformRegisters&, MacroAssemblerCodePtr<CFunctionPtrTag>);
    48 inline std::optional<MacroAssemblerCodePtr<CFunctionPtrTag>> instructionPointer(const PlatformRegisters&);
     48inline std::optional<MacroAssemblerCodePtr<PlatformRegistersPCPtrTag>> instructionPointer(const PlatformRegisters&);
    4949inline void setInstructionPointer(PlatformRegisters&, MacroAssemblerCodePtr<CFunctionPtrTag>);
    5050
     
    6868template<typename T = void*> T framePointer(const mcontext_t&);
    6969template<typename T = void*> void setFramePointer(mcontext_t&, T);
    70 inline MacroAssemblerCodePtr<CFunctionPtrTag> instructionPointer(const mcontext_t&);
     70inline MacroAssemblerCodePtr<PlatformRegistersPCPtrTag> instructionPointer(const mcontext_t&);
    7171inline void setInstructionPointer(mcontext_t&, MacroAssemblerCodePtr<CFunctionPtrTag>);
    7272
     
    433433#endif // !USE(PLATFORM_REGISTERS_WITH_PROFILE)
    434434
    435 inline std::optional<MacroAssemblerCodePtr<CFunctionPtrTag>> instructionPointer(const PlatformRegisters& regs)
     435inline std::optional<MacroAssemblerCodePtr<PlatformRegistersPCPtrTag>> instructionPointer(const PlatformRegisters& regs)
    436436{
    437437#if USE(PLATFORM_REGISTERS_WITH_PROFILE)
     
    441441#endif
    442442    if (!value)
    443         return MacroAssemblerCodePtr<CFunctionPtrTag>(nullptr);
     443        return MacroAssemblerCodePtr<PlatformRegistersPCPtrTag>(nullptr);
    444444    if (!usesPointerTagging())
    445         return MacroAssemblerCodePtr<CFunctionPtrTag>(value);
    446     if (isTaggedWith(value, CFunctionPtrTag))
    447         return MacroAssemblerCodePtr<CFunctionPtrTag>(value);
     445        return MacroAssemblerCodePtr<PlatformRegistersPCPtrTag>(value);
     446    if (isTaggedWith(value, PlatformRegistersPCPtrTag))
     447        return MacroAssemblerCodePtr<PlatformRegistersPCPtrTag>(value);
    448448    return std::nullopt;
    449449}
     
    506506#endif // !USE(PLATFORM_REGISTERS_WITH_PROFILE)
    507507
    508 inline MacroAssemblerCodePtr<CFunctionPtrTag> instructionPointer(const mcontext_t& machineContext)
     508inline MacroAssemblerCodePtr<PlatformRegistersPCPtrTag> instructionPointer(const mcontext_t& machineContext)
    509509{
    510510#if USE(PLATFORM_REGISTERS_WITH_PROFILE)
     
    513513    void* value = instructionPointerImpl(const_cast<mcontext_t&>(machineContext));
    514514#endif
    515     return MacroAssemblerCodePtr<CFunctionPtrTag>(value);
     515    return MacroAssemblerCodePtr<PlatformRegistersPCPtrTag>(value);
    516516}
    517517
     
    538538
    539539
    540 inline MacroAssemblerCodePtr<CFunctionPtrTag> linkRegister(const PlatformRegisters& regs)
    541 {
    542 #if USE(PLATFORM_REGISTERS_WITH_PROFILE)
    543     void* value = WTF_READ_PLATFORM_REGISTERS_PC_WITH_PROFILE(regs);
     540inline MacroAssemblerCodePtr<PlatformRegistersLRPtrTag> linkRegister(const PlatformRegisters& regs)
     541{
     542#if USE(PLATFORM_REGISTERS_WITH_PROFILE)
     543    void* value = WTF_READ_PLATFORM_REGISTERS_LR_WITH_PROFILE(regs);
    544544#else
    545545    void* value = linkRegisterImpl(const_cast<PlatformRegisters&>(regs));
    546546#endif
    547     return MacroAssemblerCodePtr<CFunctionPtrTag>(value);
     547    return MacroAssemblerCodePtr<PlatformRegistersLRPtrTag>(value);
    548548}
    549549
  • trunk/Source/JavaScriptCore/runtime/VMTraps.cpp

    r234528 r234649  
    5757struct SignalContext {
    5858private:
    59     SignalContext(PlatformRegisters& registers, MacroAssemblerCodePtr<CFunctionPtrTag> trapPC)
     59    SignalContext(PlatformRegisters& registers, MacroAssemblerCodePtr<PlatformRegistersPCPtrTag> trapPC)
    6060        : registers(registers)
    6161        , trapPC(trapPC)
     
    7474
    7575    PlatformRegisters& registers;
    76     MacroAssemblerCodePtr<CFunctionPtrTag> trapPC;
     76    MacroAssemblerCodePtr<PlatformRegistersPCPtrTag> trapPC;
    7777    void* stackPointer;
    7878    void* framePointer;
  • trunk/Source/JavaScriptCore/tools/SigillCrashAnalyzer.cpp

    r234528 r234649  
    8080struct SignalContext {
    8181private:
    82     SignalContext(PlatformRegisters& registers, MacroAssemblerCodePtr<CFunctionPtrTag> machinePC)
     82    SignalContext(PlatformRegisters& registers, MacroAssemblerCodePtr<PlatformRegistersPCPtrTag> machinePC)
    8383        : registers(registers)
    8484        , machinePC(machinePC)
     
    149149
    150150    PlatformRegisters& registers;
    151     MacroAssemblerCodePtr<CFunctionPtrTag> machinePC;
     151    MacroAssemblerCodePtr<PlatformRegistersPCPtrTag> machinePC;
    152152    void* stackPointer;
    153153    void* framePointer;
     
    182182    void dump() { }
    183183
    184     MacroAssemblerCodePtr<CFunctionPtrTag> machinePC;
     184    MacroAssemblerCodePtr<PlatformRegistersPCPtrTag> machinePC;
    185185    void* stackPointer;
    186186    void* framePointer;
Note: See TracChangeset for help on using the changeset viewer.