On Tue, Jul 9, 2019 at 7:32 PM Thomson Tan <lilo...@gmail.com> wrote:

> Thanks a lot for the details. For a single isolate, how is the case for
> multiple nested JSEntry and CEntry handled?
>

Stack frames by definition form a sequence, there is no way to nest them.
Ranges of C++ frames are bounded by a CEntry frame on one side and a
JSEntry from the other, that's how the stack walker can skip over them.


> For EntryFrame::GetCallerState, seems it requires to use stack walker
> provided by V8, like JavaScriptFrameIterator. How does it work for other
> stackwalker which cannot invoke V8 code directly, for example, stack walk
> in postmortem dump file and ETW?
>

I don't know.


> On Tuesday, July 9, 2019 at 8:52:34 AM UTC-7, Jakob Kummerow wrote:
>>
>> On Tue, Jul 9, 2019 at 5:20 PM Thomson Tan <lil...@gmail.com> wrote:
>>
>>> The stack iterator needs to be able to skip over C++ frames on the stack
>>>>
>>> Is this a general requirement for V8 generated code for all platforms?
>>>
>>
>> Yes.
>>
>>
>>> Use x64 for example which walks the stack by following frame pointer
>>> (rbp) chain, does this mean JS entry function should stop this frame
>>> pointer chain, and store the caller's frame pointer in isolate?
>>>
>>
>> The other way round. The caller of JSEntry is a C++ function, and we make
>> no assumptions about the stack layout that the C++ compiler generates for
>> those. The JSEntry stub creates a new chain of rbp pointers (throughout the
>> following invocations of generated code). It stores the last C entry frame
>> position, so when walking the stack in the other direction, the stack
>> walker can jump from the JSEntry frame to the previous CEntry frame (if
>> there is one).
>>
>>
>>> How to usually handle the frame for JS entry function if a full
>>> stackwalk is needed?
>>>
>>
>> See class EntryFrame in frames.h, in
>> particular EntryFrame::GetCallerState, and compare it with what
>> Generate_JSEntryVariant in builtins-x64.cc does.
>>
>>
>>> On Tuesday, July 9, 2019 at 2:09:20 AM UTC-7, Jakob Kummerow wrote:
>>>>
>>>> The stack iterator needs to be able to skip over C++ frames on the
>>>> stack. Information about the topmost C++ section is stored on the isolate
>>>> (where else would you store it?), information about additional sections
>>>> further down needs to be saved elsewhere. Storing it on the stack makes it
>>>> easy for the stack walker to find it.
>>>>
>>>> On Tue, Jul 9, 2019 at 10:21 AM Thomson Tan <lil...@gmail.com> wrote:
>>>>
>>>>> Seems the JSEntry frame (Generate_JSEntryVariant)
>>>>> saves IsolateAddressId::kCEntryFPAddress from isolate. What is this C 
>>>>> entry
>>>>> FP field for? I guess it saves frame pointer passed from C caller, but
>>>>> don't understand why it comes from isolate.
>>>>>
>>>>> --
>>>>
>>>> --
> --
> v8-users mailing list
> v8-users@googlegroups.com
> http://groups.google.com/group/v8-users
> ---
> You received this message because you are subscribed to the Google Groups
> "v8-users" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to v8-users+unsubscr...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/v8-users/5b35aac3-dd64-4cb9-a54d-f29df130c364%40googlegroups.com
> <https://groups.google.com/d/msgid/v8-users/5b35aac3-dd64-4cb9-a54d-f29df130c364%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
> For more options, visit https://groups.google.com/d/optout.
>

-- 
-- 
v8-users mailing list
v8-users@googlegroups.com
http://groups.google.com/group/v8-users
--- 
You received this message because you are subscribed to the Google Groups 
"v8-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to v8-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/v8-users/CAKSzg3QT%3DAO_%3Dj%2BRD1b%3DTYbu9bGw-v1%3Dqpzye60cO4DGDwfBkg%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to