Ignore:
Timestamp:
Jul 24, 2013, 9:01:38 PM (12 years ago)
Author:
[email protected]
Message:

fourthTier: Misc JIT probe enhacements.
https://bugs.webkit.org/show_bug.cgi?id=116586.

Reviewed by Michael Saboff.

  1. Added JIT probe support for ARMv7 and traditional ARM. Built and tested on ARMv7. ARM version not tested nor built.
  2. Fix the following bugs in the X86 and X86_64 probes:
    1. Cannot assume that the stack pointer is already aligned when we push args for the probe. Instead, we ensure the stack alignment at runtime when we set up the probe call. This is now done in the ctiMasmProbeTrampoline.
    2. On return, the user probe function may have altered the stack pointer value to be restored. Previously, if the sp restore value points to some of the other register restore values in the ProbeContext record, we will fail to return from the probe having those user specified value as we're expected to do. This is now fixed.
  3. Rearranged the X86/X86_64 registers order to organize them like gdb expects on X86_64.
  4. We also now preserve the condition code registers.
  • JavaScriptCore.xcodeproj/project.pbxproj:
  • assembler/ARMAssembler.h:
  • assembler/ARMv7Assembler.h:

(ARMRegisters):

  • assembler/MacroAssemblerARM.cpp:

(JSC::isVFPPresent):
(JSC::MacroAssemblerARM::ProbeContext::dumpCPURegisters):
(JSC::MacroAssemblerARM::ProbeContext::dump):
(JSC::MacroAssemblerARM::probe):

  • assembler/MacroAssemblerARM.h:

(MacroAssemblerARM):
(CPUState):
(ProbeContext):
(JSC::MacroAssemblerARM::trustedImm32FromPtr):

  • assembler/MacroAssemblerARMv7.h:

(MacroAssemblerARMv7):
(CPUState):
(ProbeContext):
(JSC::MacroAssemblerARMv7::trustedImm32FromPtr):

  • assembler/MacroAssemblerX86.h:

(MacroAssemblerX86):
(JSC::MacroAssemblerX86::probe):

  • assembler/MacroAssemblerX86Common.cpp:

(JSC::MacroAssemblerX86Common::ProbeContext::dumpCPURegisters):

  • assembler/MacroAssemblerX86_64.h:

(JSC::MacroAssemblerX86_64::probe):

  • assembler/X86Assembler.h:
  • config.h:
  • jit/JITStubsARM.h:
  • jit/JITStubsARMv7.h:
  • jit/JITStubsX86.h:
  • jit/JITStubsX86Common.h:
  • jit/JITStubsX86_64.h:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/assembler/MacroAssemblerARMv7.h

    r149395 r153197  
    3535namespace JSC {
    3636
     37struct JITStackFrame;
     38
    3739class MacroAssemblerARMv7 : public AbstractMacroAssembler<ARMv7Assembler> {
    3840    // FIXME: switch dataTempRegister & addressTempRegister, or possibly use r7?
     
    17971799    }
    17981800
     1801#if USE(MASM_PROBE)
     1802    struct CPUState {
     1803        #define DECLARE_REGISTER(_type, _regName) \
     1804            _type _regName;
     1805        FOR_EACH_CPU_REGISTER(DECLARE_REGISTER)
     1806        #undef DECLARE_REGISTER
     1807    };
     1808
     1809    struct ProbeContext;
     1810    typedef void (*ProbeFunction)(struct ProbeContext*);
     1811
     1812    struct ProbeContext {
     1813        ProbeFunction probeFunction;
     1814        void* arg1;
     1815        void* arg2;
     1816        JITStackFrame* jitStackFrame;
     1817        CPUState cpu;
     1818
     1819        void dump(const char* indentation = 0);
     1820    private:
     1821        void dumpCPURegisters(const char* indentation);
     1822    };
     1823
     1824    // For details about probe(), see comment in MacroAssemblerX86_64.h.
     1825    void probe(ProbeFunction, void* arg1 = 0, void* arg2 = 0);
     1826#endif // USE(MASM_PROBE)
     1827
    17991828protected:
    18001829    ALWAYS_INLINE Jump jump()
     
    19071936    }
    19081937
     1938#if USE(MASM_PROBE)
     1939    inline TrustedImm32 trustedImm32FromPtr(void* ptr)
     1940    {
     1941        return TrustedImm32(TrustedImmPtr(ptr));
     1942    }
     1943
     1944    inline TrustedImm32 trustedImm32FromPtr(ProbeFunction function)
     1945    {
     1946        return TrustedImm32(TrustedImmPtr(reinterpret_cast<void*>(function)));
     1947    }
     1948
     1949    inline TrustedImm32 trustedImm32FromPtr(void (*function)())
     1950    {
     1951        return TrustedImm32(TrustedImmPtr(reinterpret_cast<void*>(function)));
     1952    }
     1953#endif
     1954
    19091955    bool m_makeJumpPatchable;
    19101956};
Note: See TracChangeset for help on using the changeset viewer.