Ignore:
Timestamp:
Nov 17, 2014, 2:03:04 PM (11 years ago)
Author:
[email protected]
Message:

Add printing functionality in JITted code for debugging purposes.
<https://webkit.org/b/138660>

Reviewed by Geoffrey Garen.

Sometimes, for debugging, it'd be nice to be able to just print the
values of constants or registers used in JITted code, or even just
a string to log that certain pieces of JITted code have been executed.
Using the JIT probe mechanism, we can make this happen.

  • assembler/ARMv7Assembler.h:
  • assembler/AbstractMacroAssembler.h:

(JSC::AbstractMacroAssembler::CPUState::registerName):
(JSC::AbstractMacroAssembler::CPUState::registerValue):
(JSC::AbstractMacroAssembler::print):
(JSC::AbstractMacroAssembler::PrintArg::PrintArg):
(JSC::AbstractMacroAssembler::appendPrintArg):
(JSC::AbstractMacroAssembler::printInternal):
(JSC::AbstractMacroAssembler::printCallback):

  • assembler/MacroAssemblerARM.cpp:

(JSC::MacroAssemblerARM::printCPURegisters):
(JSC::MacroAssemblerARM::printRegister):

  • assembler/MacroAssemblerARM.h:
  • assembler/MacroAssemblerARMv7.cpp:

(JSC::MacroAssemblerARMv7::printCPURegisters):
(JSC::MacroAssemblerARMv7::printRegister):

  • assembler/MacroAssemblerARMv7.h:
  • assembler/MacroAssemblerX86Common.cpp:

(JSC::MacroAssemblerX86Common::printRegister):

  • assembler/MacroAssemblerX86Common.h:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/assembler/MacroAssemblerARM.cpp

    r176134 r176233  
    102102void MacroAssemblerARM::printCPURegisters(CPUState& cpu, int indentation)
    103103{
    104     #define DUMP_GPREGISTER(_type, _regName) { \
     104    #define PRINT_GPREGISTER(_type, _regName) { \
    105105        int32_t value = reinterpret_cast<int32_t>(cpu._regName); \
    106106        INDENT, dataLogF("%5s: 0x%08x  %d\n", #_regName, value, value) ; \
    107107    }
    108     FOR_EACH_CPU_GPREGISTER(DUMP_GPREGISTER)
    109     FOR_EACH_CPU_SPECIAL_REGISTER(DUMP_GPREGISTER)
    110     #undef DUMP_GPREGISTER
     108    FOR_EACH_CPU_GPREGISTER(PRINT_GPREGISTER)
     109    FOR_EACH_CPU_SPECIAL_REGISTER(PRINT_GPREGISTER)
     110    #undef PRINT_GPREGISTER
    111111
    112     #define DUMP_FPREGISTER(_type, _regName) { \
     112    #define PRINT_FPREGISTER(_type, _regName) { \
    113113        uint64_t* u = reinterpret_cast<uint64_t*>(&cpu._regName); \
    114114        double* d = reinterpret_cast<double*>(&cpu._regName); \
    115115        INDENT, dataLogF("%5s: 0x%016llx  %.13g\n", #_regName, *u, *d); \
    116116    }
    117     FOR_EACH_CPU_FPREGISTER(DUMP_FPREGISTER)
    118     #undef DUMP_FPREGISTER
     117    FOR_EACH_CPU_FPREGISTER(PRINT_FPREGISTER)
     118    #undef PRINT_FPREGISTER
    119119}
    120120
    121121#undef INDENT
     122
     123void MacroAssemblerARM::printRegister(MacroAssemblerARM::CPUState& cpu, RegisterID regID)
     124{
     125    const char* name = CPUState::registerName(regID);
     126    union {
     127        void* voidPtr;
     128        intptr_t intptrValue;
     129    } u;
     130    u.voidPtr = cpu.registerValue(regID);
     131    dataLogF("%s:<%p %ld>", name, u.voidPtr, u.intptrValue);
     132}
     133
     134void MacroAssemblerARM::printRegister(MacroAssemblerARM::CPUState& cpu, FPRegisterID regID)
     135{
     136    const char* name = CPUState::registerName(regID);
     137    union {
     138        double doubleValue;
     139        uint64_t uint64Value;
     140    } u;
     141    u.doubleValue = cpu.registerValue(regID);
     142    dataLogF("%s:<0x%016llx %.13g>", name, u.uint64Value, u.doubleValue);
     143}
    122144
    123145extern "C" void ctiMasmProbeTrampoline();
Note: See TracChangeset for help on using the changeset viewer.