golang-notes icon indicating copy to clipboard operation
golang-notes copied to clipboard

请问怎么主要找到 m_tls 的具体定义呢?

Open fbwfbi opened this issue 3 years ago • 1 comments

在分析 golang 启动过程时,经常会提到这么一行 LEAQ runtime·m0+m_tls(SB), DI

意思是将m0.tls的地址存入DI寄存器,查看源码时有不少地方用到 m_tls,比如如下:

#ifdef GOOS_windows
	CMPQ	BX, $0
	JNE	settls
	MOVQ	$0, 0x28(GS)
	RET
settls:
	MOVQ	g_m(BX), AX
	LEAQ	m_tls(AX), AX
	MOVQ	AX, 0x28(GS)
#endif
	get_tls(CX)
	MOVQ	BX, g(CX)
	RET

我感觉应该也是类似 get_tls (src/runtime/go_tls.h) 这样一个宏,但是翻遍 golang 源码里面好像找不到具体的定义

fbwfbi avatar Dec 01 '21 14:12 fbwfbi

这种 runtime 自己的特殊 hack 太多了,这里的 m_tls 编译完成后会变成偏移量,

我猜是链接的时候做的替换:

https://github.com/golang/go/blob/72b6a89ca5cd3c3bfd13b9b17be976e8feb91ecc/src/cmd/internal/objabi/reloctype.go#L68

cch123 avatar Dec 02 '21 11:12 cch123