Bug 129178 - REGRESSION(C stack work): stack traces no longer work in in some tools
Summary: REGRESSION(C stack work): stack traces no longer work in in some tools
Status: ASSIGNED
Alias: None
Product: WebKit
Classification: Unclassified
Component: JavaScriptCore (show other bugs)
Version: 528+ (Nightly build)
Hardware: All All
: P2 Normal
Assignee: Michael Saboff
URL:
Keywords:
Depends on: 129181 131205 131578
Blocks:
  Show dependency treegraph
 
Reported: 2014-02-21 15:41 PST by Michael Saboff
Modified: 2014-04-11 18:29 PDT (History)
0 users

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Michael Saboff 2014-02-21 15:41:09 PST
The recent addition of callToJavaScript as the entry point into interpreted and JIT'ed code breaks unwinding in some tools.  This is due to unwinding code doing some simple disassembly in order to determine where a caller's frame pointer and return PC is stored.  The best way to fix this is to make callToJavaScript conform to the calling conventions using the recommended function prologue instruction sequence.  For X86 that is typically push bp ; move sp, bp.

There is an additional issue with the LLInt, in that one llint_op does an indirect jump to the subsequent llint_op.  Since currently each llint_op is an external symbol, the unwind library will look at the instructions at the beginning of the llint_op to find callee values.

Both of these issues can be solved by having the llint generate all assembly as one exported function.  The entry to the function would conform to the standard calling convention.  The entry would also will in a vector with an ordered list of entry points, what is currently LLIntData::Data::s_opcodeMap.

This work will be done via several bugs.

<rdar://problem/15713914>