一种用于mips架构cpu的热补丁的方法和设备的制造方法

文档序号:10512082阅读:356来源:国知局
一种用于mips架构cpu的热补丁的方法和设备的制造方法
【专利摘要】本发明提供一种用于无内部互锁流水级的微处理器MIPS架构CPU的热补丁的方法,所述方法包括:扫描系统各任务栈,检测被打补丁函数是否被打断;当所述被打补丁函数未被打断时,将所述被打补丁函数的第一条指令修改为断点指令并捕捉异常信号;当捕捉到异常信号时,将所述被打补丁函数的第一条指令修改为跳转指令,将所述被打补丁函数的第二条指令修改为空指令。上述技术方案对两条运行指令进行了原子修改,使CPU可以保证跳转到热补丁区,从而解决了MIPS架构CPU的热补丁时由于延时槽而导致的系统运行错误的问题。
【专利说明】
一种用于MIPS架构CPU的热补丁的方法和设备
技术领域
[0001]本发明涉及通信领域,具体涉及用于MIPS架构CPU热补丁的方法和设备。
【背景技术】
[0002]热补丁技术的出现解决了在硬件设备不复位的情况下也能够完成产品软件缺陷修正的难题。已公开的热补丁技术有多种方案,较常见的热补丁技术是借助指令替换将位于函数开头的指令替换成跳转指令,跳转到补丁区。常见的典型补丁技术方案如下:
[0003]1.将补丁函数funcB重新编译,生成可定位的目标文件fileB。
[0004]2.在目标机中解析目标文件fileB,提取出代码段、data段和bss段到内存中。
[0005]3.分析目标机中的内存符号表地址,解析出被打补丁函数funcA的地址。
[0006]4.修改被打补丁函数funcA的首指令为跳转指令,跳转到补丁函数funcB。
[0007]这种传统的热补丁技术可以应用于目前市场上的大多数CPU硬件架构,但如果应用于 MIPS (Microprocessor Without Interlocked Piped Stages,无内部互锁流水级微处理器)架构CPU可能会导致系统运行错误。原因是由于MIPS架构CPU的跳转指令有一个延时槽问题,如果按照传统的热补丁修改方法将第一条指令修改为跳转指令,会导致CPU先执行后面的第二条指令而无法跳转到热补丁区,造成系统运行错误。

【发明内容】

