You do not have permission to delete messages in this group
Copy link
Report message
Show original message
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to golang-nuts
I read go runtime code,but I'm poor in assembly language,
i can't understand the following code
// switch to g0
MOVQ DX, g(CX)
MOVQ (g_sched+gobuf_sp)(DX), BX
// make it look like mstart called systemstack on g0, to stop traceback
SUBQ $8, BX
MOVQ $runtime·mstart(SB), DX
MOVQ DX, 0(BX)
MOVQ BX, SP
what does copy runtime·mstart to stack means,could someone help me
Ian Lance Taylor
unread,
Jul 31, 2019, 12:08:51 AM7/31/19
Reply to author
Sign in to reply to author
Forward
Sign in to forward
Delete
You do not have permission to delete messages in this group
Copy link
Report message
Show original message
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to wangjin...@gmail.com, golang-nuts
It does exactly what the comment says: when doing a stack traceback,
it makes it appear that mstart called systemstack. When a function is
called, the return address is placed on the stack. In this case the
assembly code is deliberately putting mstart on the stack, so that
that is what a traceback will see.
Ian
jin wang
unread,
Jul 31, 2019, 4:45:01 AM7/31/19
Reply to author
Sign in to reply to author
Forward
Sign in to forward
Delete
You do not have permission to delete messages in this group
Copy link
Report message
Show original message
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
You do not have permission to delete messages in this group
Copy link
Report message
Show original message
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to jin wang, golang-nuts
On Wed, Jul 31, 2019 at 4:49 AM jin wang <wangjin...@gmail.com> wrote:
>
> so mstart just put on stack for call traceback , but actually will not return at mstart?
Yes. As you can see, the systemstack function changes the stack
pointer back to its original value before it returns to its caller.
It does not return on the stack where mstart is stored.