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/MacroAssemblerARMv7.cpp

    r176134 r176233  
    11/*
    2  * Copyright (C) 2013 Apple Inc. All rights reserved.
     2 * Copyright (C) 2013, 2014 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3737void MacroAssemblerARMv7::printCPURegisters(CPUState& cpu, int indentation)
    3838{
    39     #define DUMP_GPREGISTER(_type, _regName) { \
     39    #define PRINT_GPREGISTER(_type, _regName) { \
    4040        int32_t value = reinterpret_cast<int32_t>(cpu._regName); \
    4141        INDENT, dataLogF("%5s: 0x%08x  %d\n", #_regName, value, value) ; \
    4242    }
    43     FOR_EACH_CPU_GPREGISTER(DUMP_GPREGISTER)
    44     FOR_EACH_CPU_SPECIAL_REGISTER(DUMP_GPREGISTER)
    45     #undef DUMP_GPREGISTER
     43    FOR_EACH_CPU_GPREGISTER(PRINT_GPREGISTER)
     44    FOR_EACH_CPU_SPECIAL_REGISTER(PRINT_GPREGISTER)
     45    #undef PRINT_GPREGISTER
    4646
    47     #define DUMP_FPREGISTER(_type, _regName) { \
     47    #define PRINT_FPREGISTER(_type, _regName) { \
    4848        uint64_t* u = reinterpret_cast<uint64_t*>(&cpu._regName); \
    4949        double* d = reinterpret_cast<double*>(&cpu._regName); \
    5050        INDENT, dataLogF("%5s: 0x%016llx  %.13g\n", #_regName, *u, *d); \
    5151    }
    52     FOR_EACH_CPU_FPREGISTER(DUMP_FPREGISTER)
    53     #undef DUMP_FPREGISTER
     52    FOR_EACH_CPU_FPREGISTER(PRINT_FPREGISTER)
     53    #undef PRINT_FPREGISTER
    5454}
    5555
    5656#undef INDENT
     57
     58void MacroAssemblerARMv7::printRegister(MacroAssemblerARMv7::CPUState& cpu, RegisterID regID)
     59{
     60    const char* name = CPUState::registerName(regID);
     61    union {
     62        void* voidPtr;
     63        intptr_t intptrValue;
     64    } u;
     65    u.voidPtr = cpu.registerValue(regID);
     66    dataLogF("%s:<%p %ld>", name, u.voidPtr, u.intptrValue);
     67}
     68
     69void MacroAssemblerARMv7::printRegister(MacroAssemblerARMv7::CPUState& cpu, FPRegisterID regID)
     70{
     71    const char* name = CPUState::registerName(regID);
     72    union {
     73        double doubleValue;
     74        uint64_t uint64Value;
     75    } u;
     76    u.doubleValue = cpu.registerValue(regID);
     77    dataLogF("%s:<0x%016llx %.13g>", name, u.uint64Value, u.doubleValue);
     78}
    5779
    5880extern "C" void ctiMasmProbeTrampoline();
Note: See TracChangeset for help on using the changeset viewer.