start.S 文件中 Zircon(紫红色)内核的第一个代码 运行 在哪里?

Where is the first code run on Zircon (Fuchsia) kernel on this start.S file?

我正在阅读 Zircon Kernel(紫红色 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

这表明类似的东西。

FUNCTION(_start) 上的 FUNCTION 是什么?我尝试搜索“程序集函数宏”,但没有找到与此相关的内容。

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

这些宏的定义可以在//zircon/kernel/include/asm.h, it's basically a wrapper that adds all the required annotations, including CFI directives中找到。

因此 FUNCTION(_start) 将扩展为:

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

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