使用执行单一步骤来诊断编码的制作方法

文档序号:6494631阅读:195来源:国知局
使用执行单一步骤来诊断编码的制作方法
【专利摘要】本发明公开一种用于诊断处理指令流的处理器的方法和设备。方法包括:(i)控制所述处理器以单步骤模式执行,从而来自所述指令流的单个指令被执行,所述处理器判定所述单个指令是否为至少一种预定类型中的一种的指令并且在数据储存位置处储存类型指示符,并且在所述处理器已处理所述单个指令之后发生诊断异常;(ii)在所述诊断异常之后执行诊断操作,包括:访问储存于所述数据储存位置中的所述类型指示符;以及(iiia)响应于指示所述单个指令并非所述预定类型中的一种的所述类型指示符,控制所述处理器继续以所述单步骤模式执行指令,从而在从所述诊断异常返回之后执行下一单个指令;(iiib)响应于指示所述单个指令为所述至少一种预定类型中的一种的所述类型指示符,控制所述处理器退出所述单步骤模式并且不执行作为后面跟随着诊断异常的单个指令的所述指令流内的下一指令。
【专利说明】使用执行单一步骤来诊断编码
【技术领域】
[0001]本发明的【技术领域】涉以及数据处理,具体而言涉以及在数据处理设备上执行诊断操作。
【背景技术】
[0002]已知提供具有诊断机制的数据处理系统,以便帮助开发硬件、操作系统、应用程序、整体系统设计等,诊断机制可用以在数据处理系统上执行诊断操作(例如,软件以及硬件故障识别以及分析(除错))。
[0003]当分析数据处理系统时,可使用外部除错器,外部除错器包括在主机系统上执行的除错程序,主机系统连接至将被分析的目标系统,从而指定将在系统上执行诊断操作的控制信号从主机传递至系统。
[0004]外部除错器涉以及正经由外部端口连接至目标的除错器,外部端口随后用以程序设计除错硬件。处理器被配置为使得视为诊断异常的除错事件引起进入特殊除错状态,在特殊除错状态下,数据处理设备由外部除错器讯问以及控制。
[0005]或者,可能存在自托管除错系统,在自托管除错系统中,在正被除错的目标上执行除错监控软件。在此情况下,处理器被配置为使得除错事件引起诊断异常,诊断异常中断正被除错的软件并且将控制传递至除错监控软件。有用的诊断工具为控制处理器以单一步骤通过程序的能力。这允许在需要情况下在过程的每一步骤处分析系统状态。在单步骤模式中,处理器将执行指令,并且随后将发生诊断异常,并且控制将传递至除错软件,除错软件可分析处理器的状态。当出现从诊断异常的返回时,随后处理器将执行下个指令,于是将发生下个诊断异常。以此方式,除错软件可控制处理器以单一步骤通过整个程序或仅仅通过分析系统者所关注的部分。
[0006]在单一步骤通过代码时可能产生的一个问题为,如果在指令之间发生异常,则是否遭遇具有不同执行路径的代码。如果不同的执行路径涉以及无限循环,则此状况可能尤其困难。举例而言,尝试主张专属监控器的指令。如果代码成功主张专属监控器,则代码具有对特定储存位置的专属访问并且可在特定储存位置储存数据。因此,为了主张专属监控器,使用特殊的加载专属指令,特殊的加载专属指令既返回储存位置的当前值又设定专属监控器,以便指示当前正在被执行的指令流具有对特定储存位置的专属访问。储存专属指令可随后经执行以将数据储存至此储存位置。然而,在单一步骤通过代码的情况下,一旦已通过设定专属监控器来主张专属监控器,则发生诊断异常,并且在从该异常返回之后,异常处置器将清除专属监控器。此状况是因为当发生异常时,异常处置器可能不会返回至异常处置器先前正在执行的代码,而是将返回至不同的代码,因此,应清除专属监控器,因为将被执行的下个指令流不应具有对储存位置的专属访问。
[0007]然而,在已清除专属监控器的单一步骤中,随后当到达储存专属指令时,储存专属指令将失效,这会触发返回至主张专属监控器的步骤,步骤将主张专属监控器并且随后通过异常返回使专属监控器被清除,因此,在单一步骤中储存专属指令将重复地失效并且程序将永无进展。
[0008]以下给出具有此问题的代码的实例
[0009]
Loop
LDREX R5, [Rl] ; read lock (load-exclusive)
CiMP R5, #0 ; chcck if 0
STREXEQ R5, RO, [Rl] ; attempt to store new value
CMPEQ R5, #0 ; test if store succccdcd
BNE Loop ; retry if not
[0010]得知当处于步骤模式时,在从诊断异常返回之后异常处置器清除专属监控器或锁定位置并且在此代码中产生无限循环所存在的问题,并且通过在步骤通过指令之前扫描指令,在Power以及MIPS架构的⑶B中解决该问题,以判定诸如这些的区块的位置。一旦区块已识别,则使用步骤直到型命令(a step until command),从而在此情况下在储存专属指令之后设定断点,并且在此区块中的指令之间未发生异常,并且锁定位置未由异常处置器清除。
[0011]此解决方案的缺点为,需要检验所有的代码以识别问题代码。此解决方案具有显著的开销,因为诊断系统将需要转至正在控制 指令流的执行的操作系统并且要求操作系统提取代码,以便能够对其进行分析。若诊断设备远离处理设备,则开销将尤其高。
[0012]Power公开了校验寄存器(syndrome register)的使用,当发生步骤异常(在Power架构中称为追踪异常)时,校验寄存器储存关于处理器状态的信息,以允许返回至该状态。校验寄存器储存的一则信息为指示已执行加载专属指令并且在发生异常之前锁定位置的指示符。不存在关于如何使用该值的信息。
[0013]希望能够使用单一步骤过程来诊断代码,甚至在存在以下类型的代码的情况下能够使用单一步骤过程来诊断代码:类型代码的执行路径通过在指令之间发生异常来改变。

