2014-11-17 20 views
1

當我通過u-boot的源代碼看,我發現,它通過R9寄存器傳遞全局數據這樣爲什麼u-boot可以將全局數據的地址放入r9寄存器中?

register volatile gd_t *gd asm ("r9") 

所以,我很好奇,請問u-boot的進一步確保代碼不會用r9寄存器並破壞全局數據。有沒有告訴編譯器不要使用特定寄存器的選項?

+1

值得注意的是,它曾經是r8,仍然在一些供應商分支:http://git.denx.de/?p=u-boot.git;a=commitdiff;h=fe1378a961e508b31b1f29a2bb08ba1dac063155 – unixsmurf

回答

2

Procedure Call Standard for the ARM Architecture

寄存器R9的作用是特定的平臺。虛擬平臺可以將任何角色分配給該註冊,並且必須記錄這種使用。例如,它可以將其指定爲位置無關的數據模型中的靜態基址(SB),或者可以在具有線程本地存儲的環境中將其指定爲線程寄存器(TR)。這個寄存器的用法可能要求所有呼叫持有的值是永久的。不需要這種特殊寄存器的虛擬平臺可以將r9指定爲額外的被呼叫保存的變量寄存器v6。

然而GCC doesn't have a abi profile for reserving r9用於平臺使用thus the way u-boot does this is with -ffixed-r9 option

相關問題