:
[0008]本发明提供一种用于MIPS架构CPU的热补丁的方法和设备,以解决MIPS架构CPU的热补丁的问题。
[0009]为解决上述技术问题,本发明提供一种用于无内部互锁流水级微处理器MIPS架构CPU的热补丁的方法,所述方法包括:
[0010]扫描系统各任务栈,检测被打补丁函数是否被打断;
[0011]当所述被打补丁函数未被打断时,将所述被打补丁函数的第一条指令修改为断点指令并捕捉异常信号;
[0012]当捕捉到异常信号时,将所述被打补丁函数的第一条指令修改为跳转指令,将所述被打补丁函数的第二条指令修改为空指令。
[0013]优选地,
[0014]所述将所述被打补丁函数的第一条指令修改为跳转指令,将所述被打补丁函数的第二条指令修改为空指令后还包括:
[0015]当进行热补丁处理时,所述被打补丁函数通过所述跳转指令调转到补丁区进行处理。
[0016]优选地,
[0017]所述将所述被打补丁函数的第一条指令修改为跳转指令,将所述被打补丁函数的第二条指令修改为空指令包括:
[0018]在异常处理函数中将所述被打补丁函数的第一条指令修改为跳转指令,将所述被打补丁函数的第二条指令修改为空指令。
[0019]优选地,
[0020]所述扫描系统各任务栈,检测被打补丁函数是否被打断后还包括:
[0021]当所述被打补丁函数被打断时,继续扫描系统各任务栈。
[0022]优选地,
[0023]断点指令为breakpoint指令,跳转指令为跳转到补丁区的jump指令,空指令为nop指令。
[0024]本发明还提供一种用于无内部互锁流水级微处理器MIPS架构CPU的热补丁的设备,其特征在于,所述设备包括:
[0025]检测模块,用于扫描系统各任务栈,检测被打补丁函数是否被打断;
[0026]修改模块,用于当所述被打补丁函数未被打断时,将所述被打补丁函数的第一条指令修改为断点指令并捕捉异常信号;
[0027]处理模块,用于当捕捉到异常信号时,将被打补丁函数的第一条指令修改为跳转指令,将所述被打补丁函数的第二条指令修改为空指令。
[0028]优选地,
[0029]所述处理模块还用于当进行热补丁处理时,所述被打补丁函数通过所述跳转指令调转到补丁区进行处理。
[0030]优选地,
[0031]所述处理模块用于当捕捉到异常信号时,将所述被打补丁函数的第一条指令修改为跳转指令,将所述被打补丁函数的第二条指令修改为空指令是指:
[0032]在异常处理函数中将所述被打补丁函数的第一条指令修改为跳转指令,将所述被打补丁函数的第二条指令修改为空指令。
[0033]优选地,
[0034]所述检测模块还用于当所述被打补丁函数被打断时,继续扫描系统各任务栈。
[0035]优选地,
[0036]断点指令为breakpoint指令,跳转指令为跳转到补丁区的jump指令,空指令为nop指令。
[0037]上述技术方案对两条运行指令进行了原子修改,使CPU可以保证跳转到热补丁区,从而解决了 MIPS架构CPU的热补丁时由于延时槽而导致的系统运行错误的问题。
【附图说明】
[0038]图1为本发明实施例一中的热补丁原理示意图。
[0039]图2为本发明实施例一中用于MIPS架构CPU的热补丁的方法的流程图;
[0040]图3为本发明实施例一中用于MIPS架构CPU的热补丁的设备的结构示意图。
【具体实施方式】
[0041]为使本申请的目的、技术方案和优点更加清楚明白,下文中将结合附图对本申请的实施例进行详细说明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。
[0042]实施例一
[0043]为解决MIPS架构CPU的热补丁的问题,本发明的技术方案将第一条指令修改为跳转指令,将第二条指令修改为空指令,通过将两条运行指令进行原子修改可以保证CPU跳转到热补丁区,有效的避免系统运行错误。
[0044]如图1和图2所示,本发明提供一种用于MIPS架构CPU的热补丁的方法,所述方法包括:
[0045]步骤SlOO:扫描系统各任务栈,检测被打补丁函数是否被打断;
[0046]当被打补丁函数未被打断时,将所述被打补丁函数的第一条指令修改为断点指令。如果检测到被打补丁函数被打断了,则不进行修改操作,而是继续进行系统各任务栈的扫描,直到检测到没有被打补丁函数被打断。
[0047]步骤SlOl:当所述被打补丁函数未被打断时,将所述被打补丁函数的第一条指令修改为断点指令并捕捉异常信号;
[0048]步骤S102:当捕捉到异常信号时,将所述被打补丁函数的第一条指令修改为跳转指令,将所述被打补丁函数的第二条指令修改为空指令。
[0049]具体的,在异常处理函数中将被打补丁函数的第一条指令修改为跳转指令,将被打补丁函数的第二条指令修改为空指令。
[0050]需要说明的是,如果有任务曾经调用过被打补丁函数,并且被打断在第二条指令上,在把被打补丁函数的第二条指令修改为空指令后,如果该任务恢复继续执行被打补丁函数的话,则会从空指令开始执行,这样就会导致系统运行错误。因此需要先确认被打补丁函数是否被打断过。
[0051]在所有系统任务经扫描后确认被打补丁函数是否被打断过,如被打补丁函数没有被打断后激活补丁,修改被打补丁函数的第一条指令为断点指令,即breakpoint指令。当被打补丁函数被调用的时候进入捕捉异常产生断点。用户态捕获到异常信号后进入异常处理函数,异常处理函数将被打补丁函数funcA的第一条指令修改为跳转到补丁区的跳转指令即jump指令,将第二条指令修改为空指令即nop指令。由于是被打补丁函数自身触发的,因此可以保证两条指令被原子修改。
[0052]优选地,还可包括:
[0053]步骤S103:当进行热补丁处理时,所述被打补丁函数通过所述跳转指令调转到补丁区进行处理。
[0054]如图3所示,本发明还提供一种用于MIPS架构CPU的热补丁的设备,所述设备包括:
[0055]检测模块11,用于捕捉异常信号;
[0056]修改模块12,用于扫描系统各任务栈,检测被打补丁函数是否被打断;还用于当被打补丁函数未被打断时,将所述被打补丁函数的第一条指令修改为断点指令;
[0057]处理模块13,用于当捕捉到异常信号时,将所述被打补丁函数的第一条指令修改为跳转指令,将所述被打补丁函数的第二条指令修改为空指令。
[0058]具体的,断点指令为breakpoint指令,跳转指令为跳转到补丁区的jump指令,空指令为nop指令。
[0059]其中,在具体实现时,在异常处理函数中将所述被打补丁函数的第一条指令修改为跳转指令,将所述被打补丁函数的第二条指令修改为空指令。
[0060]优选地,处理模块13还用于当进行热补丁处理时,通过所述跳转指令调转到补丁区进行处理。
[0061]检测模块还用于当所述被打补丁函数被打断时,继续扫描系统各任务栈。
[0062]上述技术方案对被打补丁函数的两条运行指令进行了原子修改,从而解决了 MIPS架构CPU热补丁时由于延时槽而导致的无法跳转到热补丁区的问题,保证了系统的正常运行。
[0063]以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。本领域普通技术人员可以理解上述方法中的全部或部分步骤可通过程序来指令相关硬件完成,所述程序可以存储于计算机可读存储介质中,如只读存储器、磁盘或光盘等。可选地,上述实施例的全部或部分步骤也可以使用一个或多个集成电路来实现,相应地,上述实施例中的各模块/模块可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。本申请不限制于任何特定形式的硬件和软件的结合。
【主权项】
1.一种用于无内部互锁流水级微处理器MIPS架构CPU的热补丁的方法,其特征在于,所述方法包括: 扫描系统各任务栈,检测被打补丁函数是否被打断; 当所述被打补丁函数未被打断时,将所述被打补丁函数的第一条指令修改为断点指令并捕捉异常信号; 当捕捉到异常信号时,将所述被打补丁函数的第一条指令修改为跳转指令,将所述被打补丁函数的第二条指令修改为空指令。2.如权利要求1所述的方法,其特征在于: 所述将所述被打补丁函数的第一条指令修改为跳转指令,将所述被打补丁函数的第二条指令修改为空指令后还包括: 当进行热补丁处理时,所述被打补丁函数通过所述跳转指令调转到补丁区进行处理。3.如权利要求2所述的方法,其特征在于: 所述将所述被打补丁函数的第一条指令修改为跳转指令,将所述被打补丁函数的第二条指令修改为空指令包括: 在异常处理函数中将所述被打补丁函数的第一条指令修改为跳转指令,将所述被打补丁函数的第二条指令修改为空指令。4.如权利要求3所述的方法,其特征在于: 所述扫描系统各任务栈,检测被打补丁函数是否被打断后还包括: 当所述被打补丁函数被打断时,继续扫描系统各任务栈。5.如权利要求4所述的方法,其特征在于: 断点指令为breakpoint指令,跳转指令为跳转到补丁区的jump指令,空指令为nop指令。6.一种用于无内部互锁流水级微处理器MIPS架构CPU的热补丁的设备,其特征在于,所述设备包括: 检测模块,用于扫描系统各任务栈,检测被打补丁函数是否被打断; 修改模块,用于当所述被打补丁函数未被打断时,将所述被打补丁函数的第一条指令修改为断点指令并捕捉异常信号; 处理模块,用于当捕捉到异常信号时,将被打补丁函数的第一条指令修改为跳转指令,将所述被打补丁函数的第二条指令修改为空指令。7.如权利要求6所述的设备,其特征在于: 所述处理模块还用于当进行热补丁处理时,所述被打补丁函数通过所述跳转指令调转到补丁区进行处理。8.如权利要求7所述的设备,其特征在于: 所述处理模块用于当捕捉到异常信号时,将所述被打补丁函数的第一条指令修改为跳转指令,将所述被打补丁函数的第二条指令修改为空指令是指: 在异常处理函数中将所述被打补丁函数的第一条指令修改为跳转指令,将所述被打补丁函数的第二条指令修改为空指令。9.如权利要求8所述的设备,其特征在于: 所述检测模块还用于当所述被打补丁函数被打断时,继续扫描系统各任务栈。10.如权利要求9所述的设备,其特征在于:断点指令为breakpoint指令,跳转指令为跳转到补丁区的jump指令,空指令为nop指 令。
【文档编号】G06F11/36GK105868094SQ201510030443
【公开日】2016年8月17日
【申请日】2015年1月20日
【发明人】邓娟, 陈林海, 朱伟
【申请人】中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1