Home | Notifications | New Note | Local | Federated | Search | Logout
🦉@aaa (2026-06-12 23:46:22) FreeBSDのブートローダのアセンブリ実装(stand/efi/loader/arch/amd64/start.S)を見てみると変なことをしている。Reply
push rcx -> push rdx -> pop rcx -> pop rdx -> push rcx -> push rdx -> call self_reloc -> (pop..)
(MS x64 ABIファームウェアから渡されたrcxとrdxを入れ替えて、callを跨ぐためにスタックに退避)
self_relocの引数が4つ(System V ABIでrdi, rsi, rdx, rcx)あったときの名残で、今は2つになっているから入れ替える必要はないかも。
OpenBSDにもこのコードが引き継がれていて、はじめよく分からなかった。