Ignore:
Timestamp:
Jan 25, 2012, 10:27:43 AM (14 years ago)
Author:
[email protected]
Message:

Inlining breaks call frame walking when the walking is done from outside the inlinee,
but inside a code block that had inlining
https://bugs.webkit.org/show_bug.cgi?id=76978
<rdar://problem/10720904>

Reviewed by Oliver Hunt.

Source/JavaScriptCore:

  • bytecode/CodeBlock.h:

(JSC::CodeBlock::codeOriginForReturn):

  • interpreter/CallFrame.cpp:

(JSC::CallFrame::trueCallerFrame):

LayoutTests:

  • fast/js/dfg-inline-arguments-use-from-uninlined-code-expected.txt: Added.
  • fast/js/dfg-inline-arguments-use-from-uninlined-code.html: Added.
  • fast/js/script-tests/dfg-inline-arguments-use-from-uninlined-code.js: Added.

(foo):
(fuzz):
(bar):
(baz):

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/bytecode/CodeBlock.h

    r105533 r105894  
    670670        }
    671671       
    672         CodeOrigin codeOriginForReturn(ReturnAddressPtr returnAddress)
    673         {
    674             ASSERT(hasCodeOrigins());
    675             return binarySearch<CodeOriginAtCallReturnOffset, unsigned, getCallReturnOffsetForCodeOrigin>(codeOrigins().begin(), codeOrigins().size(), getJITCode().offsetOf(returnAddress.value()))->codeOrigin;
     672        bool codeOriginForReturn(ReturnAddressPtr returnAddress, CodeOrigin& codeOrigin)
     673        {
     674            if (!hasCodeOrigins())
     675                return false;
     676            unsigned offset = getJITCode().offsetOf(returnAddress.value());
     677            CodeOriginAtCallReturnOffset* entry = binarySearch<CodeOriginAtCallReturnOffset, unsigned, getCallReturnOffsetForCodeOrigin>(codeOrigins().begin(), codeOrigins().size(), offset, WTF::KeyMustNotBePresentInArray);
     678            if (entry->callReturnOffset != offset)
     679                return false;
     680            codeOrigin = entry->codeOrigin;
     681            return true;
    676682        }
    677683       
Note: See TracChangeset for help on using the changeset viewer.