【发明内容】

[0014]本发明的第一方面提供一种用于诊断处理器的方法,处理器处理指令流,方法包括:(i)控制处理器以单步骤模式执行,从而执行来自指令流的单个指令,处理器判定单个指令是否为至少一种预定类型中的一种的指令,并且处理器在数据储存位置处储存类型指示符,并且在处理器已处理单个指令之后发生诊断异常;(ii)在诊断异常之后执行诊断操作,执行诊断操作的步骤包括以下步骤:访问储存于数据储存位置中的类型指示符;以及(iiia)响应于指示单个指令并非预定类型中的一种的类型指示符,控制处理器继续以单步骤模式执行指令,从而在从异常返回之后执行下一单个指令;(iiib)响应于指示单个指令为至少一种预定类型中的一种的类型指示符,控制处理器退出单步骤模式并且不执行指令流内的作为后面紧接着诊断异常的单个指令的下个指令。
[0015]本发明认识到,当单一步骤通过代码时可能产生问题,并且在一些情形下,判定在何处单一步骤并非为适当的,并且抑制单一步骤可能是有利的。举例而言,在指令流含有指令的情况下,在指令处,由串流内随后的指令采取的执行路径通过在指令之间发生异常来改变,单一步骤将不为分析该段代码的执行的适当方式并且应受到抑制。还认识到,如果发生异常触发代码以进入冗长的循环,则此状况可能为特定问题。方法通过判定正在被执行的指令是否为预定类型来解决以上问题,并且如果正在被执行的指令为预定类型,则方法不继续进行单一步骤而是执行不同的过程。在许多情况下,可在执行期间判定指令是否为预定类型,并且可在适当情况下抑制单一步骤。
[0016]在一些实施例中,步骤(iiib)包括:控制处理器在从异常返回之后执行指令流内的多个指令。
[0017]为解决改变执行路径的指令之间的异常问题,可适当地抑制用于多个指令的单步骤模式,从而指令全部顺序执行而无异常出现。取决于代码,可选择顺序被执行的指令的数目,并且单步骤模式可返回至指令流中的点处,指令流适合于该代码。
[0018]在一些实施例中,多个指令包括继被执行的单个指令之后的指令流中的多个指令。
[0019]在从异常返回之后执行的多个指令可为继被执行的单个指令之后的指令流中的指令。或者,执行过的指令可能与一些接下来的指令一起再次执行。后者情况仅在判定有可能再执行此指令的情况下是可能的。在一些情况下,此状况可能不可能。然而,如果此状况可能,则再次执行指令而随后无异常紧接于指令之后可能是有利的。
[0020]在一些实施例中,存在另一步骤:响应于指示单个指令为至少一种预定类型中的一种的类型指示符,在指令流内设定至少一个断点,从而执行多个指令,直至到达至少一个断点为止,并且响应于到达至少一个断点,发生诊断断点异常。当检测预定类型的指令时,随后在一些实施例中,可将断点设定在代码中的点处,代码在预定类型的指令之后。随后暂时中止单步骤模式,并且执行指令,直至到达断点为止,于是发生断点诊断异常。响应于此,处理器可在适当情况下返回至单步骤模式,或者,可设定另外的断点,或可能已到达正在测试的代码的末端。
[0021]在一些实施例中,步骤(iiib)包括:仿真被执行的单个指令以及指令流中的至少一个后续指令,并且随后控制处理器从指令流中的指令开始单步骤模式,指令流中的指令在经仿真的至少一个后续指令之后。
[0022]在一些实施例中,指令可能通过例如诊断设备来仿真,而非执行指令,并且一旦已执行这些经仿真的指令,则处理器可被控制以从指令流中的适当指令重新开始单步骤模式。将选择经仿真的指令,以便从指令重新开始单步骤模式,在指令处,在每一指令之间所发生的诊断异常将不会改变指令流如何继续前进。
[0023]在一些实施例中,储存于数据储存位置中的类型指示符指示指令为预定类型中的一种或指令并非为预定类型中的一种或指示指令为未知类型,其中如果在访问类型指示符的步骤中,判定类型指示符指示为未知类型,则执行检验单个指令并且判定单个指令是否为预定类型的额外步骤。
[0024]尽管类型指示符可指示指令是否为预定类型,但类型指示符也可以当指令为未知类型时指示指令是否为预定类型。在后者情况下,随后方法检验指令,以判定指令为何种类型。此举可能需要提取指令,从而可分析指令。尽管此步骤具有与步骤相关联的潜时开销,但仅在少数情况下将指示未知类型,因此,此举将不会增加过度地执行整个诊断方法的开销。
[0025]在一些实施例中,类型指示符包括两个指示符值:第一值以及第二有效值,第一值指示指令为预定类型或并非为预定类型,第二有效值指示第一值是否有效,第二有效值为无效指示指令为未知类型。
[0026]可使用两个值或两个位进行类型指示,其中一个指示类型并且另一个为有效位,有效位换言之当类型位无效时指示类型为未知的。此举可为表示值的便利方式,因为当意味着类型值无法再被依赖的环境出现时,可将有效位简单地设定成无效的。
[0027]在其他实施例中,类型指示可为单一值。此值在一些实施例中可进一步包括所发生的诊断异常的类型的指示。
[0028]举例而言,类型指示可指示诊断异常的原因,诸如,发生断点或停止请求。
[0029]在一些实施例中,响应于处理器在发生下个诊断异常之前的清除状态,将类型指示符设定成指示被执行的指令为未知类型。
[0030]如果处理器的状态在发生下个诊断异常之前被清除,则指令类型应设定成未知的,在一些实施例中,可通过将有效位设定成无效来执行此举。状态的清除可响应于管线式处理器中的管线的清除,或许响应于清除指令而出现。
[0031]在一些实施例中,方法包括以下初始步骤:设定单个指令步骤控制值并且设定步骤指示符值,单个指令步骤控制值指示将要执行单个指令步骤诊断方法,步骤指示符值指示将要在将发生下个诊断异常之前执行指令流中的单个指令。
[0032]单步骤模式可能通过储存的控制值来指示,从而当设定此控制值时,处理器知道处理器正以单步骤模式操作并且在执行每一指令之后,处理器应发生诊断异常。也可以能存在步骤指示符值,步骤指示符值设定成指示将执行一个步骤的一个值,例如1,并且当指令已被处理时,步骤指示符值设定成指示在发生下个诊断异常之前没有另外的指令将被执行的另一值,例如零。
[0033]在一些实施例中,响应于指示在发生下个诊断异常之前零个指令将被执行的步骤指示符值,在发生下个诊断异常之后将类型指示符设定成未知类型。
[0034]步骤指示符值在单步骤模式期间已发生并非为诊断异常的异常的情况下可能是有用的。在此情况下,步骤指示符中的值指示在从异常返回之后是否应执行指令或是否应立即发生诊断异常。此外,如果步骤指示符值设定成指示零个指令将被执行,则此步骤指示符值指示在执行指令之后但在已发生后续诊断异常之前已发生异常,并且在此情况下,如果指令的类型设定成未知的,则步骤指示符值是有利的,因为发生异常可能已改变类型指示符。
[0035]尽管指令的预定类型可为如果干类型,但在一些实施例中,指令的至少一种预定类型中的一种类型包括以下情况下的指令的类型:在指令之后执行异常可使指令流中的至少一个后续指令以不同方式执行。具体而言,预定类型包括以下情况下的指令的类型:在进入诊断异常或从诊断异常返回之后由异常处置器执行的操作改变包括处理器的设备的状态,从而指令流中的后续指令可以以不同方式执行。这些指令并不适合于单步骤模式中的分析。
[0036]在异常改变原有指令流的执行路径的情况下的指令并不适合于单步骤模式中的分析,因此,可判定这些指令为哪些指令并且随后抑制单步骤模式的诊断方法是有利的。[0037]在一些实施例中,至少一种预定类型中的一种的指令包括访问锁定位置的指令,锁定位置储存锁定值与清除值中之一,清除值指示处理器可写入至预定储存位置,并且锁定值指示对储存锁定值的处理器的预定储存位置的专属写入访问。
[0038]当在处理指令流期间发生异常时,在从该异常返回之后,处理器可能不会在处理器中断的点处重新开始执行,而是可能在不同点处开始执行,例如,处理器可能从不同的应用程序开始执行指令。因此,如果存在锁定位置,在锁定位置内,储存的锁定值指示预定储存位置被锁定并且仅可通过专属储存访问从该应用程序写入至预定地址,则在从异常返回之后清除锁定值,因为返回可能未返回至应用程序中的相同点,并且锁定值随后将不适合于执行的接下来的指令。这在步骤模式中产生异常出现于每一指令之间的问题,因此,如果指令的该类型为引起退出步骤模式的预定类型中的一种,则此举是有利的。
[0039]本发明的第二方面提供一种用于储存计算机程序的计算机程序产品,计算机程序在通过数据处理设备执行时控制数据处理设备执行根据本发明的第一方面的方法中的步骤。
[0040]本发明的第三方面提供一种用于分析处理器的诊断设备,处理器处理指令流,诊断设备包括:输出端以及输入端,输出端用于将控制信号输出至处理器,输入端用于从处理器接收数据;以及诊断电路系统,诊断电路系统用于执行诊断操作;诊断电路系统被配置为将控制信号输出至处理器,来设定指示将以单步骤模式操作处理器的指示符值,从而执行指令流中的单个指令并且随后发生诊断异常;以及诊断电路系统被配置为访问用于储存类型指示符的储存位置,类型指示符指示被执行的单个指令是否为至少一种预定类型中的一种的指令;以及响应于指示被执行的单个指令并非预定类型中的一种的类型指示符,诊断电路系统被配置为控制处理器继续以单步骤模式执行指令,从而在从异常返回之后执行下一单个指令;以及响应于指示被执行的单个指令为至少一种预定类型中的一种的类型指示符,诊断电路系统被配置为控制处理器退出单步骤模式并且不执行指令流内作为后面接着异常的单个指令的下个指令。
[0041]本发明的第四方面提供一种包括处理器以及根据本发明的第三方面的诊断设备的数据处理设备,处理器用于处理指令流,诊断设备用于分析处理器。
[0042]本发明的第五方面提供一种包括处理器以及多个储存位置的数据处理设备,处理器用于处理数据,多个储存位置用于储存控制数据;储存位置中的至少一个储存位置储存单步骤模式控制值,数据处理设备被配置为响应单步骤模式控制值,单步骤模式控制值设定成以单步骤模式执行来自指令流的指令,从而在执行指令中的每个指令之后发生诊断异常;处理器被配置为在设定单步骤模式控制值时针对通过处理器执行的每个指令判定指令是否为至少一种预定类型中的一种并被配置为将类型指示符储存于储存位置中的一个储存位置内,类型指示符指示指令为预定类型中的一种,或指令并非为预定类型中的一种或指令为未知类型。
[0043]当数据处理设备以单步骤模式执行时,逐一执行指令并且在以此模式执行每个指令之后,发生诊断异常,以便可分析处理设备的状态。应注意,可能不在执行指令之后立即发生诊断异常,因为在执行指令期间可能接收另一异常并且可能首先发生此异常。然而,在从此异常返回之后,随后将在执行指令流中的下个指令之前发生诊断异常。在本发明的此方面中,处理器针对执行的每个单个指令判定单个指令是否为预定类型,并且处理器储存类型指示符,类型指示符指示单个指令为预定类型、单个指令并非为预定类型或类型为未知的。
[0044]在一些实施例中,类型指示符储存包括两个值的储存:第一值以及第二值,第一值指示类型是否为预定类型,并且第二值指示第一值是否有效,由第二值表示的未知类型指示第一值无效。
[0045]储存类型信息的便利方式为使用两个值:第一值以及第二值,第一值指示类型,第二值指示第一值是否有效,即,类型为已知或未知的。因为值可各自具有两个值中之一,所以值可各自由单一位表示。
[0046]在其他实施例中,类型信息为单一值,并且在一些实施例中,类型信息进一步包括所发生的诊断异常的类型的指示。举例而言,类型信息可指示诊断异常的原因,因此,此类型信息可能为诊断异常归因于以下原因:预定类型的指令的软件步骤、并非为预定类型的指令的软件步骤,或一些其他除错事件,诸如,正发生的断点或停止请求。
[0047]在一些实施例中,数据处理设备被配置为响应于处理器在发生紧接的诊断异常之前的清除状态,以将类型指示符设定成指示被执行的指令为未知类型。
[0048]一般而言,当执行指令时,处理器可判定指令是否为预定类型并且可储存此信息。然而,在某些情形下将清除处理器的状态,并且此信息将损失。因此,在此情形下重要的是,类型指示符设定成未知的,以便辨识此未知类型。例如,响应于正在执行的显式清除指令或在从异常返回之后出现状态清除。
[0049]在一些实施例中,储存位置中的一个储存位置被配置为储存步骤指示符值,步骤指示符值指示在发生下个诊断异常之前将执行一个或者零个指令,数据处理设备被配置为响应于步骤指示符值为零,在发生诊断异常之后将类型指示符设定成未知类型。
[0050]数据处理设备在一些实施例中被配置为响应于在执行单个指令中的一个单个指令之后发生异常,在发生诊断异常之前将步骤指示符值设定成零,从而响应于步骤指示符值为零,在从异常返回之后不执行任何指令,并且发生搁置诊断异常。在此点处应将类型指示符设定成未知的,因为响应于另一异常可能已执行其他指令,因此,此值可不再反射先前以步骤模式被执行的单个指令。
[0051]在一些实施例中,预定类型包括以下情况下的指令的类型:在进入诊断异常或从诊断异常返回之后由异常处置器执行的操作改变处理设备的状态,从而指令流中的后续指令可以以不同方式执行。
[0052]本发明的第六方面提供一种由计算机程序提供的虚拟机,计算机程序执行于数据处理设备上,虚拟机提供根据本发明的第四方面或第五方面的数据处理设备的指令执行环境。
[0053]本发明的以上以及其他目标、特征结构以及优点将由结合随附附图阅读的说明性实施例的以下详细描述显而易见。
【专利附图】

