如何解决在arm64汇编中,“ adrp x0,idmap_pg_dir;”是什么?指示是什么意思?
有关arm64汇编语言的问题。
例如,在linux 5.9.15源代码中,在arch / arm64 / kernel / vmlinux.lds.S(链接程序脚本)中,一行idmap_pg_dir = .;
。所以idmap_pg_dir是一个地址。现在,在arch / arm64 / kernel / head.S中,有一行adrp x0,idmap_pg_dir
。这是不是
1) x0 = PC + idmap_pg_dir or
2) x0 = idmap_pg_dir ?
我认为当我们执行adrp x0,addr1
时,通常addr1
是PC相对地址偏移量,而x0变成PC + addr
。但是链接描述文件似乎说idmap_pg_dir
只是一个绝对地址。 (不是吗?)所以我很困惑。请有人纠正我。
解决方法
在ARMv8体系结构参考手册的ADRP指令部分中,
是程序标签,其页面地址应为4KB 计算。它与该指令的页面地址的偏移量,以 范围+/- 4GB,被编码为“ immhi:immlo”乘以4096。
因此,编译器将“偏移量”“计算”为“标签”。因此,将使用当前指令的“偏移量”,而不是标签的绝对地址。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。