Hi all -

Caveat: Due to divergence in the code base and the target platform, I'm working 
with an older port based on v2.1.1.  But, I believe my question is broad enough 
that someone may be able to help point me in the right area.

I'm enabling LLINT which was not enabled for the port we're working with in 
this version.   In the dispatch to llint_program_prologue, the 
CodeBlock.m_instructions[0] points to the value 0 which results into a jmp to 0 
and a subsequent access violation.

I'm looking to understand what conditions cause CodeBlock.m_instructions[0] to 
not point to code.   Both JIT and LLINT are enabled.

JSC::prepareForExecution builds a CTI stub with programEntryThunkGenerator, the 
prologue thunk executes and lands in the prologue code.  I verified that the 
CodeBlock processed in prologue is the CodeBlock set up by this stack:

x!JSC::prepareForExecution<JSC::ProgramCodeBlock>(JSC::ExecState *, 
WTF::OwnPtr<JSC::ProgramCodeBlock> & {...}, JSC::JITCode & {...}, 
JSC::JITCode::JITType BaselineJIT, unsigned int) executionharness.h line 42
x!JSC::ProgramExecutable::compileInternal(JSC::ExecState *, JSC::JSScope *, 
JSC::JITCode::JITType BaselineJIT, unsigned int) executable.cpp line 328 + 19 
bytes
x!JSC::ProgramExecutable::compile(JSC::ExecState *, JSC::JSScope *) 
executable.h line 514 + 19 bytes

Note that this code path is not taken as the profiler is not enabled, I'm not 
clear as to the design if this would impact this 0 index of m_instructions or 
not.

        if (exec->vm().m_perBytecodeProfiler)
            
exec->vm().m_perBytecodeProfiler->ensureBytecodesFor(codeBlock.get());

After the prepareForExecution and going through the thunk, it's the processing 
of the CodeBlock that lands the instruction pointer at 0.  The offset of 
m_instructions looks correct comparing the offset with other assembly generated 
for other modules (including CodeBlock.cpp itself).   Inspecting the CodeBlock 
object and m_instructions[0] verifies it has a 0 in this entry.   I am assuming 
this is unexpected - but I don't understand where this is supposed to be set up 
when tracing step-by-step through this code path.

Any suggestions/pointers appreciated.

Thanks!



_llint_program_prologue:

    prologue(notFunctionCodeBlockGetter, notFunctionCodeBlockSetter, 
_llint_entry_osr, _llint_trace_prologue)

    dispatch(0)


    # Set up the PC.
   if JSVALUE64
        loadp CodeBlock::m_instructions[t1], PB
        move 0, PC
    else
        loadp CodeBlock::m_instructions[t1], PC
    end

_______________________________________________
webkit-help mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-help

Reply via email to