1

我正在阅读 Zircon 内核(Fuchsia OS)的 start.S 汇编代码:

https://fuchsia.googlesource.com/fuchsia/+/master/zircon/kernel/arch/arm64/start.S

有这样一行:

.text
FUNCTION(_start)

我认为这是在内核上执行的第一件事。然而,为了它是真实的,_start应该是全球性的。我无法确定是不是。

还有另外一行:

// This symbol is used by image.S
.global IMAGE_ELF_ENTRY
IMAGE_ELF_ENTRY = _start

这暗示了类似的事情。

什么在FUNCTIONFUNCTION(_start)?我尝试搜索“程序集功能宏”,但没有找到与此相关的内容。

看起来这是第一次运行代码,但我无法确定它在哪里分支到真正的内核代码(C++ 代码),所以我很怀疑。

4

1 回答 1

4

这些宏的定义可以在 中找到//zircon/kernel/include/asm.h,它基本上是一个包装器,添加了所有必需的注释,包括CFI 指令

因此FUNCTION(_start)将扩展为:

.global _start;
.hidden _start;
.type _start,STT_FUNC;
_start:
  .cfi_startproc

到 C++ 代码的分支发生在bl lk_main指令上。

于 2021-01-21T03:37:58.983 回答