Arm64有4種棧,分別是空增棧(Empty Ascendant Stack,EA)、空減棧(Empty Descendant Stack,ED)、滿增棧(Full Ascendant Stack,F(xiàn)A)、滿減棧(Full Descendant Stack,F(xiàn)D)。常用的是滿減棧,Linux內(nèi)核也使用滿減棧。
下圖是一個(gè)滿減棧的示意圖,高地址為棧頂,低地址為棧低,棧向低地址方向生長,如右邊的箭頭所示。棧指針SP指向棧底(棧低保存了數(shù)據(jù))。
每產(chǎn)生一次函數(shù)調(diào)用,就會在棧中形成一個(gè)棧幀,該棧總共保存了4個(gè)棧幀(Stack Frame),每個(gè)棧幀由FP、LR及棧參數(shù)(函數(shù)參數(shù)、函數(shù)局部變量等)組成。可以將棧中的所有棧幀視為一個(gè)單項(xiàng)鏈表,棧最低位置的棧幀為鏈表頭,棧最高位置的棧幀為鏈表尾,整個(gè)鏈表使用FP索引。
棧手動回溯時(shí),可以根據(jù)FP將所有棧幀索引出來。
-
內(nèi)核
+關(guān)注
關(guān)注
3文章
1410瀏覽量
41150 -
Linux
+關(guān)注
關(guān)注
87文章
11469瀏覽量
212911
發(fā)布評論請先 登錄
淺析openat系統(tǒng)調(diào)用在arm64下的實(shí)現(xiàn)及使用原理
介紹在ARM64架構(gòu)下啟動多核的兩種方式
在arm64和x86服務(wù)器上運(yùn)行的耗時(shí)來發(fā)現(xiàn)Docker在arm64架構(gòu)下的性能問題
一文詳解Linux內(nèi)核的棧回溯與妙用

ARM64與ARM32 的Linux程序區(qū)別在哪里

微軟推出首個(gè)可用于ARM64設(shè)備的x64仿真
微軟發(fā)首個(gè)應(yīng)用在ARM64設(shè)備的x64模擬器
ARM64 Linux內(nèi)核頁表的塊映射

Core 3399KJ Linux根文件系統(tǒng)鏡像(arm64/arm32)

Core 3399J Linux根文件系統(tǒng)鏡像(arm64/arm32)

ROC RK3399 PC Pro文件系統(tǒng)Linux根文件系統(tǒng)鏡像(arm64/arm32)

AIO 3399ProC Linux根文件系統(tǒng)鏡像(arm64/arm32)

評論