周六(20220514)的讨论中,清华一组同学提到,内核中 match
会编译出含绝对地址的值的跳转,导致内核无法放在非链接时宣称的地址位置运行,也就是说,无法做到位置无关运行。检查发现,rustc 有一个选项 relocation-model
控制结果的位置无关类型,其默认值为 pic
,即位置无关。但 zCore 在配置文件中指定了 relocation-model:static
,即禁止位置无关化。尝试将这个值改为 pic
,直接不能运行了。
ZYR 表示,这可能是因为 pic 导致依赖 GOT 的位置无关化。这个技术需要在 elf 文件头中保存一些信息,内核无法利用。