[問題] Function中的參數在bootloader中是放在哪裡呢?

看板LinuxDev作者 (令人期待的新生命)時間16年前 (2009/12/29 15:17), 編輯推噓1(109)
留言10則, 5人參與, 最新討論串1/1
我想請問一下, 在Android的bootloader中, 它最後會用entry( 0, board_machine(), ATAG); 來跳到decompress的head.S中, 並看到head.S裡會註解r1暫存器裡有machine_number, r2裡有ATAG位置, 但就我印像中, function的參數不是放在stack中嗎? 怎會直接放在cpu的r1,r2裡呢? 請問各位強者有人可以幫忙解釋一下嗎? 謝謝 -- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.128.88.200

12/29 15:24, , 1F
function的參數是可以放在stack或register裡的
12/29 15:24, 1F

12/29 17:53, , 2F
請問那要如何選擇要放在stack還是register裡呢?謝謝
12/29 17:53, 2F

12/29 18:04, , 3F
沒有辦法
12/29 18:04, 3F

12/29 18:05, , 4F
ARM預設就是放r0~r3這4個register
12/29 18:05, 4F

12/29 18:06, , 5F
除非參數超過4個才會放stack
12/29 18:06, 5F

12/29 18:07, , 6F
不然你就要從asm自己寫或去改compiler
12/29 18:07, 6F

12/29 18:48, , 7F
ABI calling convention,這也是為什麼EABI和OABI不相容
12/29 18:48, 7F

12/29 23:35, , 8F
r0~r2是固定的
12/29 23:35, 8F

12/30 10:26, , 9F
謝謝,各位的回答, 基本上我了解了, 我會再查看看ABI的東西
12/30 10:26, 9F

12/30 10:27, , 10F
但如果參數傳遞的是struct,其大小大於reg的話,不就放不下嗎
12/30 10:27, 10F
文章代碼(AID): #1BEQq6dt (LinuxDev)
文章代碼(AID): #1BEQq6dt (LinuxDev)