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è)滿減棧的示意圖,高地址為棧頂,低地址為棧低,棧向低地址方向生長(zhǎng),如右邊的箭頭所示。棧指針SP指向棧底(棧低保存了數(shù)據(jù))。
每產(chǎn)生一次函數(shù)調(diào)用,就會(huì)在棧中形成一個(gè)棧幀,該棧總共保存了4個(gè)棧幀(Stack Frame),每個(gè)棧幀由FP、LR及棧參數(shù)(函數(shù)參數(shù)、函數(shù)局部變量等)組成。可以將棧中的所有棧幀視為一個(gè)單項(xiàng)鏈表,棧最低位置的棧幀為鏈表頭,棧最高位置的棧幀為鏈表尾,整個(gè)鏈表使用FP索引。
棧手動(dòng)回溯時(shí),可以根據(jù)FP將所有棧幀索引出來。

-
內(nèi)核
+關(guān)注
關(guān)注
4文章
1467瀏覽量
42873 -
Linux
+關(guān)注
關(guān)注
88文章
11759瀏覽量
219013
發(fā)布評(píng)論請(qǐng)先 登錄
如何對(duì)RK3399 CPU arm64的內(nèi)核進(jìn)行配置
介紹在ARM64架構(gòu)下啟動(dòng)多核的兩種方式
在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)
ARM64位與ARM32位OP-TEE啟動(dòng)過程的差異
深入剖析ARM64內(nèi)核關(guān)鍵文件:kernel-6.1/arch/arm64/kernel/head.S
Arm64棧回溯 結(jié)構(gòu)介紹
評(píng)論