![](/img/trans.png)
[英]Does arm 64 ret instruction pass x0' value to the function's argument?
[英]In arm64 assembly, what does "adrp x0, idmap_pg_dir;" instruction mean?
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
我們做adrp x0, addr1
,通常addr1
是相對於 PC 的地址偏移量,而 x0 變成PC + addr
。 但是鏈接器腳本似乎說idmap_pg_dir
只是一個絕對地址。 (不是嗎?)所以我很困惑。 請有人糾正我。
在 ARMv8 架構參考手冊中,在 ADRP 指令部分,它說,
是要計算4KB頁地址的程序標簽。 它與該指令的頁地址的偏移量在 +/-4GB 范圍內,被編碼為“immhi:immlo”乘以 4096。
因此,編譯器“計算”到“標簽”的“偏移量”。 因此,使用當前指令的“偏移量”而不是標簽的絕對地址。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.