P.EMB.02 no-std 下要确保程序中的类型有正确的内存布局

【描述】

链接器决定 no-std 程序的最终内存布局,但我们可以使用链接器脚本对其进行一些控制。链接器脚本给我们的布局控制粒度是在 段( Section) 级别。段是在连续内存中布置的 符号 集合。反过来,符号可以是数据(静态变量)或指令(Rust 函数)。

这些编译器生成的符号和段名称不能保证在 Rust 编译器的不同版本中保持不变。但是,Rust 允许我们通过以下属性控制符号名称和部分位置:

  • #[export_name = "foo"]将符号名称设置为 foo.
  • #[no_mangle]意思是:使用函数或变量名(不是它的完整路径)作为它的符号名。 #[no_mangle] fn bar()将产生一个名为 bar 的符号。
  • #[link_section = ".bar"]将符号放置在名为 .bar 的部分中。

通过这些属性,我们可以公开程序的稳定 ABI 并在链接描述文件中使用它。