[发明专利]Linux系统崩溃时内核函数调用栈分析调试方法有效
申请号: | 201310069706.9 | 申请日: | 2013-03-05 |
公开(公告)号: | CN103106132A | 公开(公告)日: | 2013-05-15 |
发明(设计)人: | 张志 | 申请(专利权)人: | 中标软件有限公司 |
主分类号: | G06F11/34 | 分类号: | G06F11/34;G06F11/36 |
代理公司: | 北京聿宏知识产权代理有限公司 11372 | 代理人: | 吴大建;钟日红 |
地址: | 200030 上海*** | 国省代码: | 上海;31 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | linux 系统 崩溃 内核 函数 调用 分析 调试 方法 | ||
技术领域
本发明涉及Linux操作系统内核技术、编译器技术和MIPS体系结构技术,具体地,说涉及一种MIPS构架下Linux系统崩溃时内核函数调用栈分析调试方法。
背景技术
随着国家对自主可控的不断重视,MIPS构架的龙芯处理器得到越来越深入的推广,解决其软件支持和调试能力的问题显得越来越重要,特别是支持在其上运行Linux操作系统。现有的crash调试工具不能很好地支持在国产MIPS构架的龙芯服务器下实现崩溃内核函数调用分析与调试功能。在不能对系统崩溃时的函数调用栈进行分析的情况下,内核开发人员找出并解决系统的崩溃原因的详细信息将是十分困难的。
在传统技术中,会根据函数调用时被保存到帧指针寄存器中的栈指针寄存器的内容、以及在栈空间中保存的用于保存栈指针寄存器的内容之前帧指针寄存器的内容,来对系统崩溃时的函数调用栈进行分析。这样就能够找出函数调用关系(参考图3示出的带帧指针函数调用栈结构示意图)。然而,为了节省一个寄存器,MIPS构架下龙芯内核编译时gcc可以不分配帧指针寄存器,这样可以在寄存器分配时节省一个寄存器,提高系统性能,但却使得不能通过帧指针来分析栈空间中的函数调用关系。如何在即使不分配帧指针寄存器时也能够准确快速地分析栈空间中的函数调用关系,是一个推动MIPS架构处理器发展的关键的技术问题。
具体地,在传统的函数调用栈分析调试中使用了帧指针寄存器,在函数调用时,将帧指针寄存器保存的栈空间中,可以得到一个函数帧的大小,但是这样会浪费一个寄存器,这样会导致性能下降,GCC编译器有一个功能omit-frame-pointer,不使用帧寄存器,这样就可以节约一个寄存器,可以提高系统性能,但是在分析函数调用栈时就不好找到函数的帧。因此,研究崩溃内核函数调用栈是一件很有实用价值和意义的工作。
发明内容
本发明所要解决的技术问题之一是需要提供一种能够在系统崩溃时即使不分配帧指针寄存器也能够快速分析栈空间中的函数调用关系的Linux系统崩溃时内核函数调用栈分析调试方法。
为了解决上述技术问题,本发明提供了一种Linux系统崩溃时内核函数调用栈分析调试方法。该方法包括:
读取带调试信息的内核和Linux系统崩溃时的内核转储文件;
读取Linux系统崩溃时函数栈指针寄存器r29的值,根据栈指针寄存器r29获取指向系统崩溃时正在运行的函数的函数返回地址;
判断当前程序计数器所指向的指令是否满足操作码是daddiu指令且源和目的操作数均是栈指针寄存器r29,若判断为满足,则解析出该当前指令中的immediate字段,并对immediate字段进行符号扩展,将扩展后immediate字段的与栈指针寄存器r29的值相减,得出函数栈帧的大小;
将栈指针寄存器r29中的值与所得出的函数栈帧的大小相减,得到当前函数的上一个函数的地址。
进一步,对函数调用栈进行分析调试的处理包括:根据函数的函数返回地址,查找带调试信息的内核中的符号表,得到当前函数的名称;根据函数的名称确定函数的参数;以及根据所确定的函数的参数,从函数调用栈中读取传递给函数的参数。
进一步,在读取带调试信息的内核和Linux系统崩溃时的内核转储文件之前,还包括:
在Linux系统崩溃时,利用kdump转储内核并通过makedumpfile对所转储的内核进行压缩,得到所述内核转储文件。
进一步,所述Linux系统不使用帧寄存器。
进一步,所述Linux系统具体为MIPS构架下的Linux系统。
进一步,所述Linux系统具体为安装于龙芯平台的MIPS构架下的Linux系统。
此外,所述读取Linux系统崩溃时函数栈指针寄存器r29的值的步骤进一步包括:通过读取崩溃进程的thread_info结构中的kpc成员来读取栈指针寄存器r29的内容。
进一步,该方法还可包括:若判断为不满足,则将程序计数器加4,继续判断当前程序计数器所指向的指令是否满足操作码是daddiu指令且源和目的操作数均是栈指针寄存器r29。
其中,所述Linux系统是进行了如下编译选项设置而编译得到的Linux系统:
选中了CONFIG_KEXEC_CRASH、CONFIG_KEXEC、CONFIG_SYSFS、CONFIG_DEBUG_INFO选项。
与现有技术相比,本发明的一个或多个实施例可以具有如下优点:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中标软件有限公司,未经中标软件有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201310069706.9/2.html,转载请声明来源钻瓜专利网。
- 上一篇:治疗皮肤溃疡的中药制剂及其制备方法
- 下一篇:换气装置安装结构