Changeset 234649 in webkit
- Timestamp:
- Aug 7, 2018, 6:11:49 AM (7 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r234648 r234649 1 2018-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 1 21 2018-08-07 Karo Gyoker <karogyoker2+webkit@gmail.com> 2 22 -
trunk/Source/JavaScriptCore/runtime/JSCPtrTag.h
r231175 r234649 47 47 v(OperationPtrTag) \ 48 48 v(OSRExitPtrTag) \ 49 v(PlatformRegistersLRPtrTag) \ 50 v(PlatformRegistersPCPtrTag) \ 49 51 v(SlowPathPtrTag) \ 50 52 v(WasmEntryPtrTag) \ -
trunk/Source/JavaScriptCore/runtime/MachineContext.h
r234528 r234649 44 44 template<typename T = void*> T framePointer(const PlatformRegisters&); 45 45 template<typename T = void*> void setFramePointer(PlatformRegisters&, T); 46 inline MacroAssemblerCodePtr< CFunctionPtrTag> linkRegister(const PlatformRegisters&);46 inline MacroAssemblerCodePtr<PlatformRegistersLRPtrTag> linkRegister(const PlatformRegisters&); 47 47 inline void setLinkRegister(PlatformRegisters&, MacroAssemblerCodePtr<CFunctionPtrTag>); 48 inline std::optional<MacroAssemblerCodePtr< CFunctionPtrTag>> instructionPointer(const PlatformRegisters&);48 inline std::optional<MacroAssemblerCodePtr<PlatformRegistersPCPtrTag>> instructionPointer(const PlatformRegisters&); 49 49 inline void setInstructionPointer(PlatformRegisters&, MacroAssemblerCodePtr<CFunctionPtrTag>); 50 50 … … 68 68 template<typename T = void*> T framePointer(const mcontext_t&); 69 69 template<typename T = void*> void setFramePointer(mcontext_t&, T); 70 inline MacroAssemblerCodePtr< CFunctionPtrTag> instructionPointer(const mcontext_t&);70 inline MacroAssemblerCodePtr<PlatformRegistersPCPtrTag> instructionPointer(const mcontext_t&); 71 71 inline void setInstructionPointer(mcontext_t&, MacroAssemblerCodePtr<CFunctionPtrTag>); 72 72 … … 433 433 #endif // !USE(PLATFORM_REGISTERS_WITH_PROFILE) 434 434 435 inline std::optional<MacroAssemblerCodePtr< CFunctionPtrTag>> instructionPointer(const PlatformRegisters& regs)435 inline std::optional<MacroAssemblerCodePtr<PlatformRegistersPCPtrTag>> instructionPointer(const PlatformRegisters& regs) 436 436 { 437 437 #if USE(PLATFORM_REGISTERS_WITH_PROFILE) … … 441 441 #endif 442 442 if (!value) 443 return MacroAssemblerCodePtr< CFunctionPtrTag>(nullptr);443 return MacroAssemblerCodePtr<PlatformRegistersPCPtrTag>(nullptr); 444 444 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); 448 448 return std::nullopt; 449 449 } … … 506 506 #endif // !USE(PLATFORM_REGISTERS_WITH_PROFILE) 507 507 508 inline MacroAssemblerCodePtr< CFunctionPtrTag> instructionPointer(const mcontext_t& machineContext)508 inline MacroAssemblerCodePtr<PlatformRegistersPCPtrTag> instructionPointer(const mcontext_t& machineContext) 509 509 { 510 510 #if USE(PLATFORM_REGISTERS_WITH_PROFILE) … … 513 513 void* value = instructionPointerImpl(const_cast<mcontext_t&>(machineContext)); 514 514 #endif 515 return MacroAssemblerCodePtr< CFunctionPtrTag>(value);515 return MacroAssemblerCodePtr<PlatformRegistersPCPtrTag>(value); 516 516 } 517 517 … … 538 538 539 539 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);540 inline 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); 544 544 #else 545 545 void* value = linkRegisterImpl(const_cast<PlatformRegisters&>(regs)); 546 546 #endif 547 return MacroAssemblerCodePtr< CFunctionPtrTag>(value);547 return MacroAssemblerCodePtr<PlatformRegistersLRPtrTag>(value); 548 548 } 549 549 -
trunk/Source/JavaScriptCore/runtime/VMTraps.cpp
r234528 r234649 57 57 struct SignalContext { 58 58 private: 59 SignalContext(PlatformRegisters& registers, MacroAssemblerCodePtr< CFunctionPtrTag> trapPC)59 SignalContext(PlatformRegisters& registers, MacroAssemblerCodePtr<PlatformRegistersPCPtrTag> trapPC) 60 60 : registers(registers) 61 61 , trapPC(trapPC) … … 74 74 75 75 PlatformRegisters& registers; 76 MacroAssemblerCodePtr< CFunctionPtrTag> trapPC;76 MacroAssemblerCodePtr<PlatformRegistersPCPtrTag> trapPC; 77 77 void* stackPointer; 78 78 void* framePointer; -
trunk/Source/JavaScriptCore/tools/SigillCrashAnalyzer.cpp
r234528 r234649 80 80 struct SignalContext { 81 81 private: 82 SignalContext(PlatformRegisters& registers, MacroAssemblerCodePtr< CFunctionPtrTag> machinePC)82 SignalContext(PlatformRegisters& registers, MacroAssemblerCodePtr<PlatformRegistersPCPtrTag> machinePC) 83 83 : registers(registers) 84 84 , machinePC(machinePC) … … 149 149 150 150 PlatformRegisters& registers; 151 MacroAssemblerCodePtr< CFunctionPtrTag> machinePC;151 MacroAssemblerCodePtr<PlatformRegistersPCPtrTag> machinePC; 152 152 void* stackPointer; 153 153 void* framePointer; … … 182 182 void dump() { } 183 183 184 MacroAssemblerCodePtr< CFunctionPtrTag> machinePC;184 MacroAssemblerCodePtr<PlatformRegistersPCPtrTag> machinePC; 185 185 void* stackPointer; 186 186 void* framePointer;
Note:
See TracChangeset
for help on using the changeset viewer.