看板 LinuxDev 關於我們 聯絡資訊
我想請問一下, 在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
james732:function的參數是可以放在stack或register裡的 12/29 15:24
origo:請問那要如何選擇要放在stack還是register裡呢?謝謝 12/29 17:53
SILee:沒有辦法 12/29 18:04
SILee:ARM預設就是放r0~r3這4個register 12/29 18:05
SILee:除非參數超過4個才會放stack 12/29 18:06
SILee:不然你就要從asm自己寫或去改compiler 12/29 18:07
freesamael:ABI calling convention,這也是為什麼EABI和OABI不相容 12/29 18:48
zwai:r0~r2是固定的 12/29 23:35
origo:謝謝,各位的回答, 基本上我了解了, 我會再查看看ABI的東西 12/30 10:26
origo:但如果參數傳遞的是struct,其大小大於reg的話,不就放不下嗎 12/30 10:27