1/* 2 * Copyright (C) 2013 Apple Inc. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 1. Redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer. 9 * 2. Redistributions in binary form must reproduce the above copyright 10 * notice, this list of conditions and the following disclaimer in the 11 * documentation and/or other materials provided with the distribution. 12 * 13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY 14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR 17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 */ 25 26#ifndef FTLJITCode_h 27#define FTLJITCode_h 28 29#if ENABLE(FTL_JIT) 30 31#include "DFGCommonData.h" 32#include "FTLDataSection.h" 33#include "FTLOSRExit.h" 34#include "FTLStackMaps.h" 35#include "FTLUnwindInfo.h" 36#include "JITCode.h" 37#include "LLVMAPI.h" 38#include <wtf/RefCountedArray.h> 39 40namespace JSC { namespace FTL { 41 42class JITCode : public JSC::JITCode { 43public: 44 JITCode(); 45 ~JITCode(); 46 47 CodePtr addressForCall(VM&, ExecutableBase*, ArityCheckMode, RegisterPreservationMode) override; 48 void* executableAddressAtOffset(size_t offset) override; 49 void* dataAddressAtOffset(size_t offset) override; 50 unsigned offsetOf(void* pointerIntoCode) override; 51 size_t size() override; 52 bool contains(void*) override; 53 54 void initializeExitThunks(CodeRef); 55 void addHandle(PassRefPtr<ExecutableMemoryHandle>); 56 void addDataSection(PassRefPtr<DataSection>); 57 void initializeArityCheckEntrypoint(CodeRef); 58 void initializeAddressForCall(CodePtr); 59 60 const Vector<RefPtr<ExecutableMemoryHandle>>& handles() const { return m_handles; } 61 const Vector<RefPtr<DataSection>>& dataSections() const { return m_dataSections; } 62 63 CodePtr exitThunks(); 64 65 JITCode* ftl(); 66 DFG::CommonData* dfgCommon(); 67 68 DFG::CommonData common; 69 SegmentedVector<OSRExit, 8> osrExit; 70 StackMaps stackmaps; 71 UnwindInfo unwindInfo; 72 73private: 74 Vector<RefPtr<DataSection>> m_dataSections; 75 Vector<RefPtr<ExecutableMemoryHandle>> m_handles; 76 CodePtr m_addressForCall; 77 CodeRef m_arityCheckEntrypoint; 78 CodeRef m_exitThunks; 79}; 80 81} } // namespace JSC::FTL 82 83#endif // ENABLE(FLT_JIT) 84 85#endif // FTLJITCode_h 86 87