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
指令上。
我正在阅读 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
指令上。