Ignore:
Timestamp:
Jun 23, 2011, 3:47:04 PM (14 years ago)
Author:
[email protected]
Message:

2011-06-23 Oliver Hunt <[email protected]>

Reviewed by Gavin Barraclough.

Add the ability to dynamically modify linked call sites
https://bugs.webkit.org/show_bug.cgi?id=63291

Add JITWriteBarrier as a writebarrier class that allows
reading and writing directly into the code stream.

This required adding logic to all the assemblers to allow
us to read values back out of the instruction stream.

  • JavaScriptCore.xcodeproj/project.pbxproj:
  • assembler/ARMAssembler.h: (JSC::ARMAssembler::readPointer):
  • assembler/ARMv7Assembler.h: (JSC::ARMv7Assembler::readPointer): (JSC::ARMv7Assembler::readInt32): (JSC::ARMv7Assembler::decodeTwoWordOp5i6Imm4Reg4EncodedImmFirst): (JSC::ARMv7Assembler::decodeTwoWordOp5i6Imm4Reg4EncodedImmSecond):
  • assembler/AbstractMacroAssembler.h: (JSC::AbstractMacroAssembler::readPointer):
  • assembler/MIPSAssembler.h: (JSC::MIPSAssembler::readInt32): (JSC::MIPSAssembler::readPointer):
  • assembler/MacroAssemblerCodeRef.h: (JSC::MacroAssemblerCodePtr::operator!):
  • assembler/SH4Assembler.h: (JSC::SH4Assembler::readPCrelativeAddress): (JSC::SH4Assembler::readPointer): (JSC::SH4Assembler::readInt32):
  • assembler/X86Assembler.h: (JSC::X86Assembler::readPointer):
  • bytecode/CodeBlock.cpp: (JSC::CodeBlock::visitAggregate):
  • bytecode/CodeBlock.h: (JSC::MethodCallLinkInfo::seenOnce): (JSC::MethodCallLinkInfo::setSeen):
  • heap/MarkStack.h:
  • jit/JIT.cpp: (JSC::JIT::privateCompile): (JSC::JIT::linkCall): (JSC::JIT::linkConstruct):
  • jit/JITPropertyAccess.cpp: (JSC::JIT::patchMethodCallProto):
  • jit/JITPropertyAccess32_64.cpp:
  • jit/JITWriteBarrier.h: Added. (JSC::JITWriteBarrierBase::operator UnspecifiedBoolType*): (JSC::JITWriteBarrierBase::operator!): (JSC::JITWriteBarrierBase::setFlagOnBarrier): (JSC::JITWriteBarrierBase::isFlagged): (JSC::JITWriteBarrierBase::setLocation): (JSC::JITWriteBarrierBase::location): (JSC::JITWriteBarrierBase::JITWriteBarrierBase): (JSC::JITWriteBarrierBase::set): (JSC::JITWriteBarrierBase::get): (JSC::JITWriteBarrier::JITWriteBarrier): (JSC::JITWriteBarrier::set): (JSC::JITWriteBarrier::get): (JSC::MarkStack::append):
File:
1 edited

Legend:

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

    r87527 r89630  
    12331233        *reinterpret_cast<uint32_t*>(address) = newAddress;
    12341234    }
     1235   
     1236    static uint32_t readPCrelativeAddress(int offset, uint16_t* instructionPtr)
     1237    {
     1238        uint32_t address = (offset << 2) + ((reinterpret_cast<uint32_t>(instructionPtr) + 4) &(~0x3));
     1239        return *reinterpret_cast<uint32_t*>(address);
     1240    }
    12351241
    12361242    static uint16_t* getInstructionPtr(void* code, int offset)
     
    13451351    {
    13461352        patchPointer(where, value);
     1353    }
     1354
     1355    static void* readPointer(void* code)
     1356    {
     1357        return static_cast<void*>(readInt32(code));
    13471358    }
    13481359
     
    14751486    }
    14761487
     1488    static uint32_t readInt32(void* code)
     1489    {
     1490        return readPCrelativeAddress((*(reinterpret_cast<uint16_t*>(code)) & 0xff), reinterpret_cast<uint16_t*>(code));
     1491    }
     1492
    14771493    void* executableCopy(JSGlobalData& globalData, ExecutablePool* allocator)
    14781494    {
Note: See TracChangeset for help on using the changeset viewer.