Arm64有4种栈,分别是空增栈(Empty Ascendant Stack,EA)、空减栈(Empty Descendant Stack,ED)、满增栈(Full Ascendant Stack,FA)、满减栈(Full Descendant Stack,FD)。常用的是满减栈,Linux内核也使用满减栈。
下图是一个满减栈的示意图,高地址为栈顶,低地址为栈低,栈向低地址方向生长,如右边的箭头所示。栈指针SP指向栈底(栈低保存了数据)。
每产生一次函数调用,就会在栈中形成一个栈帧,该栈总共保存了4个栈帧(Stack Frame),每个栈帧由FP、LR及栈参数(函数参数、函数局部变量等)组成。可以将栈中的所有栈帧视为一个单项链表,栈最低位置的栈帧为链表头,栈最高位置的栈帧为链表尾,整个链表使用FP索引。
栈手动回溯时,可以根据FP将所有栈帧索引出来。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
内核
+关注
关注
3文章
1309浏览量
39846 -
Linux
+关注
关注
87文章
10990浏览量
206734
发布评论请先 登录
相关推荐
浅析openat系统调用在arm64下的实现及使用原理
1. 简介这篇文章主要介绍系统调用在arm64下的实现及使用原理,考虑到目前bpf在系统调试和调优工作中被大量使用,在文章的最后也简单介绍一下系统调用相关的bpf工具。系统调用在每个平台的实现方式
发表于 06-02 17:48
介绍在ARM64架构下启动多核的两种方式
1、ARM64的多核启动流程分析工作中遇到的多核 ARM CPU 越来越多,总结分享一些多核启动的知识,希望能帮助更多小伙伴。在 ARM64 架构下如果想要启动多核,有 spin-table
发表于 06-13 18:23
Tars移植到ARM64平台上的过程实现
计时器来实现,具体实现如下。原x86嵌汇编实现:支持ARM64平台后的实现:3 协程实现协程是一种用户态的轻量级线程,其调度完全由用户控制。因此,协程调度切换时需要用户自己将寄存器和栈保存到其他地方,再
发表于 07-05 14:59
在arm64和x86服务器上运行的耗时来发现Docker在arm64架构下的性能问题
现在的进展并不快,因为老测试集里面用例数量庞大。目前,老测试集中的用例数量还远远大于新测试集。问题大量的集成测试用例为性能研究提供了方便。笔者通过比较同一测试集在arm64和x86服务器上运行的耗时来
发表于 07-12 15:48
ARM64 Linux内核页表的块映射
内核文档Documentation/arm64/memory.rst描述了ARM64 Linux内核空间的内存映射情况,应该是此方面最权威文档。 以典型的4K页和48位虚拟地址为例,整个内核空间
Core 3399KJ Linux根文件系统镜像(arm64/arm32)
电子发烧友网站提供《Core 3399KJ Linux根文件系统镜像(arm64/arm32).txt》资料免费下载
发表于 09-14 10:08
•3次下载
Core 3399J Linux根文件系统镜像(arm64/arm32)
电子发烧友网站提供《Core 3399J Linux根文件系统镜像(arm64/arm32).txt》资料免费下载
发表于 09-14 09:24
•0次下载
AIO 3399ProC Linux根文件系统镜像(arm64/arm32)
电子发烧友网站提供《AIO 3399ProC Linux根文件系统镜像(arm64/arm32).txt》资料免费下载
发表于 09-21 09:52
•11次下载
openEuler实例:K3s ARM64集群管理
AWS可以很方便创建ARM64环境,使用openEuler AMI创建EC2实例,c6g.xlarge 规格完全可以满足Rancher的部署需求。
发表于 04-18 10:44
•431次阅读
ARM64位与ARM32位OP-TEE启动过程的差异
ARM32的OP-TEE与ARM64的OP-TEE启动过程大致相同。ARM64的OP-TEE的_start函数定义在generic_entry_a64.S文件中,而且该函数不像
评论