Ignore:
Timestamp:
Jul 21, 2009, 5:37:03 PM (16 years ago)
Author:
[email protected]
Message:

2009-07-21 Gavin Barraclough <[email protected]>

Reviewed by Oliver Hunt.

Move LinkBuffer/RepatchBuffer out of AbstractMacroAssembler.
( https://bugs.webkit.org/show_bug.cgi?id=27485 )

This change is the first step in a process to move code that should be in
the architecture-specific MacroAssembler classes up out of Assmbler and
AbstractMacroAssembler.


  • assembler/ARMAssembler.h: (JSC::ARMAssembler::linkPointer):
    • rename patchPointer to bring it in line with the current link/repatch naming scheme


  • assembler/ARMv7Assembler.h: (JSC::ARMv7Assembler::linkCall): (JSC::ARMv7Assembler::linkPointer): (JSC::ARMv7Assembler::relinkCall): (JSC::ARMv7Assembler::repatchInt32): (JSC::ARMv7Assembler::repatchPointer): (JSC::ARMv7Assembler::setInt32): (JSC::ARMv7Assembler::setPointer):
    • rename patchPointer to bring it in line with the current link/repatch naming scheme
  • assembler/AbstractMacroAssembler.h: (JSC::AbstractMacroAssembler::linkJump): (JSC::AbstractMacroAssembler::linkCall): (JSC::AbstractMacroAssembler::linkPointer): (JSC::AbstractMacroAssembler::getLinkerAddress): (JSC::AbstractMacroAssembler::getLinkerCallReturnOffset): (JSC::AbstractMacroAssembler::repatchJump): (JSC::AbstractMacroAssembler::repatchCall): (JSC::AbstractMacroAssembler::repatchNearCall): (JSC::AbstractMacroAssembler::repatchInt32): (JSC::AbstractMacroAssembler::repatchPointer): (JSC::AbstractMacroAssembler::repatchLoadPtrToLEA):
    • remove the LinkBuffer/RepatchBuffer classes, but leave a set of (private, friended) methods to interface to the Assembler
  • assembler/LinkBuffer.h: Added. (JSC::LinkBuffer::LinkBuffer): (JSC::LinkBuffer::~LinkBuffer): (JSC::LinkBuffer::link): (JSC::LinkBuffer::patch): (JSC::LinkBuffer::locationOf): (JSC::LinkBuffer::locationOfNearCall): (JSC::LinkBuffer::returnAddressOffset): (JSC::LinkBuffer::finalizeCode): (JSC::LinkBuffer::finalizeCodeAddendum): (JSC::LinkBuffer::code): (JSC::LinkBuffer::performFinalization):
    • new file containing the LinkBuffer class, previously a member of AbstractMacroAssembler
  • assembler/RepatchBuffer.h: Added. (JSC::RepatchBuffer::RepatchBuffer): (JSC::RepatchBuffer::relink): (JSC::RepatchBuffer::repatch): (JSC::RepatchBuffer::repatchLoadPtrToLEA): (JSC::RepatchBuffer::relinkCallerToTrampoline): (JSC::RepatchBuffer::relinkCallerToFunction): (JSC::RepatchBuffer::relinkNearCallerToTrampoline):
    • new file containing the RepatchBuffer class, previously a member of AbstractMacroAssembler
  • assembler/X86Assembler.h: (JSC::X86Assembler::linkJump): (JSC::X86Assembler::linkCall): (JSC::X86Assembler::linkPointerForCall): (JSC::X86Assembler::linkPointer): (JSC::X86Assembler::relinkJump): (JSC::X86Assembler::relinkCall): (JSC::X86Assembler::repatchInt32): (JSC::X86Assembler::repatchPointer): (JSC::X86Assembler::setPointer): (JSC::X86Assembler::setInt32): (JSC::X86Assembler::setRel32):
    • rename patchPointer to bring it in line with the current link/repatch naming scheme
  • jit/JIT.cpp: (JSC::ctiPatchNearCallByReturnAddress): (JSC::ctiPatchCallByReturnAddress):
    • include new headers
    • remove MacroAssembler:: specification from RepatchBuffer usage
  • jit/JITPropertyAccess.cpp:
  • yarr/RegexJIT.cpp:
    • include new headers
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/assembler/X86Assembler.h

    r46059 r46202  
    13681368
    13691369        char* code = reinterpret_cast<char*>(m_formatter.data());
    1370         patchRel32(code + from.m_offset, code + to.m_offset);
     1370        setRel32(code + from.m_offset, code + to.m_offset);
    13711371    }
    13721372   
     
    13751375        ASSERT(from.m_offset != -1);
    13761376
    1377         patchRel32(reinterpret_cast<char*>(code) + from.m_offset, to);
     1377        setRel32(reinterpret_cast<char*>(code) + from.m_offset, to);
    13781378    }
    13791379
     
    13821382        ASSERT(from.m_offset != -1);
    13831383
    1384         patchRel32(reinterpret_cast<char*>(code) + from.m_offset, to);
    1385     }
    1386 
    1387 #if PLATFORM(X86_64)
    1388     static void patchPointerForCall(void* where, void* value)
     1384        setRel32(reinterpret_cast<char*>(code) + from.m_offset, to);
     1385    }
     1386
     1387#if PLATFORM(X86_64)
     1388    static void linkPointerForCall(void* where, void* value)
    13891389    {
    13901390        reinterpret_cast<void**>(where)[-1] = value;
     
    13921392#endif
    13931393
    1394     static void patchPointer(void* code, JmpDst where, void* value)
     1394    static void linkPointer(void* code, JmpDst where, void* value)
    13951395    {
    13961396        ASSERT(where.m_offset != -1);
    13971397
    1398         patchPointer(reinterpret_cast<char*>(code) + where.m_offset, value);
     1398        setPointer(reinterpret_cast<char*>(code) + where.m_offset, value);
    13991399    }
    14001400
     
    14021402    {
    14031403        ExecutableAllocator::MakeWritable unprotect(reinterpret_cast<char*>(from) - sizeof(int32_t), sizeof(int32_t));
    1404         patchRel32(from, to);
     1404        setRel32(from, to);
    14051405    }
    14061406   
     
    14081408    {
    14091409        ExecutableAllocator::MakeWritable unprotect(reinterpret_cast<char*>(from) - sizeof(int32_t), sizeof(int32_t));
    1410         patchRel32(from, to);
     1410        setRel32(from, to);
    14111411    }
    14121412
     
    14141414    {
    14151415        ExecutableAllocator::MakeWritable unprotect(reinterpret_cast<char*>(where) - sizeof(int32_t), sizeof(int32_t));
    1416         patchInt32(where, value);
     1416        setInt32(where, value);
    14171417    }
    14181418
     
    14201420    {
    14211421        ExecutableAllocator::MakeWritable unprotect(reinterpret_cast<char*>(where) - sizeof(void*), sizeof(void*));
    1422         patchPointer(where, value);
     1422        setPointer(where, value);
    14231423    }
    14241424
     
    14781478private:
    14791479
    1480     static void patchPointer(void* where, void* value)
     1480    static void setPointer(void* where, void* value)
    14811481    {
    14821482        reinterpret_cast<void**>(where)[-1] = value;
    14831483    }
    14841484
    1485     static void patchInt32(void* where, int32_t value)
     1485    static void setInt32(void* where, int32_t value)
    14861486    {
    14871487        reinterpret_cast<int32_t*>(where)[-1] = value;
    14881488    }
    14891489
    1490     static void patchRel32(void* from, void* to)
     1490    static void setRel32(void* from, void* to)
    14911491    {
    14921492        intptr_t offset = reinterpret_cast<intptr_t>(to) - reinterpret_cast<intptr_t>(from);
    14931493        ASSERT(offset == static_cast<int32_t>(offset));
    14941494
    1495         patchInt32(from, offset);
     1495        setInt32(from, offset);
    14961496    }
    14971497
Note: See TracChangeset for help on using the changeset viewer.