Ignore:
Timestamp:
Jan 27, 2020, 5:30:41 PM (6 years ago)
Author:
Jonathan Bedard
Message:

Fix OpenSource iphoneos arm64e build
https://bugs.webkit.org/show_bug.cgi?id=206703

Reviewed by Yusuke Suzuki.

Source/JavaScriptCore:

  • runtime/MachineContext.h:

(JSC::MachineContext::stackPointerImpl): Conditionalize function existence on
USE(DARWIN_REGISTER_MACROS).
(JSC::MachineContext::stackPointer): Use Darwin's register macros if available.
(JSC::MachineContext::setStackPointer): Ditto.
(JSC::MachineContext::instructionPointerImpl): Conditionalize function existence
on USE(DARWIN_REGISTER_MACROS).
(JSC::MachineContext::instructionPointer): Use Darwin's register macros if available.
(JSC::MachineContext::setInstructionPointer): Ditto.
(JSC::MachineContext::linkRegister): Ditto.
(JSC::MachineContext::setLinkRegister): Ditto.
(JSC::MachineContext::linkRegisterImpl): Deleted.

Source/WTF:

  • wtf/PlatformUse.h: Add USE(DARWIN_REGISTER_MACROS) check.
File:
1 edited

Legend:

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

    r255169 r255216  
    5959
    6060#if !USE(PLATFORM_REGISTERS_WITH_PROFILE)
     61
     62#if !USE(DARWIN_REGISTER_MACROS)
    6163static inline void*& stackPointerImpl(mcontext_t&);
     64static inline void*& instructionPointerImpl(mcontext_t&);
     65#endif // !USE(DARWIN_REGISTER_MACROS)
     66
    6267static inline void*& framePointerImpl(mcontext_t&);
    63 static inline void*& instructionPointerImpl(mcontext_t&);
    6468#endif // !USE(PLATFORM_REGISTERS_WITH_PROFILE)
    6569
     
    8286#if OS(WINDOWS) || HAVE(MACHINE_CONTEXT)
    8387
    84 #if !USE(PLATFORM_REGISTERS_WITH_PROFILE)
     88#if !USE(PLATFORM_REGISTERS_WITH_PROFILE) && !USE(DARWIN_REGISTER_MACROS)
    8589static inline void*& stackPointerImpl(PlatformRegisters& regs)
    8690{
     
    9498#elif CPU(PPC) || CPU(PPC64)
    9599    return reinterpret_cast<void*&>(regs.__r1);
    96 #elif CPU(ARM_THUMB2) || CPU(ARM) || CPU(ARM64)
     100#elif CPU(ARM_THUMB2) || CPU(ARM)
    97101    return reinterpret_cast<void*&>(regs.__sp);
    98102#else
     
    141145    assertIsNotTagged(value);
    142146    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)));
    143149#else
    144150    return bitwise_cast<T>(stackPointerImpl(const_cast<PlatformRegisters&>(regs)));
     
    152158    assertIsNotTagged(bitwise_cast<void*>(value));
    153159    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);
    154162#else
    155163    stackPointerImpl(regs) = bitwise_cast<void*>(value);
     
    168176#if HAVE(MACHINE_CONTEXT)
    169177
    170 #if !USE(PLATFORM_REGISTERS_WITH_PROFILE)
     178#if !USE(PLATFORM_REGISTERS_WITH_PROFILE) && !USE(DARWIN_REGISTER_MACROS)
    171179static inline void*& stackPointerImpl(mcontext_t& machineContext)
    172180{
     
    215223    assertIsNotTagged(value);
    216224    return bitwise_cast<T>(value);
     225#elif USE(DARWIN_REGISTER_MACROS)
     226    return stackPointer(machineContext->__ss);
    217227#else
    218228    return bitwise_cast<T>(stackPointerImpl(const_cast<mcontext_t&>(machineContext)));
     
    226236    assertIsNotTagged(bitwise_cast<void*>(value));
    227237    WTF_WRITE_MACHINE_CONTEXT_SP_WITH_PROFILE(machineContext, bitwise_cast<void*>(value));
     238#elif USE(DARWIN_REGISTER_MACROS)
     239    return setStackPointer(machineContext->__ss, value);
    228240#else
    229241    stackPointerImpl(machineContext) = bitwise_cast<void*>(value);
     
    386398#if OS(WINDOWS) || HAVE(MACHINE_CONTEXT)
    387399
    388 #if !USE(PLATFORM_REGISTERS_WITH_PROFILE)
     400#if !USE(PLATFORM_REGISTERS_WITH_PROFILE) && !USE(DARWIN_REGISTER_MACROS)
    389401static inline void*& instructionPointerImpl(PlatformRegisters& regs)
    390402{
     
    396408#elif CPU(X86_64)
    397409    return reinterpret_cast<void*&>(regs.__rip);
    398 #elif CPU(ARM_THUMB2) || CPU(ARM) || CPU(ARM64)
     410#elif CPU(ARM_THUMB2) || CPU(ARM)
    399411    return reinterpret_cast<void*&>(regs.__pc);
    400412#else
     
    437449#if USE(PLATFORM_REGISTERS_WITH_PROFILE)
    438450    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);
    439453#else
    440454    void* value = instructionPointerImpl(const_cast<PlatformRegisters&>(regs));
     
    453467#if USE(PLATFORM_REGISTERS_WITH_PROFILE)
    454468    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());
    455471#else
    456472    instructionPointerImpl(regs) = value.executableAddress();
     
    462478#if HAVE(MACHINE_CONTEXT)
    463479
    464 #if !USE(PLATFORM_REGISTERS_WITH_PROFILE)
     480#if !USE(PLATFORM_REGISTERS_WITH_PROFILE) && !USE(DARWIN_REGISTER_MACROS)
    465481static inline void*& instructionPointerImpl(mcontext_t& machineContext)
    466482{
     
    508524inline MacroAssemblerCodePtr<PlatformRegistersPCPtrTag> instructionPointer(const mcontext_t& machineContext)
    509525{
     526#if USE(DARWIN_REGISTER_MACROS)
     527    return *instructionPointer(machineContext->__ss);
     528#else
     529
    510530#if USE(PLATFORM_REGISTERS_WITH_PROFILE)
    511531    void* value = WTF_READ_MACHINE_CONTEXT_PC_WITH_PROFILE(machineContext);
     
    513533    void* value = instructionPointerImpl(const_cast<mcontext_t&>(machineContext));
    514534#endif
     535
    515536    return MacroAssemblerCodePtr<PlatformRegistersPCPtrTag>(value);
     537#endif
    516538}
    517539
     
    520542#if USE(PLATFORM_REGISTERS_WITH_PROFILE)
    521543    WTF_WRITE_MACHINE_CONTEXT_PC_WITH_PROFILE(machineContext, value.executableAddress());
     544#elif USE(DARWIN_REGISTER_MACROS)
     545    setInstructionPointer(machineContext->__ss, value);
    522546#else
    523547    instructionPointerImpl(machineContext) = value.executableAddress();
     
    530554
    531555#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 
    539556
    540557inline MacroAssemblerCodePtr<PlatformRegistersLRPtrTag> linkRegister(const PlatformRegisters& regs)
     
    543560    void* value = WTF_READ_PLATFORM_REGISTERS_LR_WITH_PROFILE(regs);
    544561#else
    545     void* value = linkRegisterImpl(const_cast<PlatformRegisters&>(regs));
     562    void* value = __darwin_arm_thread_state64_get_lr_fptr(regs);
    546563#endif
    547564    return MacroAssemblerCodePtr<PlatformRegistersLRPtrTag>(value);
     
    553570    WTF_WRITE_PLATFORM_REGISTERS_PC_WITH_PROFILE(regs, value.executableAddress());
    554571#else
    555     linkRegisterImpl(regs) = value.executableAddress();
     572    __darwin_arm_thread_state64_set_lr_fptr(regs, value.executableAddress());
    556573#endif
    557574}
Note: See TracChangeset for help on using the changeset viewer.