Go Assembly中PCDATA的含义是什么

时间:2018-11-22 19:01:24

标签: go assembly

我正在使用以下方法将golang代码编译为汇编程序:

go build -gcflags -S .

在汇编代码中,我说了很多行,例如:

PCDATA  $2, $1

是什么意思?在quick guide to asm中指出

  

FUNCDATA和PCDATA指令包含由   垃圾收集器;它们是由编译引入的

但是没有很多细节

1 个答案:

答案 0 :(得分:2)

正如您在回答中所述,A Quick Guide to Go's Assembler 指出:

<块引用>

FUNCDATA 和 PCDATA 指令包含垃圾收集器使用的信息;它们是由编译器引入的。

Russ Cox 的文章 "Go 1.2 Runtime Symbol Information" 指出:

<块引用>

同理,伪指令

PCDATA $3, $45

声明与当前程序计数器相关联的索引为 3 的值为 45。每个 pcdata 索引(PCDATA $1、PCDATA $2 等)都编码为单独的 pc-value 表。与 funcdata 一样,索引允许为给定函数定义多种 pcdata,并且这些索引也将有一个注册表。

在运行时,运行时可以从 Func 中检索具有给定索引的 funcdata 或在给定程序计数器中具有给定索引的 pcdata。 pcdata 流可以通过引用作为 funcdata 指针检索的相应数据来生成 int32。

struct Func 在内存中紧跟在 npcdata int32s 之后,给出 pcdata 表的偏移量;如果 nfuncdata > 0,则 npcdata int32s 后面紧跟一个可能的 int32 间隙以进行对齐,然后 nfuncdata uintptrs 给出 funcdata 值。如果 pcsp、pcfile、pcln 或任何 pcdata 偏移量为零,则认为该表丢失,所有 PC 都取值为 -1。