Changeset 255216 in webkit for trunk/Source/JavaScriptCore/runtime/MachineContext.h
- Timestamp:
- Jan 27, 2020, 5:30:41 PM (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/runtime/MachineContext.h
r255169 r255216 59 59 60 60 #if !USE(PLATFORM_REGISTERS_WITH_PROFILE) 61 62 #if !USE(DARWIN_REGISTER_MACROS) 61 63 static inline void*& stackPointerImpl(mcontext_t&); 64 static inline void*& instructionPointerImpl(mcontext_t&); 65 #endif // !USE(DARWIN_REGISTER_MACROS) 66 62 67 static inline void*& framePointerImpl(mcontext_t&); 63 static inline void*& instructionPointerImpl(mcontext_t&);64 68 #endif // !USE(PLATFORM_REGISTERS_WITH_PROFILE) 65 69 … … 82 86 #if OS(WINDOWS) || HAVE(MACHINE_CONTEXT) 83 87 84 #if !USE(PLATFORM_REGISTERS_WITH_PROFILE) 88 #if !USE(PLATFORM_REGISTERS_WITH_PROFILE) && !USE(DARWIN_REGISTER_MACROS) 85 89 static inline void*& stackPointerImpl(PlatformRegisters& regs) 86 90 { … … 94 98 #elif CPU(PPC) || CPU(PPC64) 95 99 return reinterpret_cast<void*&>(regs.__r1); 96 #elif CPU(ARM_THUMB2) || CPU(ARM) || CPU(ARM64)100 #elif CPU(ARM_THUMB2) || CPU(ARM) 97 101 return reinterpret_cast<void*&>(regs.__sp); 98 102 #else … … 141 145 assertIsNotTagged(value); 142 146 return bitwise_cast<T>(value); 147 #elif USE(DARWIN_REGISTER_MACROS) 148 return bitwise_cast<T>(reinterpret_cast<void*>(__darwin_arm_thread_state64_get_sp(regs))); 143 149 #else 144 150 return bitwise_cast<T>(stackPointerImpl(const_cast<PlatformRegisters&>(regs))); … … 152 158 assertIsNotTagged(bitwise_cast<void*>(value)); 153 159 WTF_WRITE_PLATFORM_REGISTERS_SP_WITH_PROFILE(regs, bitwise_cast<void*>(value)); 160 #elif USE(DARWIN_REGISTER_MACROS) 161 __darwin_arm_thread_state64_set_sp(regs, value); 154 162 #else 155 163 stackPointerImpl(regs) = bitwise_cast<void*>(value); … … 168 176 #if HAVE(MACHINE_CONTEXT) 169 177 170 #if !USE(PLATFORM_REGISTERS_WITH_PROFILE) 178 #if !USE(PLATFORM_REGISTERS_WITH_PROFILE) && !USE(DARWIN_REGISTER_MACROS) 171 179 static inline void*& stackPointerImpl(mcontext_t& machineContext) 172 180 { … … 215 223 assertIsNotTagged(value); 216 224 return bitwise_cast<T>(value); 225 #elif USE(DARWIN_REGISTER_MACROS) 226 return stackPointer(machineContext->__ss); 217 227 #else 218 228 return bitwise_cast<T>(stackPointerImpl(const_cast<mcontext_t&>(machineContext))); … … 226 236 assertIsNotTagged(bitwise_cast<void*>(value)); 227 237 WTF_WRITE_MACHINE_CONTEXT_SP_WITH_PROFILE(machineContext, bitwise_cast<void*>(value)); 238 #elif USE(DARWIN_REGISTER_MACROS) 239 return setStackPointer(machineContext->__ss, value); 228 240 #else 229 241 stackPointerImpl(machineContext) = bitwise_cast<void*>(value); … … 386 398 #if OS(WINDOWS) || HAVE(MACHINE_CONTEXT) 387 399 388 #if !USE(PLATFORM_REGISTERS_WITH_PROFILE) 400 #if !USE(PLATFORM_REGISTERS_WITH_PROFILE) && !USE(DARWIN_REGISTER_MACROS) 389 401 static inline void*& instructionPointerImpl(PlatformRegisters& regs) 390 402 { … … 396 408 #elif CPU(X86_64) 397 409 return reinterpret_cast<void*&>(regs.__rip); 398 #elif CPU(ARM_THUMB2) || CPU(ARM) || CPU(ARM64)410 #elif CPU(ARM_THUMB2) || CPU(ARM) 399 411 return reinterpret_cast<void*&>(regs.__pc); 400 412 #else … … 437 449 #if USE(PLATFORM_REGISTERS_WITH_PROFILE) 438 450 void* value = WTF_READ_PLATFORM_REGISTERS_PC_WITH_PROFILE(regs); 451 #elif USE(DARWIN_REGISTER_MACROS) 452 void* value = __darwin_arm_thread_state64_get_pc_fptr(regs); 439 453 #else 440 454 void* value = instructionPointerImpl(const_cast<PlatformRegisters&>(regs)); … … 453 467 #if USE(PLATFORM_REGISTERS_WITH_PROFILE) 454 468 WTF_WRITE_PLATFORM_REGISTERS_PC_WITH_PROFILE(regs, value.executableAddress()); 469 #elif USE(DARWIN_REGISTER_MACROS) 470 __darwin_arm_thread_state64_set_pc_fptr(regs, value.executableAddress()); 455 471 #else 456 472 instructionPointerImpl(regs) = value.executableAddress(); … … 462 478 #if HAVE(MACHINE_CONTEXT) 463 479 464 #if !USE(PLATFORM_REGISTERS_WITH_PROFILE) 480 #if !USE(PLATFORM_REGISTERS_WITH_PROFILE) && !USE(DARWIN_REGISTER_MACROS) 465 481 static inline void*& instructionPointerImpl(mcontext_t& machineContext) 466 482 { … … 508 524 inline MacroAssemblerCodePtr<PlatformRegistersPCPtrTag> instructionPointer(const mcontext_t& machineContext) 509 525 { 526 #if USE(DARWIN_REGISTER_MACROS) 527 return *instructionPointer(machineContext->__ss); 528 #else 529 510 530 #if USE(PLATFORM_REGISTERS_WITH_PROFILE) 511 531 void* value = WTF_READ_MACHINE_CONTEXT_PC_WITH_PROFILE(machineContext); … … 513 533 void* value = instructionPointerImpl(const_cast<mcontext_t&>(machineContext)); 514 534 #endif 535 515 536 return MacroAssemblerCodePtr<PlatformRegistersPCPtrTag>(value); 537 #endif 516 538 } 517 539 … … 520 542 #if USE(PLATFORM_REGISTERS_WITH_PROFILE) 521 543 WTF_WRITE_MACHINE_CONTEXT_PC_WITH_PROFILE(machineContext, value.executableAddress()); 544 #elif USE(DARWIN_REGISTER_MACROS) 545 setInstructionPointer(machineContext->__ss, value); 522 546 #else 523 547 instructionPointerImpl(machineContext) = value.executableAddress(); … … 530 554 531 555 #if OS(DARWIN) && __DARWIN_UNIX03 && CPU(ARM64) 532 #if !USE(PLATFORM_REGISTERS_WITH_PROFILE)533 inline void*& linkRegisterImpl(PlatformRegisters& regs)534 {535 return reinterpret_cast<void*&>(regs.__lr);536 }537 #endif // USE(PLATFORM_REGISTERS_WITH_PROFILE)538 539 556 540 557 inline MacroAssemblerCodePtr<PlatformRegistersLRPtrTag> linkRegister(const PlatformRegisters& regs) … … 543 560 void* value = WTF_READ_PLATFORM_REGISTERS_LR_WITH_PROFILE(regs); 544 561 #else 545 void* value = linkRegisterImpl(const_cast<PlatformRegisters&>(regs));562 void* value = __darwin_arm_thread_state64_get_lr_fptr(regs); 546 563 #endif 547 564 return MacroAssemblerCodePtr<PlatformRegistersLRPtrTag>(value); … … 553 570 WTF_WRITE_PLATFORM_REGISTERS_PC_WITH_PROFILE(regs, value.executableAddress()); 554 571 #else 555 linkRegisterImpl(regs) = value.executableAddress();572 __darwin_arm_thread_state64_set_lr_fptr(regs, value.executableAddress()); 556 573 #endif 557 574 }
Note:
See TracChangeset
for help on using the changeset viewer.