CN110489258A - 一种基于xtensa处理器的栈回溯方法及装置 - Google Patents
一种基于xtensa处理器的栈回溯方法及装置 Download PDFInfo
- Publication number
- CN110489258A CN110489258A CN201910681672.6A CN201910681672A CN110489258A CN 110489258 A CN110489258 A CN 110489258A CN 201910681672 A CN201910681672 A CN 201910681672A CN 110489258 A CN110489258 A CN 110489258A
- Authority
- CN
- China
- Prior art keywords
- stack
- register
- slippage
- registers
- xtensa
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Withdrawn
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/0703—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
- G06F11/079—Root cause analysis, i.e. error or fault diagnosis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/0703—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
- G06F11/0793—Remedial or corrective actions
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Health & Medical Sciences (AREA)
- Biomedical Technology (AREA)
- Executing Machine-Instructions (AREA)
Abstract
本发明公开了一种基于xtensa处理器的栈回溯方法,包括以下步骤:异常中断或手动触发时保存ar寄存器值和dram信息;采用滑差间隔为N个的ar窗口寄存器倒序恢复现场;采用xtensa处理器函数调用算法,反向恢复栈调用关系。本发明还提供了一种基于xtensa处理器的栈回溯装置。本发明能够实时地在程序异常后,获得程序异常前的函数调用栈信息及异常信息。能够帮助工程师在产品异常情况下,快速定位程序异常原因,能够快速的得到异常情况下的函数调用栈,能够帮助工程师快速、准确的定位bug原因,极大的提高了解决bug的效率,将损失减小到最小。
Description
技术领域
本发明涉及嵌入式系统技术领域,尤其是一种基于xtensa处理器的栈回溯方法及装置。
背景技术
产品在实际运行过程中,会存在程序出现异常的可能性。但是往往会缺少一种手段能够获得异常情况下程序的调用栈信息,以及异常原因,使程序bug的定位变的异常艰难。不同处理器的调用栈获取方式和处理器本身的函数调用方式息息相关,基于arm的处理器栈回溯是相对简单的,调用信息是在栈上的,是可寻址的,是空间上的回溯。根据xtensa处理器特性,在程序出现异常后,程序会跳转到异常中断执行,在异常中断中保存所有的ar寄存器,并将128K的DRAM信息保存到DDR。除了在异常情况下(比如除零异常、内存访问异常、指令异常等)进行保存外,还支持在其他情况下的手动触发保存,这需要不仅能获得64个ar寄存器值,还需要保证不能破坏现场(所有ar寄存器值),然而xtensa处理器每次只有16个寄存器可见,并且无法通过寻址的方式找到其他寄存器,必须通过移动窗口,回退到之前的函数调用点的窗口下,需要时间+空间的回溯。要想保存这16个寄存器,必然在保存过程中需要使用其中的2~3个寄存器,这样就破坏了现场。当我们回退到某个窗口下时,就不得不破坏ar寄存器现场去保存调用关系。
发明内容
本发明的目的是提供一种基于xtensa处理器的栈回溯方法及装置,能够快速的得到异常情况下的函数调用栈,能够帮助工程师快速、准确的定位bug原因,极大的提高了解决bug的效率,将损失减小到最小。
为实现上述目的,本发明采用下述技术方案:
本发明第一方面提供了一种基于xtensa处理器的栈回溯方法,包括以下步骤:
异常中断或手动触发时保存ar寄存器值和dram信息;
采用滑差间隔为N个的ar窗口寄存器倒序恢复现场;
采用xtensa处理器函数调用算法,反向恢复栈调用关系。
结合第一方面,在第一方面第一种可能的实现方式中,所述异常包括:内存访问异常、除零异常、非对齐异常、非法指令异常。
结合第一方面,在第一方面第二种可能的实现方式中,所述采用滑差间隔为N个的ar窗口寄存器倒序恢复现场,具体包括:
采用滑差间隔为四个的ar窗口寄存器倒序恢复ar物理寄存器值至DARM;
将DRAM信息保存到DDR。
结合第一方面,在第一方面第三种可能的实现方式中,所述采用滑差间隔为四个的ar窗口寄存器倒序恢复ar物理寄存器值至DARM,具体包括:
使用当前现场的ar4~ar7窗口寄存器保存当前现场的ar0~ar3窗口寄存器值,再向前滑四个寄存器,直到保存到最起始的ar寄存器值为止,所述最起始的ar寄存器为异常中断现场下的ar物理寄存器或手动触发时中断处理函数所在现场下的ar物理寄存器;
保存完成后,向后滑差四个寄存器后,使用之前保存寄存器值来恢复ar0~ar3物理寄存器,直到恢复到最近的ar寄存器值,所述最近的ar寄存器为当前现场的ar0-ar3窗口寄存器对应的ar物理寄存器。
结合第一方面,在第一方面第四种可能的实现方式中,所述采用滑差间隔为四个的ar窗口寄存器倒序恢复ar物理寄存器值至DARM,具体包括:
通过设置寄存器windowbase和windowstart的数值完成窗口寄存器的移动。
结合第一方面,在第一方面第五种可能的实现方式中,所述采用xtensa处理器函数调用算法,反向恢复栈调用关系,具体包括:
从当前函数使用的ar1物理寄存器中获取栈地址,通过栈地址恢复上一级函数的ar0-ar7物理寄存器,上一级函数的a0代表是该函数的返回地址,计算出上一级函数调用地址=a0-3。
本发明第二方面提供一种基于xtensa处理器的栈回溯装置,包括:
异常保存模块,异常中断或手动触发时保存ar寄存器值和dram信息;
现场滑差恢复模块,采用滑差间隔为N个的ar窗口寄存器倒序恢复现场;
调用关系恢复模块,采用xtensa处理器函数调用算法,反向恢复栈调用关系。
本发明第二方面的所述基于xtensa处理器的栈回溯装置能够实现第一方面及第一方面的各实现方式中的方法,并取得相同的效果。
发明内容中提供的效果仅仅是实施例的效果,而不是发明所有的全部效果,上述技术方案中的一个技术方案具有如下优点或有益效果:
本发明在异常中断中保存ar寄存器值和dram信息,并采用了滑差移动保存的算法恢复现场,且利用xtensa处理器函数调用算法,反向恢复栈调用关系,通过这种方式一级一级的递归,找到源头后,递归返回时恢复现场。能够实时地在程序异常后,获得程序异常前的函数调用栈信息及异常信息。能够帮助工程师在产品异常情况下,快速定位程序异常原因,能够快速的得到异常情况下的函数调用栈,能够帮助工程师快速、准确的定位bug原因,极大的提高了解决bug的效率,将损失减小到最小。
附图说明
图1是本发明方法实施例流程图;
图2是本发明装置实施例示意图。
具体实施方式
为能清楚说明本方案的技术特点,下面通过具体实施方式,并结合其附图,对本发明进行详细阐述。下文的公开提供了许多不同的实施例或例子用来实现本发明的不同结构。为了简化本发明的公开,下文中对特定例子的部件和设置进行描述。此外,本发明可以在不同例子中重复参考数字和/或字母。这种重复是为了简化和清楚的目的,其本身不指示所讨论各种实施例和/或设置之间的关系。应当注意,在附图中所图示的部件不一定按比例绘制。本发明省略了对公知组件和处理技术及工艺的描述以避免不必要地限制本发明。
如图1所示,一种基于xtensa处理器的栈回溯方法,包括以下步骤:
S1、异常中断或手动触发时保存ar寄存器值和dram信息。
异常包括:内存访问异常、除零异常、非对齐异常、非法指令异常。
S2、采用滑差间隔为N个的ar窗口寄存器倒序恢复现场。
S3、采用xtensa处理器函数调用算法,反向恢复栈调用关系。
为了说明栈回溯的具体实现,需要先说明下xtensa处理器是如何进行函数调用和相关栈保存的。xtensa处理器有64个ar寄存器,但是每次可见的只有16个,并且总是ar0~15,每一次函数调用都会根据调用方式的不同选择滑动窗口,大小可能是4、8或12,例如,如果采用call8(当然还有可能是call4、call12)的调用方式,如果当前的窗口为ar0~15,则调用函数后会将窗口滑到ar8~23,会将ar8~23作为当前的ar0~15;再说明下ar0~15分别代表的含义,ar0可以简单的认为是函数的返回地址,它等于函数的调用地址(addr_A)加3,我们要得到的地址addr_A=ar0–3;ar1等于函数的栈顶指针;其它的ar2~15可能包含函数的传入参数,及函数执行相关的变量。
函数的调用在C语法层面是不会限制调用深度的,但是xtensa处理器的ar寄存器一共就64个,是如何保证所有的调用关系会被记录的?xtensa处理器在64个寄存器都用尽后,继续循环使用,但是会将被覆盖的ar寄存器值根据特定的规则保存到栈上。在函数调用返回时将其从栈中恢复。
根据xtensa处理器特性,在程序出现异常后,程序会跳转到异常中断执行,在异常中断中保存所有的ar寄存器,并将128K的DRAM信息保存到DDR。除了在异常情况下(比如除零异常、内存访问异常、指令异常等)进行保存外,还支持在其他情况下的手动触发保存,这需要不仅能获得64个ar寄存器值,还需要保证不能破坏现场(所有ar寄存器值)。手动触发保存是在中断中执行的。当收到下发的触发命令后,立即执行相关保存,因命令处理是在中断中执行,所以能够处理栈回溯任务。
步骤S2中,采用滑差间隔为N个的ar窗口寄存器倒序恢复现场,具体包括:
S21、采用滑差间隔为四个的ar窗口寄存器倒序恢复ar物理寄存器值至DARM;
S22、将DRAM信息保存到DDR。
步骤S21中,采用滑差间隔为四个的ar窗口寄存器倒序恢复ar物理寄存器值至DARM,具体包括:
使用当前现场的ar4~ar7窗口寄存器保存当前现场的ar0~ar3窗口寄存器值,再向前滑四个寄存器,直到保存到最起始的ar寄存器值为止,所述最起始的ar寄存器为异常中断现场下的ar物理寄存器或手动触发时中断处理函数所在现场下的ar物理寄存器。
因为每次只保存4个寄存器a0~a3,都会牺牲a4~a7的值,在保存完所有需要保存的值后,除了当前的a0~a3,其它的现场都发生改变,这样需要将之前保存的ar寄存器值逐个恢复。
保存完成后,向后滑差四个寄存器后,使用之前保存寄存器值来恢复ar0~ar3物理寄存器,直到恢复到最近的ar寄存器值,所述最近的ar寄存器为当前现场的ar0-ar3窗口寄存器对应的ar物理寄存器。
举例说明:假设当前现场在ar48-ar63物理寄存器,即与当前现场的ar0-ar15窗口寄存器对应关系为ar48物理寄存器对应ar0窗口寄存器,ar49物理寄存器对应ar1窗口寄存器,ar50物理寄存器对应ar2窗口寄存器,ar51物理寄存器对应ar3窗口寄存器....
ar56-ar59可以破坏,使用ar56-ar59物理寄存器保存ar52-ar55寄存器值;
...
移动窗口至ar40-ar43,使用ar44-ar47保存ar40-ar43寄存器值;
...
移动窗口至ar0-ar3,使用ar4-ar7保存ar0-ar3寄存器值;
移动窗口至ar4-ar7,使用之前保存的ar8-ar11寄存器值恢复ar4-ar7寄存器,使用该方式恢复到ar52-ar55,ar56-ar59可以不用恢复。
具体地,通过设置寄存器windowbase和windowstart的数值完成窗口寄存器的移动。调节窗口需要两个寄存器,分别为:windowbase和windowstart,windowbase:低4位有效,范围为:0~f。windowstart:低16位有效,范围为:0~0xffff。当移动窗口时,例如,windowbase=3,则windowstart|=0x01<<3如果windowbase=0x7,windowstart=0xaa;那么当前的ar寄存器窗口在arphysical寄存器的28~43,如果想移动当前的窗口到24~39,那么需要将windowbase=0x6,windowstart=0x6a;如果想移动当前的窗口到20~35,那么需要将windowbase=0x5,windowstart=0x2a。
步骤S3中,采用xtensa处理器函数调用算法,反向恢复栈调用关系,具体包括:
从当前函数使用的ar1物理寄存器中获取栈地址,通过栈地址恢复上一级函数的ar0-ar7物理寄存器,上一级函数的a0代表是该函数的返回地址,计算出上一级函数调用地址=a0-3。
举例:foo_1()->foo_2()->foo_3()->foo_4(),foo_2()的a0~a3会保存在foo_3()的栈顶指针-16的位置,那它的a4~a7(如果有的话)会保存在foo_3()的栈顶-32的位置。这样我们如果想回溯foo_2()的a0~a7,只需知道要下一级函数foo_3的栈顶地址即可。这个也是在stack上回溯代码的原理。我们通过这种方式一级一级的递归,找到源头后,递归返回时恢复现场。
如图2所示,一种基于xtensa处理器的栈回溯装置,包括:
异常保存模块101,异常中断或手动触发时保存ar寄存器值和dram信息;
现场滑差恢复模块102,采用滑差间隔为N个的ar窗口寄存器倒序恢复现场;
调用关系恢复模块103,采用xtensa处理器函数调用算法,反向恢复栈调用关系。
上述虽然结合附图对本发明的具体实施方式进行了描述,但并非对本发明保护范围的限制,所属领域技术人员应该明白,在本发明的技术方案的基础上,本领域技术人员不需要付出创造性劳动即可做出的各种修改或变形仍在本发明的保护范围以内。
Claims (7)
1.一种基于xtensa处理器的栈回溯方法,其特征是,包括以下步骤:
异常中断或手动触发时保存ar寄存器值和dram信息;
采用滑差间隔为N个的ar窗口寄存器倒序恢复现场;
采用xtensa处理器函数调用算法,反向恢复栈调用关系。
2.如权利要求1所述的基于xtensa处理器的栈回溯方法,其特征是,所述异常包括:内存访问异常、除零异常、非对齐异常、非法指令异常。
3.如权利要求1所述的基于xtensa处理器的栈回溯方法,其特征是,所述采用滑差间隔为N个的ar窗口寄存器倒序恢复现场,具体包括:
采用滑差间隔为四个的ar窗口寄存器倒序恢复ar物理寄存器值至DARM;
将DRAM信息保存到DDR。
4.如权利要求3所述的基于xtensa处理器的栈回溯方法,其特征是,所述采用滑差间隔为四个的ar窗口寄存器倒序恢复ar物理寄存器值至DARM,具体包括:
使用当前现场的ar4~ar7窗口寄存器保存当前现场的ar0~ar3窗口寄存器值,再向前滑四个寄存器,直到保存到最起始的ar寄存器值为止,所述最起始的ar寄存器为异常中断现场下的ar物理寄存器或手动触发时中断处理函数所在现场下的ar物理寄存器;
保存完成后,向后滑差四个寄存器后,使用之前保存寄存器值来恢复ar0~ar3物理寄存器,直到恢复到最近的ar寄存器值,所述最近的ar寄存器为当前现场的ar0-ar3窗口寄存器对应的ar物理寄存器。
5.如权利要求4所述的基于xtensa处理器的栈回溯方法,其特征是,所述采用滑差间隔为四个的ar窗口寄存器倒序恢复ar物理寄存器值至DARM,具体包括:
通过设置寄存器windowbase和windowstart的数值完成窗口寄存器的移动。
6.如权利要求5所述的基于xtensa处理器的栈回溯方法,其特征是,所述采用xtensa处理器函数调用算法,反向恢复栈调用关系,具体包括:
从当前函数使用的ar1物理寄存器中获取栈地址,通过栈地址恢复上一级函数的ar0-ar7物理寄存器,上一级函数的a0代表是该函数的返回地址,计算出上一级函数调用地址=a0-3。
7.一种基于xtensa处理器的栈回溯装置,其特征是,包括:
异常保存模块,异常中断或手动触发时保存ar寄存器值和dram信息;
现场滑差恢复模块,采用滑差间隔为N个的ar窗口寄存器倒序恢复现场;
调用关系恢复模块,采用xtensa处理器函数调用算法,反向恢复栈调用关系。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910681672.6A CN110489258A (zh) | 2019-07-26 | 2019-07-26 | 一种基于xtensa处理器的栈回溯方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910681672.6A CN110489258A (zh) | 2019-07-26 | 2019-07-26 | 一种基于xtensa处理器的栈回溯方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110489258A true CN110489258A (zh) | 2019-11-22 |
Family
ID=68547688
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910681672.6A Withdrawn CN110489258A (zh) | 2019-07-26 | 2019-07-26 | 一种基于xtensa处理器的栈回溯方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110489258A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112732481A (zh) * | 2020-12-31 | 2021-04-30 | 南方电网科学研究院有限责任公司 | 一种处理器的异常修复方法及装置 |
-
2019
- 2019-07-26 CN CN201910681672.6A patent/CN110489258A/zh not_active Withdrawn
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112732481A (zh) * | 2020-12-31 | 2021-04-30 | 南方电网科学研究院有限责任公司 | 一种处理器的异常修复方法及装置 |
CN112732481B (zh) * | 2020-12-31 | 2023-10-10 | 南方电网科学研究院有限责任公司 | 一种处理器的异常修复方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101937372B (zh) | 异常处理的方法及装置 | |
US20160188723A1 (en) | Cloud website recommendation method and system based on terminal access statistics, and related device | |
CN104462517A (zh) | 数据同步方法及装置 | |
EP3451156B1 (en) | Apparatus and method for executing vector circular shift operation | |
US9547881B2 (en) | Systems and methods for calculating a feature descriptor | |
CN104580451A (zh) | 实现多平台间账号同步的方法和系统、及电子设备 | |
CN103577546A (zh) | 一种数据备份的方法、设备及分布式集群文件系统 | |
CN108984328A (zh) | 一种堆栈回溯的方法及装置 | |
CN111881012A (zh) | 一种日志记录方法、装置、设备及存储介质 | |
CN110489258A (zh) | 一种基于xtensa处理器的栈回溯方法及装置 | |
CN106648839B (zh) | 数据处理的方法和装置 | |
CN114860654A (zh) | 一种基于Flink数据流的Iceberg表Schema动态变更方法及系统 | |
CN110908837B (zh) | 应用程序异常处理方法、装置、电子设备及存储介质 | |
CN106294089A (zh) | 辅助对被监控内存空间的访问监控的方法和装置 | |
CN107085516A (zh) | 一种修改配置的方法及装置 | |
US20070150866A1 (en) | Displaying parameters associated with call statements | |
CN107239298A (zh) | 应用程序调试方法及装置 | |
CN116501387B (zh) | 一种指令跳转方法、装置、电子设备及可读存储介质 | |
CN110187884B (zh) | 一种多线程应用场景下的访存指令插桩优化方法 | |
CN111708576A (zh) | 跨操作系统的设备网卡适配和管理方法、装置及系统 | |
CN111899149A (zh) | 基于算子融合的图像处理方法和装置、存储介质 | |
US20090271801A1 (en) | Split stage call sequence restoration method | |
US20220164272A1 (en) | Application program management method and apparatus, and storage medium | |
US9256626B2 (en) | Maintaining multiple copy versions of component values in a system | |
CN116088863B (zh) | 故障定位方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WW01 | Invention patent application withdrawn after publication |
Application publication date: 20191122 |
|
WW01 | Invention patent application withdrawn after publication |