zylthinking@linux:~/code/goc$ go tool compile -S goid.go
"".Goid STEXT size=70 args=0x8 locals=0x10
0x0000 00000 (goid.go:21) TEXT "".Goid(SB), ABIInternal, $16-8
0x0000 00000 (goid.go:21) MOVQ (TLS), CX
0x0009 00009 (goid.go:21) CMPQ SP, 16(CX)
0x000d 00013 (goid.go:21) PCDATA $0, $-2
0x000d 00013 (goid.go:21) JLS 63
0x000f 00015 (goid.go:21) PCDATA $0, $-1
0x000f 00015 (goid.go:21) SUBQ $16, SP
0x0013 00019 (goid.go:21) MOVQ BP, 8(SP)
0x0018 00024 (goid.go:21) LEAQ 8(SP), BP
0x001d 00029 (goid.go:21) PCDATA $0, $-2
0x001d 00029 (goid.go:21) PCDATA $1, $-2
0x001d 00029 (goid.go:21) FUNCDATA $0, gclocals·33cdeccccebe80329f1fdbee7f5874cb(SB)
0x001d 00029 (goid.go:21) FUNCDATA $1, gclocals·33cdeccccebe80329f1fdbee7f5874cb(SB)
0x001d 00029 (goid.go:21) FUNCDATA $2, gclocals·9fb7f0986f647f17cb53dda1484e0f7a(SB)
0x001d 00029 (goid.go:22) PCDATA $0, $0
0x001d 00029 (goid.go:22) PCDATA $1, $0
0x001d 00029 (goid.go:22) CALL "".getg(SB)
as above, there two duplicated PCDATA on same PC: 00029
0x001d 00029 (goid.go:21) PCDATA $0, $-2
0x001d 00029 (goid.go:21) PCDATA $1, $-2
0x001d 00029 (goid.go:21) FUNCDATA $0, gclocals·33cdeccccebe80329f1fdbee7f5874cb(SB)
0x001d 00029 (goid.go:21) FUNCDATA $1, gclocals·33cdeccccebe80329f1fdbee7f5874cb(SB)
0x001d 00029 (goid.go:21) FUNCDATA $2, gclocals·9fb7f0986f647f17cb53dda1484e0f7a(SB)
0x001d 00029 (goid.go:22) PCDATA $0, $0
0x001d 00029 (goid.go:22) PCDATA $1, $0
Obviously, the latter one PCDATA $0, $0 will over write the previous PCDATA $0, $-2
Is it an unused line or has some meaning that I don’t know?
And, PCDATA $0, $-2 seems tell runtime it’s unsafe for async preemp, PCDATA $0, $-2 is safe; what is the meaning of PCDATA $0, $0?
I don’t know either
0x001d 00029 (goid.go:21) FUNCDATA $2, gclocals·9fb7f0986f647f17cb53dda1484e0f7a(SB)
0x001d 00029 (goid.go:22) PCDATA $0, $0
why same PC mapped to different lines of source code