【附图说明】
[0054]图1示出根据本发明的实施例的数据处理设备,数据处理设备具有连接至数据处理设备的远程诊断设备;
[0055]图2示出根据本发明的实施例的数据处理设备,数据处理设备与诊断电路系统合并;
[0056]图3示出根据本发明的实施例的以单一步骤诊断模式被执行的指令流内的专属加载指令的处理;
[0057]图4示出单一步骤诊断模式中的指令流的处理,在单一步骤诊断模式中,在专属加载指令之后出现中断;
[0058]图5示出单一步骤诊断模式中的指令流的处理,在单一步骤诊断模式中,在执行专属加载指令之前出现中断;
[0059]图6示出以单一步骤诊断模式操作的处理器的可能状态;
[0060]图7a示出说明根据本发明的实施例的方法中的步骤的流程图;
[0061]图7b示出说明根据本发明的另一实施例的方法中的步骤的流程图;
[0062]图7c示出指示符的可能值的表,指示符与分步指令的类型一起指示除错事件的原因;以及
[0063]图8示出本发明的实施例的虚拟机实施。
【具体实施方式】
[0064]图1示出数据处理设备10,数据处理设备10具有用于处理指令流的处理器20。处理器包括管线,管线具有用于从指令高速缓存22提取指令的提取单元20a、用于对指令解码的解码单元20b以及用于执行经解码指令的执行单元20c。数据处理设备10还具有寄存器组30,寄存器组30包括用于储存在处理期间使用的数据的寄存器。这些寄存器包括状态寄存器以及至少一个控制寄存器,状态寄存器储存处理器的当前状态,至少一个控制寄存器用于储存控制值。在以下情况下可能需要状态寄存器:例如,发生中断并且需要储存处理器的当前状态,以便在从中断返回之后,可恢复状态。
[0065]数据处理设备10还具有外部端口 12,外部端口 12与诊断设备40连接,诊断设备40包括诊断电路系统42。诊断电路系统42用以分析数据处理设备的操作,因此,诊断电路系统42可发送信号来控制处理器20的执行并且可从处理器接收输出的资料,以进行分析。
[0066]在此实施例中,诊断电路系统42被配置为当诊断电路系统42希望分析处理器的指令流执行时控制处理器20以单步骤模式操作。在单步骤模式中,在执行每一指令之后,在执行指令流中下个指令之前发生诊断异常。处理器以此方式分步通过程序,并且在每一步骤之后可通过诊断电路系统42分析处理器的状态。诊断电路系统42通过在控制寄存器EDECR中设定位EDECR.SS来控制处理器以单步骤模式操作,此位设定成对处理器20指示处理器20应以单步骤模式操作。存在另一控制寄存器EDESR,控制寄存器EDESR具有位EDESR.SS JiEDESR.SS当执行指令时递减并且通过发生诊断异常而递增。此位使处理器能够知道是否在单步骤模式期间发生非诊断异常、是否应执行指令或是否应在从非诊断异常返回之后发生诊断异常。存在另一状态寄存器EDSCR,状态寄存器EDSCR具有位字段EDSCR.Μ0Ε,位字段EDSCR.MOE记录发生诊断异常的原因。
[0067]当发生诊断异常时,通过诊断电路系统42执行诊断代码,诊断电路系统42检测数据处理设备10的状态并且储存此信息中的一些,用以进行分析。
[0068]当诊断电路系统42想要结束程序时,诊断电路系统42重设控制寄存器中的单一步骤位EDECR.SS以及EDESR.SS,并且处理器随后回归至正常执行模式。[0069]除控制处理器以单步骤模式操作以外,诊断电路系统42也可以控制执行其他诊断操作。举例而言,诊断电路系统42可在正在执行的代码内设定断点或监看点,并且这些断点或监看点允许代码在代码执行时在某些设定点处中断,并且可随后在这些点处分析处理器的状态。
[0070]尽管在图1中,诊断电路系统42示为在处理设备10的外部,但在许多实施例中,诸如在图2中,诊断电路系统42将存在于处理设备内部。
[0071]因此,图2示出数据处理设备10,数据处理设备10包括诊断电路系统42、寄存器组30以及用于储存诊断软件的数据储存器,在一些实施例中诊断软件可通过诊断电路系统42内的处理器来执行,而在其他实施例中诊断软件可在处理器20本身上执行。在一些实施例中,诊断软件可储存于外部存储器44中。
[0072]在以上详述的情况下,发生诊断异常将触发储存于储存器43或存储器44中的诊断软件通过处理器20来执行。在此实施例中,储存于寄存器组30中的值略不同于储存于图1的寄存器组中的那些值。在此实施例中,使用者可指示,应进入单一步骤诊断模式,并且诊断电路系统42将写入至寄存器组30中的控制寄存器,并在MDSCR寄存器中设定单一步骤位MDSCR.SS,并且在保存的状态寄存器SPSR中设定保存的步骤数位SPSR.SS,单一步骤位MDSCR.SS指示信号步骤模式,保存的步骤数位SPSR.SS指示采取为I或者O的步骤数。诊断电路系统42随后指示处理器20执行正在除错的软件。响应于此请求,处理器将SPSR.SS位复制至当前状态寄存器CPSR中的当前步骤数位CPSR.SS。
[0073]因此,响应于这些被设定的位,处理器处理单个指令并且将CPSR.SS位设定成0,以指示处理器已执行一个指令并且随后发生诊断异常。处理器20将步骤数位从当前状态寄存器CPSR.SS复制至保存的状态寄存器SPSR.SS作为发生诊断异常的部分。
[0074]处理器20还将关于诊断异常的进一步信息写入至寄存器组30中的另一状态寄存器ESR,另一状态寄存器ESR用以记录关于异常的信息,异常包括诊断异常。
[0075]处理器20执行后面紧接着诊断代码的异常处置器代码,并且分析处理器的当前状态。将SPSR寄存器中的步骤数位SPSR.SS设定成1,以指示现应执行指令流中的下个指令。当将退出单一步骤诊断模式时,重设寄存器组30中的寄存器SPSR以及MDSCR中的控制位 MDSCR.SS 以及 SPSR.SS。
[0076]如果实施多个阶层式处理状态或异常级别,则每一异常级别具有每一异常级别自身的SPSR以及ESR寄存器、异常级别I的SPSR_EL1以及ESR_EL1、异常级别2的SPSR_EL2以及ESR_EL2等。
[0077]图3示出如何根据本发明的实施例以单一步骤诊断模式执行包括专属加载指令LDREX的指令代码。在此附图中时间自左至右流动。因此,将SPSR.SS位以及MDSCR.SS位设定成1,从而指示执行操作的单步骤模式、异常返回ERET指令,以跳越至正在除错的软件中。这会将SPSR.SS复制至CPSR.SS,因此执行来自正在除错的软件的单个指令。此指令为专属加载指令LDREX指令,并且响应于正在执行的专属加载指令LDREX,将CPSR.SS位设定成0,从而指示在发生诊断异常之前应不执行任何另外的指令。
[0078]发生诊断异常,将CPSR.SS复制至SPSR.SS,并且将状态寄存器内的校验位(syndrome bit)ESR.EX设定成I,以指示执行了专属加载指令LDREX。还设定此寄存器内的有效位ESR.1SV,有效位ESR.1SV指示此值为用于此位的有效值。[0079]每当执行特定类型的指令时,在本发明的实施例中设定这些校验以及相应的有效位。这些指令可为专属地主张监控器的类型的指令,指令随后指示指令具有对特定储存位置的专属访问,指令诸如专属加载指令。指令也可以为其他类型的指令,在为其他类型的指令时,指令流内后续指令的执行可通过异常处置器执行来改变。
[0080]当LDREX指令访问第一位置时,监控器位记录访问此第一位置。监控器具有两种状态:“开放访问”以及“专属访问”。LDREX通过将监控器处于“专属访问”状态来主张对第一位置的访问,并且监控器以地址标记的形式记录所访问的地址。
[0081]在储存专属STREX指令上检查监控器以及监控器的标记。STREX指令为储存指令,储存指令请求将值写入至第二位置。如果监控器处于“专属访问”状态下,则STREX指令仅允许写入继续进行,并且STREX正写入至所标记的地址,即,第二位置匹配第一位置。通过STREX本身将监控器迫使返回至“开放访问”;但也通过清楚的专属CLREX指令或访问所标记的地址的可能一些其他指令。为避免由异常处置器引起LDREX指令与STREX指令之间的软件上下文的改变造成的可能的软件失灵,通过异常返回亦迫使专属监控器返回至“开放访问”。这可通过软件约定来执行,例如,通过在ERET之前始终执行CLREX指令,或可通过硬件在执行ERET指令之后迫使监控器返回至“开放访问”状态来实施。
[0082]对于多处理器系统中的全局监控器而言,如果访问亦来自与发出LDREX的处理器相同的处理器,则STREX仅允许写入。监控器也可以通过其他指令访问其他位置来清除至“开放访问”状态,其他位置诸如接近于所标记地址的位置。
[0083]因此,在此实施例中,在执行单一 LDREX指令之后并且响应于设定成指示单步骤模式的MDSCR.SS控制位,发生诊断异常并且设定ESR.EX位以及ESR.1SV位,并且随后执行诊断代码。诊断代码检测到设定ESR.1SV有效位以及相应的ESR.EX校验位,并且当这些位指示先前的指令为在单步骤模式并不适当的情况下的预定类型中的一种时,诊断代码指示处理器清除MDSCR.SS位以及SPSR.SS位,从而在从异常处置器返回之后,退出单步骤模式并且指令流的正常执行出现。
[0084]诊断代码还设定指示指 令流中的点的适合断点,并且这允许诊断电路系统在此点处中断正常执行并且在必要时再启动单步骤模式。
[0085]处理器随后执行指令流的下个部分,直至到达断点为止。此断点将设定于代码中的如下位置:该位置在代码的区块之后,代码的区块的执行通过指令之间出现的异常来改变。
[0086]将被执行的代码可例如为尝试获得对信号量变量的专属访问的代码:
[0087]
【权利要求】
1.一种用于诊断处理指令流的处理器的方法,包括: (i)控制所述处理器以单步骤模式执行,以使得来自所述指令流的单个指令被执行,所述处理器判定所述单个指令是否为至少一种预定类型的指令中的一种并且在数据储存位置处储存类型指示符,并且在所述处理器已处理所述单个指令之后发生诊断异常; (ii)在所述诊断异常之后执行诊断操作,包括: 访问储存于所述数据储存位置中的所述类型指示符;以及 (iiia)响应于所述类型指示符指示所述单个指令并非所述预定类型中的一种,控制所述处理器继续以所述单步骤模式执行指令,以使得在从所述诊断异常返回之后执行下一单个指令; (iiib)响应于所述类型指示符指示所述单个指令为所述至少一种预定类型中的一种,控制所述处理器退出所述单步骤模式并且不执行作为后面跟随着诊断异常的单个指令的所述指令流内的下一指令。
2.如权利要求1所述的方法,其中所述步骤(iiib)包括:控制所述处理器在从所述诊断异常返回之后执行所述指令流内的多个指令。
3.如权利要求2所述的方法,其中所述多个指令包括所述指令流中继所述被执行的单个指令之后的多个指令。
4.如权利要求2所述的方法,其中所述多个指令包括所述指令流中继所述被执行的单个指令之后的多个指令并且包括所述被执行的单个指令。
5.如权利要求2-4中的任一项所述的方法,还包括如下步骤:响应于所述类型指示符指示所述单个指令为所述至少一种预定类型中的一种,在所述指令流内设定至少一个断点,以使得所述多个指令被执行直至到达所述至少一个断点,如果在执行所述多个指令期间未接收其他异常,并且响应于到达所述至少一个断点,则发生诊断断点异常。
6.如权利要求1所述的方法,其中所述步骤(iiib)包括:仿真所述被执行的单个指令以及所述指令流中的至少一个后续指令,并且随后控制所述处理器从所述指令流中的一指令开始所述单步骤模式,该指令紧跟着经仿真的所述至少一个后续指令的后面。
7.如在先权利要求中的任一项所述的方法,其中储存于所述数据储存位置中的所述类型指示符指示所述指令为所述预定类型中的一种或所述指令并非为所述预定类型中的一种,或者指示所述指令为未知类型,其中如果在访问所述类型指示符的所述步骤中,判定所述类型指示符指示所述指令为未知类型,则执行检验所述单个指令并且判定所述单个指令是否为所述预定类型的额外步骤。
8.如权利要求7所述的方法,其中所述类型指示符包括两个指示符值:第一值以及第二有效值,所述第一值指示所述指令为所述预定类型或并非为所述预定类型,所述第二有效值指示所述第一值是否有效,所述第二有效值为无效指示所述指令为所述未知类型。
9.如权利要求7所述的方法,其中所述类型指示符进一步包括所发生的诊断异常的类型的指示。
10.如权利要求1-9中的任一项所述的方法,其中所述方法包括以下初始步骤:设定单个指令步骤控制值并且设定步骤指示符值,所述单个指令步骤控制值指示将要执行所述单个指令步骤诊断方法,所述步骤指示符值指示将要在将发生下一诊断异常之前执行所述指令流中的单个指令。
11.如引用权利要求7-9的任一项时的权利要求10所述的方法,其中响应于所述步骤指示符值指示在发生下一诊断异常之前零个指令将被执行,在发生所述诊断异常之后所述类型指示符被设定成未知类型。
12.如引用权利要求7-9的任一项时的权利要求10所述的方法,其中响应于在发生所述下一诊断异常之前所述处理器的清除状态,所述类型指示符被设定为指示所述被执行的指令为所述未知类型。
13.如在先权利要求中的任一项所述的方法,其中所述预定类型包括以下情况下的指令的类型:在进入异常或从异常返回之后由异常处置器执行的操作改变包括所述处理器的设备的状态,以使得所述指令流中的至少一个后续指令可以以不同方式执行。
14.如权利要求13所述的方法,其中所述至少一种预定类型中的一种的指令包括访问锁定位置的指令,所述锁定位置储存锁定值和清除值中的一个,所述清除值指示处理器可写入至预定储存位置,并且所述锁定值指示储存所述锁定值的处理器对所述预定储存位置的专属写入访问。
15.一种用于储存计算机程序的计算机程序产品,所述计算机程序在由数据处理设备执行时控制所述数据处理设备执行如权利要求1-14中的任一项所述的方法中的步骤。
16.一种用于分析处理指令流的处理器的诊断设备,所述诊断设备包括: 输出端以及输入端,所述输出端用于将控制信号输出至所述处理器,所述输入端用于从所述处理器接收数据;以及 诊断电路系统,所述诊断电路系统用于执行诊断操作; 所述诊断电路系统被配置为将控制信号输出至所述处理器,来设定指示将以单步骤模式操作所述处理器的指示符值,从而执行所述指令流中的单个指令并且随后发生诊断异常;以及 所述诊断电路系统被配置为访问用于储存类型指示符的储存位置,所述类型指示符指示所述被执行的单个指令是否为至少一种预定类型指令中的一种;以及 响应于所述类型指示符指示所述被执行的单个指令并非为所述预定类型中的一种,所述诊断电路系统被配置为控制所述处理器继续以所述单步骤模式执行指令,以使得在从所述诊断异常返回之后执行下一单个指令;以及 响应于所述类型指示符指示所述被执行的单个指令为所述至少一种预定类型中的一种,所述诊断电路系统被配置为控制所述处理器退出所述单步骤模式并且不执行作为后面跟随着诊断异常的单个指令的所述指令流内的所述下一指令。
17.如权利要求16所述的诊断设备,其中响应于所述类型指示符指示所述被执行的单个指令为所述至少一种预定类型中的一种,所述诊断电路系统被配置为控制所述处理器在从所述诊断异常返回之后执行所述指令流内的多个指令。
18.如权利要求17所述的诊断设备,其中所述多个指令包括所述指令流中继所述被执行的单个指令之后的多个指令。
19.如权利要求17所述的诊断设备,其中所述多个指令包括所述指令流中继所述被执行的单个指令之后的多个指令并且包括所述被执行的单个指令。
20.如权利要求17-19中的任一项所述的诊断设备,所述诊断电路系统被配置为响应于所述类型指示符指示所述被执行的单个指令为所述至少一种预定类型中的一种,在所述多个指令之后在所述指令流内设定断点。
21.如权利要求16所述的诊断设备,其中所述诊断电路系统被配置为仿真所述被执行的单个指令以及所述指令流中的至少一个后续指令,并且所述诊断电路系统被配置为向所述处理器发出控制信号,以从一指令开始所述单步骤模式,该指令紧跟着经仿真的所述至少Iv后续指令的后面。
22.如权利要求16-21中的任一项所述的诊断设备,其中储存于所述数据储存位置中的所述类型指示符指示所述指令为所述预定类型中的一种或所述指令并非为所述预定类型中的一种,或者指示所述指令为未知类型,所述诊断电路系统被配置为响应于所述类型指示符指示所述类型为未知,向所述处理器请求所述被执行的单个指令并从所述指令判定所述类型。
23.如权利要求16-22中的任一项所述的诊断设备,其中所述类型指示符包括两个指示符值:第一值以及第二有效值,所述第一值指示为所述预定类型或并非为所述预定类型,所述第二有效值指示所述第一值是否有效,所述第二有效值为无效指示所述指令为所述未知类型。
24.如权利要求16-22中的任一项所述的诊断设备,其中所述类型指示符进一步包括所发生的诊断异常的类型的指示。
25.一种数据处理设备,其包括用于处理指令流的处理器以及如权利要求16-24中的任一项所述的用于分析所述处理器的诊断设备。
26.如权利要求25所述的数据处理设备,所述数据处理设备包括用于储存所述类型指示符的储存位置,所述处理器被配置为响应于执行来自所述指令流的所述单个指令,来判定所述单个指令是否为至少一种预定类型中的一种并储存类型指示符,所述类型指示符指示所述单个指令是否为所述预定类型。
27.如权利要求2 5或26所述的数据处理设备,所述处理器被配置为响应于在执行所述单个指令中的一个单个指令之后发生的、除所述诊断异常以外的异常,来将所述类型指示符设定成指示所述被执行的指令为未知类型。
28.如权利要求25-27中的任一项所述的数据处理设备,其中所述诊断设备被配置为执行单个指令步骤诊断方法,并且当执行所述方法以设定单个指令步骤控制值并且设定步骤指示符值,所述单个指令步骤控制值指示将要执行所述单个指令步骤诊断方法,所述步骤指示符值指示将要在将发生下一诊断异常之前执行的所述指令流中的单个指令。
29.如权利要求28所述的数据处理设备,所述处理器被配置为响应于在执行所述单个指令中的一个单个指令之后发生除所述诊断异常以外的异常,来将所述步骤指示符值设定成指示零个指令,以使得在从所述异常返回之后,响应于所述步骤指示符值不执行任何指令,并且所述处理器发生搁置诊断异常。
30.如权利要求25-29中的任一项所述的数据处理设备,其中所述至少一种预定类型指令中的一种包括访问锁定位置的指令,所述锁定位置储存锁定值和清除值中的一个,所述清除值指示处理器可写入至预定储存位置,并且所述锁定值指示储存所述锁定值的处理器对所述预定储存位置的专属写入访问。
31.一种包括处理器以及多个储存位置的数据处理设备,所述处理器用于处理数据,所述多个储存位置用于储存控制数据;所述储存位置中的至少一个储存位置储存单步骤模式控制值,所述数据处理设备被配置为对所述单步骤模式控制值作出响应,所述单步骤模式控制值被设定为以单步骤模式执行来自指令流的指令,以使得在所述指令中的每个的执行之后发生诊断异常; 所述处理器被配置为在设定所述单步骤模式控制值时,针对由所述处理器执行的每个指令来判定所述指令是否为至少一种预定类型中的一种,并且被配置为将类型指示符储存于所述储存位置中的一个储存位置内,所述类型指示符指示所述指令为所述预定类型中的一种,或所述指令并非为所述预定类型中的一种,或所述指令为未知类型。
32.如权利要求31所述的数据处理设备,其中所述类型指示符的储存包括两个值的储存:第一值以及第二值,所述第一值指示所述类型是否为所述预定类型,并且所述第二值指示所述第一值是否有效,由所述第二值表示的所述未知类型指示所述第一值无效。
33.如权利要求31所述的数据处理设备,其中所述类型指示符进一步包括所发生的诊断异常的类型的指示。
34.如权利要求31-34中的任一项所述的数据处理设备,所述数据处理设备被配置为响应于在发生紧接的所述诊断异常之前所述处理器的清除状态,来将所述类型指示符设定成指示执行的所述指令为所述未知类型。
35.如权利要求31-34中的任一项所述的数据处理设备,所述储存位置中的一个储存位置被配置为储存步 骤指示符值,所述步骤指示符值指示在发生下一诊断异常之前一个或者零个指令将被执行,所述数据处理设备被配置为响应于所述步骤指示符值为零,在发生所述诊断异常之后将所述类型指示符设定成所述未知类型。
36.如权利要求30-34中的任一项所述的数据处理设备,其中所述预定类型包括以下情况下的指令的类型:在进入异常或从异常返回之后由异常处置器执行的操作改变所述处理设备的状态,以使得所述指令流中的后续指令可以以不同方式执行。
37.一种由执行于数据处理设备上的计算机程序提供的虚拟机,所述虚拟机提供根据如权利要求25-36中的任一项所述的数据处理设备的指令执行环境。
【文档编号】G06F11/36GK103430158SQ201280013329
【公开日】2013年12月4日 申请日期:2012年2月3日 优先权日:2011年3月14日
【发明者】迈克尔·约翰·威廉姆斯, 理查德·罗伊·格里森思怀特 申请人:Arm 有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1