CN103430158B - 使用执行单一步骤来诊断编码 - Google Patents

使用执行单一步骤来诊断编码 Download PDF

Info

Publication number
CN103430158B
CN103430158B CN201280013329.0A CN201280013329A CN103430158B CN 103430158 B CN103430158 B CN 103430158B CN 201280013329 A CN201280013329 A CN 201280013329A CN 103430158 B CN103430158 B CN 103430158B
Authority
CN
China
Prior art keywords
instruction
type
processor
value
diagnosis
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.)
Active
Application number
CN201280013329.0A
Other languages
English (en)
Other versions
CN103430158A (zh
Inventor
迈克尔·约翰·威廉姆斯
理查德·罗伊·格里森思怀特
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
ARM Ltd
Original Assignee
Advanced Risc Machines Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Advanced Risc Machines Ltd filed Critical Advanced Risc Machines Ltd
Priority to CN201710550482.1A priority Critical patent/CN107577593B/zh
Publication of CN103430158A publication Critical patent/CN103430158A/zh
Application granted granted Critical
Publication of CN103430158B publication Critical patent/CN103430158B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/22Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing
    • G06F11/2205Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing using arrangements specific to the hardware being tested
    • G06F11/2236Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing using arrangements specific to the hardware being tested to test CPU or processors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3664Environments for testing or debugging software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3632Software debugging of specific synchronisation aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3648Software debugging using additional hardware

Abstract

本发明公开一种用于诊断处理指令流的处理器的方法和设备。方法包括:(i)控制所述处理器以单步骤模式执行,从而来自所述指令流的单个指令被执行,所述处理器判定所述单个指令是否为至少一种预定类型中的一种的指令并且在数据储存位置处储存类型指示符,并且在所述处理器已处理所述单个指令之后发生诊断异常;(ii)在所述诊断异常之后执行诊断操作,包括:访问储存于所述数据储存位置中的所述类型指示符;以及(iiia)响应于指示所述单个指令并非所述预定类型中的一种的所述类型指示符,控制所述处理器继续以所述单步骤模式执行指令,从而在从所述诊断异常返回之后执行下一单个指令;(iiib)响应于指示所述单个指令为所述至少一种预定类型中的一种的所述类型指示符,控制所述处理器退出所述单步骤模式并且不执行作为后面跟随着诊断异常的单个指令的所述指令流内的下一指令。

Description

使用执行单一步骤来诊断编码
技术领域
本发明的技术领域涉以及数据处理,具体而言涉以及在数据处理设备上执行诊断操作。
背景技术
已知提供具有诊断机制的数据处理系统,以便帮助开发硬件、操作系统、应用程序、整体系统设计等,诊断机制可用以在数据处理系统上执行诊断操作(例如,软件以及硬件故障识别以及分析(除错))。
当分析数据处理系统时,可使用外部除错器,外部除错器包括在主机系统上执行的除错程序,主机系统连接至将被分析的目标系统,从而指定将在系统上执行诊断操作的控制信号从主机传递至系统。
外部除错器涉以及正经由外部端口连接至目标的除错器,外部端口随后用以程序设计除错硬件。处理器被配置为使得视为诊断异常的除错事件引起进入特殊除错状态,在特殊除错状态下,数据处理设备由外部除错器讯问以及控制。
或者,可能存在自托管除错系统,在自托管除错系统中,在正被除错的目标上执行除错监控软件。在此情况下,处理器被配置为使得除错事件引起诊断异常,诊断异常中断正被除错的软件并且将控制传递至除错监控软件。有用的诊断工具为控制处理器以单一步骤通过程序的能力。这允许在需要情况下在过程的每一步骤处分析系统状态。在单步骤模式中,处理器将执行指令,并且随后将发生诊断异常,并且控制将传递至除错软件,除错软件可分析处理器的状态。当出现从诊断异常的返回时,随后处理器将执行下个指令,于是将发生下个诊断异常。以此方式,除错软件可控制处理器以单一步骤通过整个程序或仅仅通过分析系统者所关注的部分。
在单一步骤通过代码时可能产生的一个问题为,如果在指令之间发生异常,则是否遭遇具有不同执行路径的代码。如果不同的执行路径涉以及无限循环,则此状况可能尤其困难。举例而言,尝试主张专属监控器的指令。如果代码成功主张专属监控器,则代码具有对特定储存位置的专属访问并且可在特定储存位置储存数据。因此,为了主张专属监控器,使用特殊的加载专属指令,特殊的加载专属指令既返回储存位置的当前值又设定专属监控器,以便指示当前正在被执行的指令流具有对特定储存位置的专属访问。储存专属指令可随后经执行以将数据储存至此储存位置。然而,在单一步骤通过代码的情况下,一旦已通过设定专属监控器来主张专属监控器,则发生诊断异常,并且在从该异常返回之后,异常处置器将清除专属监控器。此状况是因为当发生异常时,异常处置器可能不会返回至异常处置器先前正在执行的代码,而是将返回至不同的代码,因此,应清除专属监控器,因为将被执行的下个指令流不应具有对储存位置的专属访问。
然而,在已清除专属监控器的单一步骤中,随后当到达储存专属指令时,储存专属指令将失效,这会触发返回至主张专属监控器的步骤,步骤将主张专属监控器并且随后通过异常返回使专属监控器被清除,因此,在单一步骤中储存专属指令将重复地失效并且程序将永无进展。
以下给出具有此问题的代码的实例
得知当处于步骤模式时,在从诊断异常返回之后异常处置器清除专属监控器或锁定位置并且在此代码中产生无限循环所存在的问题,并且通过在步骤通过指令之前扫描指令,在Power以及MIPS架构的GDB中解决该问题,以判定诸如这些的区块的位置。一旦区块已识别,则使用步骤直到型命令(a step until command),从而在此情况下在储存专属指令之后设定断点,并且在此区块中的指令之间未发生异常,并且锁定位置未由异常处置器清除。
此解决方案的缺点为,需要检验所有的代码以识别问题代码。此解决方案具有显著的开销,因为诊断系统将需要转至正在控制指令流的执行的操作系统并且要求操作系统提取代码,以便能够对其进行分析。若诊断设备远离处理设备,则开销将尤其高。
Power公开了校验寄存器(syndrome register)的使用,当发生步骤异常(在Power架构中称为追踪异常)时,校验寄存器储存关于处理器状态的信息,以允许返回至该状态。校验寄存器储存的一则信息为指示已执行加载专属指令并且在发生异常之前锁定位置的指示符。不存在关于如何使用该值的信息。
希望能够使用单一步骤过程来诊断代码,甚至在存在以下类型的代码的情况下能够使用单一步骤过程来诊断代码:类型代码的执行路径通过在指令之间发生异常来改变。
发明内容
本发明的第一方面提供一种用于诊断处理器的方法,处理器处理指令流,方法包括:(i)控制处理器以单步骤模式执行,从而执行来自指令流的单个指令,处理器判定单个指令是否为至少一种预定类型中的一种的指令,并且处理器在数据储存位置处储存类型指示符,并且在处理器已处理单个指令之后发生诊断异常;(ii)在诊断异常之后执行诊断操作,执行诊断操作的步骤包括以下步骤:访问储存于数据储存位置中的类型指示符;以及(iiia)响应于指示单个指令并非预定类型中的一种的类型指示符,控制处理器继续以单步骤模式执行指令,从而在从异常返回之后执行下一单个指令;(iiib)响应于指示单个指令为至少一种预定类型中的一种的类型指示符,控制处理器退出单步骤模式并且不执行指令流内的作为后面紧接着诊断异常的单个指令的下个指令。
本发明认识到,当单一步骤通过代码时可能产生问题,并且在一些情形下,判定在何处单一步骤并非为适当的,并且抑制单一步骤可能是有利的。举例而言,在指令流含有指令的情况下,在指令处,由串流内随后的指令采取的执行路径通过在指令之间发生异常来改变,单一步骤将不为分析该段代码的执行的适当方式并且应受到抑制。还认识到,如果发生异常触发代码以进入冗长的循环,则此状况可能为特定问题。方法通过判定正在被执行的指令是否为预定类型来解决以上问题,并且如果正在被执行的指令为预定类型,则方法不继续进行单一步骤而是执行不同的过程。在许多情况下,可在执行期间判定指令是否为预定类型,并且可在适当情况下抑制单一步骤。
在一些实施例中,步骤(iiib)包括:控制处理器在从异常返回之后执行指令流内的多个指令。
为解决改变执行路径的指令之间的异常问题,可适当地抑制用于多个指令的单步骤模式,从而指令全部顺序执行而无异常出现。取决于代码,可选择顺序被执行的指令的数目,并且单步骤模式可返回至指令流中的点处,指令流适合于该代码。
在一些实施例中,多个指令包括继被执行的单个指令之后的指令流中的多个指令。
在从异常返回之后执行的多个指令可为继被执行的单个指令之后的指令流中的指令。或者,执行过的指令可能与一些接下来的指令一起再次执行。后者情况仅在判定有可能再执行此指令的情况下是可能的。在一些情况下,此状况可能不可能。然而,如果此状况可能,则再次执行指令而随后无异常紧接于指令之后可能是有利的。
在一些实施例中,存在另一步骤:响应于指示单个指令为至少一种预定类型中的一种的类型指示符,在指令流内设定至少一个断点,从而执行多个指令,直至到达至少一个断点为止,并且响应于到达至少一个断点,发生诊断断点异常。当检测预定类型的指令时,随后在一些实施例中,可将断点设定在代码中的点处,代码在预定类型的指令之后。随后暂时中止单步骤模式,并且执行指令,直至到达断点为止,于是发生断点诊断异常。响应于此,处理器可在适当情况下返回至单步骤模式,或者,可设定另外的断点,或可能已到达正在测试的代码的末端。
在一些实施例中,步骤(iiib)包括:仿真被执行的单个指令以及指令流中的至少一个后续指令,并且随后控制处理器从指令流中的指令开始单步骤模式,指令流中的指令在经仿真的至少一个后续指令之后。
在一些实施例中,指令可能通过例如诊断设备来仿真,而非执行指令,并且一旦已执行这些经仿真的指令,则处理器可被控制以从指令流中的适当指令重新开始单步骤模式。将选择经仿真的指令,以便从指令重新开始单步骤模式,在指令处,在每一指令之间所发生的诊断异常将不会改变指令流如何继续前进。
在一些实施例中,储存于数据储存位置中的类型指示符指示指令为预定类型中的一种或指令并非为预定类型中的一种或指示指令为未知类型,其中如果在访问类型指示符的步骤中,判定类型指示符指示为未知类型,则执行检验单个指令并且判定单个指令是否为预定类型的额外步骤。
尽管类型指示符可指示指令是否为预定类型,但类型指示符也可以当指令为未知类型时指示指令是否为预定类型。在后者情况下,随后方法检验指令,以判定指令为何种类型。此举可能需要提取指令,从而可分析指令。尽管此步骤具有与步骤相关联的潜时开销,但仅在少数情况下将指示未知类型,因此,此举将不会增加过度地执行整个诊断方法的开销。
在一些实施例中,类型指示符包括两个指示符值:第一值以及第二有效值,第一值指示指令为预定类型或并非为预定类型,第二有效值指示第一值是否有效,第二有效值为无效指示指令为未知类型。
可使用两个值或两个位进行类型指示,其中一个指示类型并且另一个为有效位,有效位换言之当类型位无效时指示类型为未知的。此举可为表示值的便利方式,因为当意味着类型值无法再被依赖的环境出现时,可将有效位简单地设定成无效的。
在其他实施例中,类型指示可为单一值。此值在一些实施例中可进一步包括所发生的诊断异常的类型的指示。
举例而言,类型指示可指示诊断异常的原因,诸如,发生断点或停止请求。
在一些实施例中,响应于处理器在发生下个诊断异常之前的清除状态,将类型指示符设定成指示被执行的指令为未知类型。
如果处理器的状态在发生下个诊断异常之前被清除,则指令类型应设定成未知的,在一些实施例中,可通过将有效位设定成无效来执行此举。状态的清除可响应于管线式处理器中的管线的清除,或许响应于清除指令而出现。
在一些实施例中,方法包括以下初始步骤:设定单个指令步骤控制值并且设定步骤指示符值,单个指令步骤控制值指示将要执行单个指令步骤诊断方法,步骤指示符值指示将要在将发生下个诊断异常之前执行指令流中的单个指令。
单步骤模式可能通过储存的控制值来指示,从而当设定此控制值时,处理器知道处理器正以单步骤模式操作并且在执行每一指令之后,处理器应发生诊断异常。也可以能存在步骤指示符值,步骤指示符值设定成指示将执行一个步骤的一个值,例如1,并且当指令已被处理时,步骤指示符值设定成指示在发生下个诊断异常之前没有另外的指令将被执行的另一值,例如零。
在一些实施例中,响应于指示在发生下个诊断异常之前零个指令将被执行的步骤指示符值,在发生下个诊断异常之后将类型指示符设定成未知类型。
步骤指示符值在单步骤模式期间已发生并非为诊断异常的异常的情况下可能是有用的。在此情况下,步骤指示符中的值指示在从异常返回之后是否应执行指令或是否应立即发生诊断异常。此外,如果步骤指示符值设定成指示零个指令将被执行,则此步骤指示符值指示在执行指令之后但在已发生后续诊断异常之前已发生异常,并且在此情况下,如果指令的类型设定成未知的,则步骤指示符值是有利的,因为发生异常可能已改变类型指示符。
尽管指令的预定类型可为如果干类型,但在一些实施例中,指令的至少一种预定类型中的一种类型包括以下情况下的指令的类型:在指令之后执行异常可使指令流中的至少一个后续指令以不同方式执行。具体而言,预定类型包括以下情况下的指令的类型:在进入诊断异常或从诊断异常返回之后由异常处置器执行的操作改变包括处理器的设备的状态,从而指令流中的后续指令可以以不同方式执行。这些指令并不适合于单步骤模式中的分析。
在异常改变原有指令流的执行路径的情况下的指令并不适合于单步骤模式中的分析,因此,可判定这些指令为哪些指令并且随后抑制单步骤模式的诊断方法是有利的。
在一些实施例中,至少一种预定类型中的一种的指令包括访问锁定位置的指令,锁定位置储存锁定值与清除值中之一,清除值指示处理器可写入至预定储存位置,并且锁定值指示对储存锁定值的处理器的预定储存位置的专属写入访问。
当在处理指令流期间发生异常时,在从该异常返回之后,处理器可能不会在处理器中断的点处重新开始执行,而是可能在不同点处开始执行,例如,处理器可能从不同的应用程序开始执行指令。因此,如果存在锁定位置,在锁定位置内,储存的锁定值指示预定储存位置被锁定并且仅可通过专属储存访问从该应用程序写入至预定地址,则在从异常返回之后清除锁定值,因为返回可能未返回至应用程序中的相同点,并且锁定值随后将不适合于执行的接下来的指令。这在步骤模式中产生异常出现于每一指令之间的问题,因此,如果指令的该类型为引起退出步骤模式的预定类型中的一种,则此举是有利的。
本发明的第二方面提供一种用于储存计算机程序的计算机程序产品,计算机程序在通过数据处理设备执行时控制数据处理设备执行根据本发明的第一方面的方法中的步骤。
本发明的第三方面提供一种用于分析处理器的诊断设备,处理器处理指令流,诊断设备包括:输出端以及输入端,输出端用于将控制信号输出至处理器,输入端用于从处理器接收数据;以及诊断电路系统,诊断电路系统用于执行诊断操作;诊断电路系统被配置为将控制信号输出至处理器,来设定指示将以单步骤模式操作处理器的指示符值,从而执行指令流中的单个指令并且随后发生诊断异常;以及诊断电路系统被配置为访问用于储存类型指示符的储存位置,类型指示符指示被执行的单个指令是否为至少一种预定类型中的一种的指令;以及响应于指示被执行的单个指令并非预定类型中的一种的类型指示符,诊断电路系统被配置为控制处理器继续以单步骤模式执行指令,从而在从异常返回之后执行下一单个指令;以及响应于指示被执行的单个指令为至少一种预定类型中的一种的类型指示符,诊断电路系统被配置为控制处理器退出单步骤模式并且不执行指令流内作为后面接着异常的单个指令的下个指令。
本发明的第四方面提供一种包括处理器以及根据本发明的第三方面的诊断设备的数据处理设备,处理器用于处理指令流,诊断设备用于分析处理器。
本发明的第五方面提供一种包括处理器以及多个储存位置的数据处理设备,处理器用于处理数据,多个储存位置用于储存控制数据;储存位置中的至少一个储存位置储存单步骤模式控制值,数据处理设备被配置为响应单步骤模式控制值,单步骤模式控制值设定成以单步骤模式执行来自指令流的指令,从而在执行指令中的每个指令之后发生诊断异常;处理器被配置为在设定单步骤模式控制值时针对通过处理器执行的每个指令判定指令是否为至少一种预定类型中的一种并被配置为将类型指示符储存于储存位置中的一个储存位置内,类型指示符指示指令为预定类型中的一种,或指令并非为预定类型中的一种或指令为未知类型。
当数据处理设备以单步骤模式执行时,逐一执行指令并且在以此模式执行每个指令之后,发生诊断异常,以便可分析处理设备的状态。应注意,可能不在执行指令之后立即发生诊断异常,因为在执行指令期间可能接收另一异常并且可能首先发生此异常。然而,在从此异常返回之后,随后将在执行指令流中的下个指令之前发生诊断异常。在本发明的此方面中,处理器针对执行的每个单个指令判定单个指令是否为预定类型,并且处理器储存类型指示符,类型指示符指示单个指令为预定类型、单个指令并非为预定类型或类型为未知的。
在一些实施例中,类型指示符储存包括两个值的储存:第一值以及第二值,第一值指示类型是否为预定类型,并且第二值指示第一值是否有效,由第二值表示的未知类型指示第一值无效。
储存类型信息的便利方式为使用两个值:第一值以及第二值,第一值指示类型,第二值指示第一值是否有效,即,类型为已知或未知的。因为值可各自具有两个值中之一,所以值可各自由单一位表示。
在其他实施例中,类型信息为单一值,并且在一些实施例中,类型信息进一步包括所发生的诊断异常的类型的指示。举例而言,类型信息可指示诊断异常的原因,因此,此类型信息可能为诊断异常归因于以下原因:预定类型的指令的软件步骤、并非为预定类型的指令的软件步骤,或一些其他除错事件,诸如,正发生的断点或停止请求。
在一些实施例中,数据处理设备被配置为响应于处理器在发生紧接的诊断异常之前的清除状态,以将类型指示符设定成指示被执行的指令为未知类型。
一般而言,当执行指令时,处理器可判定指令是否为预定类型并且可储存此信息。然而,在某些情形下将清除处理器的状态,并且此信息将损失。因此,在此情形下重要的是,类型指示符设定成未知的,以便辨识此未知类型。例如,响应于正在执行的显式清除指令或在从异常返回之后出现状态清除。
在一些实施例中,储存位置中的一个储存位置被配置为储存步骤指示符值,步骤指示符值指示在发生下个诊断异常之前将执行一个或者零个指令,数据处理设备被配置为响应于步骤指示符值为零,在发生诊断异常之后将类型指示符设定成未知类型。
数据处理设备在一些实施例中被配置为响应于在执行单个指令中的一个单个指令之后发生异常,在发生诊断异常之前将步骤指示符值设定成零,从而响应于步骤指示符值为零,在从异常返回之后不执行任何指令,并且发生搁置诊断异常。在此点处应将类型指示符设定成未知的,因为响应于另一异常可能已执行其他指令,因此,此值可不再反射先前以步骤模式被执行的单个指令。
在一些实施例中,预定类型包括以下情况下的指令的类型:在进入诊断异常或从诊断异常返回之后由异常处置器执行的操作改变处理设备的状态,从而指令流中的后续指令可以以不同方式执行。
本发明的第六方面提供一种由计算机程序提供的虚拟机,计算机程序执行于数据处理设备上,虚拟机提供根据本发明的第四方面或第五方面的数据处理设备的指令执行环境。
本发明的以上以及其他目标、特征结构以及优点将由结合随附附图阅读的说明性实施例的以下详细描述显而易见。
附图说明
图1示出根据本发明的实施例的数据处理设备,数据处理设备具有连接至数据处理设备的远程诊断设备;
图2示出根据本发明的实施例的数据处理设备,数据处理设备与诊断电路系统合并;
图3示出根据本发明的实施例的以单一步骤诊断模式被执行的指令流内的专属加载指令的处理;
图4示出单一步骤诊断模式中的指令流的处理,在单一步骤诊断模式中,在专属加载指令之后出现中断;
图5示出单一步骤诊断模式中的指令流的处理,在单一步骤诊断模式中,在执行专属加载指令之前出现中断;
图6示出以单一步骤诊断模式操作的处理器的可能状态;
图7a示出说明根据本发明的实施例的方法中的步骤的流程图;
图7b示出说明根据本发明的另一实施例的方法中的步骤的流程图;
图7c示出指示符的可能值的表,指示符与分步指令的类型一起指示除错事件的原因;以及
图8示出本发明的实施例的虚拟机实施。
具体实施方式
图1示出数据处理设备10,数据处理设备10具有用于处理指令流的处理器20。处理器包括管线,管线具有用于从指令高速缓存22提取指令的提取单元20a、用于对指令解码的解码单元20b以及用于执行经解码指令的执行单元20c。数据处理设备10还具有寄存器组30,寄存器组30包括用于储存在处理期间使用的数据的寄存器。这些寄存器包括状态寄存器以及至少一个控制寄存器,状态寄存器储存处理器的当前状态,至少一个控制寄存器用于储存控制值。在以下情况下可能需要状态寄存器:例如,发生中断并且需要储存处理器的当前状态,以便在从中断返回之后,可恢复状态。
数据处理设备10还具有外部端口12,外部端口12与诊断设备40连接,诊断设备40包括诊断电路系统42。诊断电路系统42用以分析数据处理设备的操作,因此,诊断电路系统42可发送信号来控制处理器20的执行并且可从处理器接收输出的资料,以进行分析。
在此实施例中,诊断电路系统42被配置为当诊断电路系统42希望分析处理器的指令流执行时控制处理器20以单步骤模式操作。在单步骤模式中,在执行每一指令之后,在执行指令流中下个指令之前发生诊断异常。处理器以此方式分步通过程序,并且在每一步骤之后可通过诊断电路系统42分析处理器的状态。诊断电路系统42通过在控制寄存器EDECR中设定位EDECR.SS来控制处理器以单步骤模式操作,此位设定成对处理器20指示处理器20应以单步骤模式操作。存在另一控制寄存器EDESR,控制寄存器EDESR具有位EDESR.SS,位EDESR.SS当执行指令时递减并且通过发生诊断异常而递增。此位使处理器能够知道是否在单步骤模式期间发生非诊断异常、是否应执行指令或是否应在从非诊断异常返回之后发生诊断异常。存在另一状态寄存器EDSCR,状态寄存器EDSCR具有位字段EDSCR.MOE,位字段EDSCR.MOE记录发生诊断异常的原因。
当发生诊断异常时,通过诊断电路系统42执行诊断代码,诊断电路系统42检测数据处理设备10的状态并且储存此信息中的一些,用以进行分析。
当诊断电路系统42想要结束程序时,诊断电路系统42重设控制寄存器中的单一步骤位EDECR.SS以及EDESR.SS,并且处理器随后回归至正常执行模式。
除控制处理器以单步骤模式操作以外,诊断电路系统42也可以控制执行其他诊断操作。举例而言,诊断电路系统42可在正在执行的代码内设定断点或监看点,并且这些断点或监看点允许代码在代码执行时在某些设定点处中断,并且可随后在这些点处分析处理器的状态。
尽管在图1中,诊断电路系统42示为在处理设备10的外部,但在许多实施例中,诸如在图2中,诊断电路系统42将存在于处理设备内部。
因此,图2示出数据处理设备10,数据处理设备10包括诊断电路系统42、寄存器组30以及用于储存诊断软件的数据储存器,在一些实施例中诊断软件可通过诊断电路系统42内的处理器来执行,而在其他实施例中诊断软件可在处理器20本身上执行。在一些实施例中,诊断软件可储存于外部存储器44中。
在以上详述的情况下,发生诊断异常将触发储存于储存器43或存储器44中的诊断软件通过处理器20来执行。在此实施例中,储存于寄存器组30中的值略不同于储存于图1的寄存器组中的那些值。在此实施例中,使用者可指示,应进入单一步骤诊断模式,并且诊断电路系统42将写入至寄存器组30中的控制寄存器,并在MDSCR寄存器中设定单一步骤位MDSCR.SS,并且在保存的状态寄存器SPSR中设定保存的步骤数位SPSR.SS,单一步骤位MDSCR.SS指示信号步骤模式,保存的步骤数位SPSR.SS指示采取为1或者0的步骤数。诊断电路系统42随后指示处理器20执行正在除错的软件。响应于此请求,处理器将SPSR.SS位复制至当前状态寄存器CPSR中的当前步骤数位CPSR.SS。
因此,响应于这些被设定的位,处理器处理单个指令并且将CPSR.SS位设定成0,以指示处理器已执行一个指令并且随后发生诊断异常。处理器20将步骤数位从当前状态寄存器CPSR.SS复制至保存的状态寄存器SPSR.SS作为发生诊断异常的部分。
处理器20还将关于诊断异常的进一步信息写入至寄存器组30中的另一状态寄存器ESR,另一状态寄存器ESR用以记录关于异常的信息,异常包括诊断异常。
处理器20执行后面紧接着诊断代码的异常处置器代码,并且分析处理器的当前状态。将SPSR寄存器中的步骤数位SPSR.SS设定成1,以指示现应执行指令流中的下个指令。当将退出单一步骤诊断模式时,重设寄存器组30中的寄存器SPSR以及MDSCR中的控制位MDSCR.SS以及SPSR.SS。
如果实施多个阶层式处理状态或异常级别,则每一异常级别具有每一异常级别自身的SPSR以及ESR寄存器、异常级别1的SPSR_EL1以及ESR_EL1、异常级别2的SPSR_EL2以及ESR_EL2等。
图3示出如何根据本发明的实施例以单一步骤诊断模式执行包括专属加载指令LDREX的指令代码。在此附图中时间自左至右流动。因此,将SPSR.SS位以及MDSCR.SS位设定成1,从而指示执行操作的单步骤模式、异常返回ERET指令,以跳越至正在除错的软件中。这会将SPSR.SS复制至CPSR.SS,因此执行来自正在除错的软件的单个指令。此指令为专属加载指令LDREX指令,并且响应于正在执行的专属加载指令LDREX,将CPSR.SS位设定成0,从而指示在发生诊断异常之前应不执行任何另外的指令。
发生诊断异常,将CPSR.SS复制至SPSR.SS,并且将状态寄存器内的校验位(syndrome bit)ESR.EX设定成1,以指示执行了专属加载指令LDREX。还设定此寄存器内的有效位ESR.ISV,有效位ESR.ISV指示此值为用于此位的有效值。
每当执行特定类型的指令时,在本发明的实施例中设定这些校验以及相应的有效位。这些指令可为专属地主张监控器的类型的指令,指令随后指示指令具有对特定储存位置的专属访问,指令诸如专属加载指令。指令也可以为其他类型的指令,在为其他类型的指令时,指令流内后续指令的执行可通过异常处置器执行来改变。
当LDREX指令访问第一位置时,监控器位记录访问此第一位置。监控器具有两种状态:“开放访问”以及“专属访问”。LDREX通过将监控器处于“专属访问”状态来主张对第一位置的访问,并且监控器以地址标记的形式记录所访问的地址。
在储存专属STREX指令上检查监控器以及监控器的标记。STREX指令为储存指令,储存指令请求将值写入至第二位置。如果监控器处于“专属访问”状态下,则STREX指令仅允许写入继续进行,并且STREX正写入至所标记的地址,即,第二位置匹配第一位置。通过STREX本身将监控器迫使返回至“开放访问”;但也通过清楚的专属CLREX指令或访问所标记的地址的可能一些其他指令。为避免由异常处置器引起LDREX指令与STREX指令之间的软件上下文的改变造成的可能的软件失灵,通过异常返回亦迫使专属监控器返回至“开放访问”。这可通过软件约定来执行,例如,通过在ERET之前始终执行CLREX指令,或可通过硬件在执行ERET指令之后迫使监控器返回至“开放访问”状态来实施。
对于多处理器系统中的全局监控器而言,如果访问亦来自与发出LDREX的处理器相同的处理器,则STREX仅允许写入。监控器也可以通过其他指令访问其他位置来清除至“开放访问”状态,其他位置诸如接近于所标记地址的位置。
因此,在此实施例中,在执行单一LDREX指令之后并且响应于设定成指示单步骤模式的MDSCR.SS控制位,发生诊断异常并且设定ESR.EX位以及ESR.ISV位,并且随后执行诊断代码。诊断代码检测到设定ESR.ISV有效位以及相应的ESR.EX校验位,并且当这些位指示先前的指令为在单步骤模式并不适当的情况下的预定类型中的一种时,诊断代码指示处理器清除MDSCR.SS位以及SPSR.SS位,从而在从异常处置器返回之后,退出单步骤模式并且指令流的正常执行出现。
诊断代码还设定指示指令流中的点的适合断点,并且这允许诊断电路系统在此点处中断正常执行并且在必要时再启动单步骤模式。
处理器随后执行指令流的下个部分,直至到达断点为止。此断点将设定于代码中的如下位置:该位置在代码的区块之后,代码的区块的执行通过指令之间出现的异常来改变。
将被执行的代码可例如为尝试获得对信号量变量的专属访问的代码:
在此实例中,代码循环,直至代码获得信号量为止。代码将随后成功地退出循环,因此可将断点放在代码的此区段之后,代码的区段允许返回至单步骤模式。
在其他代码中,如果软件未获得信号量,则软件可能想要执行另外的步骤。可以此方式写入代码,以允许另一程序可能已获得信号量的情况,因此,代码可花费一些时间来变得可用。此代码为不同类型的代码:
注意到,如果STREX失效,则代码循环,因为STREX失效未必暗示信号量已由另一程序采取,因此值得再试一次。
在此情况下,步骤已执行到LDREX,除错器找到循环的两个退出点,一个退出点在代码的此区段的末端,并且一个退出点在标示“SomethingElse”(未示出)处。因此除错器必须在两个退出点上设定断点。
在以上实施例中,处理器重新开始正常执行并且从专属加载指令之后继续执行代码。在其他实施例中,如果此加载专属指令是适当的或加载专属指令本身可仿真不应以单步骤模式执行的代码的区段,则诊断代码可控制处理器再执行加载专属指令,并且随后诊断代码控制处理器在代码的此区段之后开始执行代码,在此情况下,在储存专属指令之后开始执行代码。
如果响应于设定有效位ESR.ISV以及校验位ESR.EX,诊断代码未被配置为控制处理器退出单一步骤诊断模式,则在从诊断异常返回之后,异常处置器将清除专属监控器,并且代码将不会取得向前的进展。
图4示出在加载专属指令已以单步骤模式执行(MDSCR.SS=1)之后搁置高优先等级中断的情况下的实施例。在此实施例中存在多个异常级别。诊断代码执行于EL1处,并且以指示将以单步骤模式执行单个指令在所保存步骤数位的保存状态寄存器中将所保存的步骤数位SPSR_EL1.SS设定成1。如在图3中,诊断代码执行ERET指令,ERET指令将SPSR_EL1.SS复制至CPSR.SS。在执行加载专属指令之后,CPSR.SS清除为0。因此,当以优先于亦搁置的诊断异常的异常级别2EL2发生中断时,处理器将EL2的所保存步骤数位SPSR_EL2.SS位设定成0。当已处理中断时,执行用于从中断返回的指令。这会清除专属监控器(通常在从异常返回之后执行清除)并且将SPSR_EL2.SS复制至CPSR.SS。当步骤数位CPSR.SS现设定成0时,产生诊断异常,而不执行任何指令。当无指令执行时,处理器20将与专属监控器相关联的有效位ESR.ISV设定成零,从而指示先前已执行并且可能已主张专属监控器的指令的类型是未知的。
响应于检测ESR.ISV为零,除错代码需要判定先前被执行的指令为何指令,因此,除错代码从处理器请求此指令的代码。尽管存在与此请求相关联的一些开销,但仅在异常已在指令已以单步骤模式执行之后出现的情形下需要此请求,因此,此状况极其不同于需要请求每一指令。
图5示出当在单一步骤执行指令之前立即接收EL2优先中断时所发生的情况。在此情况下,当发生中断时,将步骤数指示符CPSR.SS设定成1,所以SPSR_EL2.SS设定成1,因此,在从此异常返回之后,执行下个指令加载专属并且随后发生诊断异常。当被执行的指令为专属加载指令时,处理器20设定ESR.EX位以及ESR.ISV位,因此,响应于此,诊断代码清除SPSR_EL1.SS值以及MDSCR.SS值,并且诊断代码控制处理器进入正常操作模式,正常操作模式已首先设定一个或多个断点。
总之,如果紧接于指令步骤之后立即产生软件步骤诊断异常,则将有效位ESR.ISV设定成1,如果在刚未执行指令的情况下产生软件步骤除错异常,则将有效位ESR.ISV设定成0。
图6示出软件步骤模式中的处理器的可能状态。
如果未设定MDSCR.SS位,则处理器不以单步骤模式执行。因此,最初处理器的软件步骤状态为无效并且禁用的,并且除错器执行诊断软件。MDSCR.SS位以及SPSR.SS位随后经设定以指示在执行从除错器异常返回之后将进入步骤模式。在该异常返回之后,处理器进入有效非搁置状态,在有效非搁置状态下,可执行单个指令(即,软件步骤为有效的,但在此点处无诊断异常搁置)。如果执行被除错代码,并且将MDSCR.SS位设定成指示单步骤模式,并且将CPSR.SS位设定成指示将执行一个指令,则处理器处于此状态。
处理器可通过执行单个指令或者通过发生异常来退出此状态。如果处理器执行指令,则CPSR.SS重设成零,从而指示单一步骤已完成。在此阶段,软件步骤诊断异常现搁置,因此软件步骤状态为有效搁置。
处理器也可以通过发生除软件步骤诊断异常以外的异常来退出此状态,于是,如果此异常比诊断异常优先等级更高,则当软件步骤状态被处理时,软件步骤状态为禁用的。取决于异常的类型并且异常出现在执行指令之前还是在执行指令之后,SPSR.SS位在发生异常之后为1或者0,因此在从异常处置器返回之后,处理器返回至有效非搁置状态或者有效搁置状态。
然而,如果另一异常比诊断异常优先等级更低,则将CPSR.SS位重设成零,从而指示单一步骤已完成。在此阶段,软件步骤诊断异常现搁置,因此软件步骤状态为有效搁置。
从有效搁置状态发生软件步骤诊断异常,从而将CPSR.SS复制至SPSR.SS。执行回归至除错器,并且软件步骤状态为禁用的。仍将MDSCR.SS位设定成指示单步骤模式,并且清除SPSR.SS位,从而指示步骤已执行。
图7a示出说明根据本发明的实施例的方法中的步骤的流程图。方法由诊断设备通过在控制寄存器中设定单一步骤位并且将步骤数设定成1来进入单一步骤诊断模式开始。
方法随后(经由标示为“A”的连接)由返回至正分步执行的代码而继续进行。
当最初步骤数为1时,随后如果不存在异常搁置,则执行单个指令。假定此指令不产生任何异常,将步骤数设定成零,并且如果无其他异常搁置,则设备还判定指令是否为预定类型,此类型为以下情况下的类型:在执行指令之后发生异常将影响以下指令以何方式执行。如果指令为预定类型,则在状态寄存器中设定类型位以及有效位,如果指令并非为预定类型,则设定有效位并清除类型位。现发生诊断异常,并且方法继续(经由标示为“B”的连接)。
假定方法未完成(未示出如何判定此状况的细节),则诊断设备判定诊断异常是由软件步骤造成的,并且如果诊断异常是由软件步骤造成的,则进一步判定是否设定有效位以及类型位。如果设定有效位并且清除类型位,则方法返回将步骤数设定成1(仍设定单一步骤控制位),并且方法由分步执行下个指令而继续。注意到,这是通过方法的最常见的路径,并且也是最佳路径。
然而,如果有效位与类型位两者皆设定,则这是应抑制单步骤模式的指示,并且在可再启动单步骤模式的情况下,清除单一步骤位并在代码中一个或多个适合点处设定一个或多个断点。
类似地,如果判定在发生诊断异常之后不设定有效位,则方法执行指令的直接测试,直接测试经分步执行以查看指令是否为一个或多个预定类型中的一种。基于此测试,方法判定是否继续进行单步骤模式或设定一个或多个断点。方法再次(经由连接“A”)由返回至正分步执行的代码而继续进行。
然而,在已使用一个或多个断点的情况下,不设定单一步骤控制位,因此指令作为指令流来执行,直至到达断点并且发生诊断异常为止。因为随后判定诊断异常是由断点造成的,所以移除一个或多个断点,并且设定单一步骤控制位,并且将步骤数设定成1,因此单步骤模式重新开始。
应注意,中断以及其他异常可能在以正常方式执行指令流期间出现并且发生。
如果在执行来自正在除错的代码的一个或多个指令期间的任何时间,非诊断异常搁置,则异常将发生。对于在执行指令之前发生的异常而言,并且对于由正在被执行的指令产生的除系统呼叫(syscall)异常以外的异常(诸如,存储器管理故障)而言,在发生异常之前步骤数不变(1)。在这些情况下,异常有效地取消指令,意味着如果正在分步执行指令,则应再次分步执行指令。
因此,在发生异常之后,在异常处置器的SPSR中记录步骤数。随后将步骤数设定成零。
应进一步注意,非诊断异常可具有比诊断异常的优先等级更低的优先等级。如果此状况为软件步骤控制位在处理非诊断异常期间有效的情况,并且因为步骤数现为零,则将立即发生诊断异常。当不执行任何指令时,有效位与类型位两者皆清除。
对于在指令以及由指令产生的syscall异常之后发生的高优先等级中断而言,有效地完成指令,因此在发生异常之前将步骤数设定成零。仅具有比诊断异常以及syscall异常的优先等级更高的优先等级的中断可在此点处发生。
否则,在从异常返回之后,如果设定单一步骤控制位,则从SPSR恢复步骤数,并且评估步骤数。如果步骤数为1,则此步骤数指示在完成处于步骤模式的指令之前发生异常,因此在从异常返回之后,再执行串流中的指令。
如果步骤数为零,则此步骤数指示在完成以步骤模式执行指令之后但在发生与该指令相关联的诊断异常之前发生异常。在此情况下,假定无较高优先等级的异常搁置,则立即发生诊断异常。然而,有效位以及相关联的类型位必须经清除以指示无法判定指示指令类型的值,因为将同时执行其他指令。
因此,在发生诊断异常(经由“B”)之后,将判定清除有效位并且方法执行指令的直接测试,直接测试经分步执行以查看指令是否为一个或多个预定类型中的一种。基于此测试,方法判定是否继续进行单步骤模式或设定一个或多个断点。
如以上所述,方法再次(经由「A」)由返回至正分步执行的代码而继续进行。
图7b示出说明根据本发明的另一实施例的方法中的步骤的流程图。此方法通常用于“外部除错”的情况,如图1所示,在“外部除错”的情况下,除错器在外部设备上。在此情况下,指示符值指示诊断异常的原因,原因可为程序正在分步执行,在程序分步执行的情况下,指示符值将指示指令的类型,或指示符值可为除错事件/诊断异常的另一原因。因此,此指示符值具有多个可能值,多个可能值包括:不为预定类型的分步的指令、为预定类型的分步的指令、未知类型的分步的指令;三种类型的值可能为:0110、0111以及1110。其他值用以指示除错事件/诊断异常的其他原因,诸如,断点发生、停止请求等。这些可能值示出于图7c的表中。在图7b的流程图中仅考虑步骤值以及断点值,因为这些步骤值以及断点值为可在方法中出现的唯一事件类型。
因此,在图7a中,方法由诊断设备通过在控制寄存器中设定单一步骤位并且将步骤数设定成1来进入单一步骤诊断模式开始。
方法随后(经由标示为“A”的连接)由返回至正分步执行的代码而继续进行。
当最初步骤数为1时,如果不存在异常搁置,则执行单个指令。假定此指令不产生任何异常,将步骤数设定成零,并且如果无其他异常搁置,则设备还判定指令是否为预定类型,此类型为以下情况下的类型:在执行指令之后发生异常将影响以下指令以何方式执行。如果指令为预定类型,则在状态寄存器中将类型指示设定成STEPexcl,如果指令并非为预定类型中的一种,则将类型指示设定成STEPok。现发生诊断异常,并且方法继续(经由标示为“B”的连接)。
假定方法未完成(未示出如何判定此状况的细节),则诊断设备判定将类型指示设定成何种类型指示。如果将类型指示设定成STEPok,STEPok指示指令并非为预定类型中的一种,则方法返回将步骤数设定成1(仍设定单一步骤控制位),并且方法由分步执行下个指令而继续。注意到,这是通过方法的最常见的路径,并且也是最佳路径。
如果将类型指示设定成STEPunknown,STEPunknown指示指令的类型为未知的,则方法执行指令的直接测试,直接测试经分步执行以查看指令是否为一个或多个预定类型中的一种。基于此测试,方法判定是否继续进行单步骤模式或设定一个或多个断点。方法再次(经由连接“A”)由返回至正分步执行的代码而继续进行。
如果将类型指示设定成STEPexcl,STEPexcl指示分步被执行的指令为预定类型,则这是应抑制单步骤模式的指示,并且在可再启动单步骤模式的情况下,清除单一步骤控制位并在代码中一个或多个适合点处设定一个或多个断点。
在已使用一个或多个断点的情况下,不设定单一步骤控制位,因此指令作为指令流来执行,直至到达断点为止。在此点处,将指示类型设定成BRK,因为诊断异常是由断点造成的,并且发生诊断异常。随后,响应于类型指示为BRK,移除一个或多个断点,并且设定单一步骤控制位,并且将步骤数设定成1,因此单步骤模式重新开始。
应注意,中断以及其他异常可能在以正常方式执行指令流期间出现并且发生。
如果在执行来自正在除错的代码的一个或多个指令期间的任何时间,非诊断异常搁置,则异常将发生。对于在执行指令之前发生的异常而言,并且对于由正在被执行的指令产生的除系统呼叫(syscall)异常以外的异常(诸如,存储器管理故障)而言,在发生异常之前步骤数不变(1)。在这些情况下,异常有效地取消指令,意味着如果正在分步执行指令,则应再次分步执行指令。
在异常处置器的SPSR中记录步骤数。随后将步骤数设定成零。
应进一步注意,非诊断异常可具有比诊断异常的优先等级更低的优先等级。如果为此状况,软件步骤控制位在处理非诊断异常期间为有效的,并且因为步骤数现为零,则将立即发生诊断异常。当不执行任何指令时,将类型指示设定成STEPunknown(未示出)。
对于在指令以及由指令产生的syscall异常之后发生的高优先等级中断而言,有效地完成指令,因此在发生异常之前将步骤数设定成零。仅具有比诊断异常以及syscall异常的优先等级更高的优先等级的中断可在此点处发生。
否则,在从异常返回之后,如果设定单一步骤控制位,则从SPSR恢复步骤数,并且评估步骤数。如果步骤数为1,则此步骤数指示在完成处于步骤模式的指令之前发生异常,因此在从异常返回之后,再执行串流中的指令。
如果步骤数为零,则此步骤数指示在完成以步骤模式执行指令之后但在发生与该指令相关联的诊断异常之前发生异常。在此情况下,假定无较高优先等级的异常搁置,则立即发生诊断异常,并且在发生诊断异常之前将类型指示设定成STEPunknown,以指示无法判定指令的类型,因为将同时执行其他指令。
因此,在发生诊断异常(经由“B”)之后,将判定指示类型为STEPunknown并且方法执行指令的直接测试,直接测试经分步执行以查看指令是否为一个或多个预定类型中的一种。基于此测试,方法判定是否继续进行单步骤模式或设定一个或多个断点。
图8示出可使用的虚拟机实施。当先前所描述的实施例依据用于操作支持有关技术的特定处理硬件的设备以及方法来实施本发明的时候,也可以能提供所谓的硬件装置的虚拟机实施。这些虚拟机实施在主处理器530上执行,主处理器530通常执行主机操作系统520,主机操作系统520支持虚拟机程序510。通常,需要大型强大的处理器来提供以合理速度执行的虚拟机实施,但在某些情形下(诸如,当出于兼容性或再使用的原因而希望将本机代码执行至另一处理器时)可调整此方法。虚拟机程序510能够执行应用程序(或操作系统)500,以给出与将通过此真实硬件装置执行程序给出的结果相同的结果。因此,程序指令的诊断分步执行包括控制进入此操作模式以及退出此操作模式,可使用虚拟机程序510从应用程序500内执行程序指令的诊断分步执行。
尽管本文已参阅随附附图详细地描述本发明的说明性实施例,但熟习此项技术者应理解,本发明不限于这些精确的实施例,并且可在本发明中实现各种改变以及修改,而不脱离由附加的申请专利范围定义的本发明的范畴以及精神。

Claims (34)

1.一种用于诊断处理指令流的处理器的方法,包括:
(i)控制所述处理器以单步骤模式执行,以使得来自所述指令流的单个指令被执行,所述处理器判定所述单个指令是否为至少一种预定类型的指令中的一种并且在数据储存位置处储存类型指示符,并且在所述处理器已处理所述单个指令之后发生诊断异常;
(ii)在所述诊断异常之后执行诊断操作,包括:
访问储存于所述数据储存位置中的所述类型指示符;以及
(iiia)响应于所述类型指示符指示所述单个指令并非所述预定类型中的一种,控制所述处理器继续以所述单步骤模式执行指令,以使得在从所述诊断异常返回之后执行下一单个指令;
(iiib)响应于所述类型指示符指示所述单个指令为所述至少一种预定类型中的一种,控制所述处理器退出所述单步骤模式并且不执行作为后面跟随着诊断异常的单个指令的所述指令流内的下一指令,
其中所述预定类型包括以下情况下的指令的类型:在进入异常或从异常返回之后由异常处置器执行的操作改变包括所述处理器的设备的状态,以使得所述指令流中的至少一个后续指令可以以不同方式执行。
2.如权利要求1所述的方法,其中所述步骤(iiib)包括:控制所述处理器在从所述诊断异常返回之后执行所述指令流内的多个指令。
3.如权利要求2所述的方法,其中所述多个指令包括所述指令流中继所述被执行的单个指令之后的多个指令。
4.如权利要求2所述的方法,其中所述多个指令包括所述指令流中继所述被执行的单个指令之后的多个指令并且包括所述被执行的单个指令。
5.如权利要求2-4中的任一项所述的方法,还包括如下步骤:响应于所述类型指示符指示所述单个指令为所述至少一种预定类型中的一种,在所述指令流内设定至少一个断点,以使得所述多个指令被执行直至到达所述至少一个断点,如果在执行所述多个指令期间未接收其他异常,并且响应于到达所述至少一个断点,则发生诊断断点异常。
6.如权利要求1所述的方法,其中所述步骤(iiib)包括:仿真所述被执行的单个指令以及所述指令流中的至少一个后续指令,并且随后控制所述处理器从所述指令流中的一指令开始所述单步骤模式,该指令紧跟着经仿真的所述至少一个后续指令的后面。
7.如在权利要求1所述的方法,其中储存于所述数据储存位置中的所述类型指示符指示所述单个指令为所述预定类型中的一种或所述指令并非为所述预定类型中的一种,或者指示所述指令为未知类型,其中如果在访问所述类型指示符的所述步骤中,判定所述类型指示符指示所述指令为未知类型,则执行检验所述单个指令并且判定所述单个指令是否为所述预定类型的额外步骤。
8.如权利要求7所述的方法,其中所述类型指示符包括两个指示符值:第一值以及第二有效值,所述第一值指示所述指令为所述预定类型或并非为所述预定类型,所述第二有效值指示所述第一值是否有效,所述第二有效值为无效指示所述指令为所述未知类型。
9.如权利要求7所述的方法,其中所述类型指示符进一步包括所发生的诊断异常的类型的指示。
10.如权利要求7所述的方法,其中所述方法包括以下初始步骤:设定单个指令步骤控制值并且设定步骤指示符值,所述单个指令步骤控制值指示将要执行所述单个指令步骤诊断方法,所述步骤指示符值指示将要在将发生下一诊断异常之前执行所述指令流中的单个指令。
11.如权利要求7所述的方法,其中响应于所述步骤指示符值指示在发生下一诊断异常之前零个指令将被执行,在发生所述诊断异常之后所述类型指示符被设定成未知类型。
12.如权利要求7所述的方法,其中响应于在发生所述下一诊断异常之前所述处理器的清除状态,所述类型指示符被设定为指示所述被执行的指令为所述未知类型。
13.如权利要求1所述的方法,其中所述至少一种预定类型中的一种的指令包括访问锁定位置的指令,所述锁定位置储存锁定值和清除值中的一个,所述清除值指示处理器可写入至预定储存位置,并且所述锁定值指示储存所述锁定值的处理器对所述预定储存位置的专属写入访问。
14.一种用于分析处理指令流的处理器的诊断设备,所述诊断设备包括:
输出端以及输入端,所述输出端用于将控制信号输出至所述处理器,所述输入端用于从所述处理器接收数据;以及
诊断电路系统,所述诊断电路系统用于执行诊断操作;
所述诊断电路系统被配置为将控制信号输出至所述处理器,来设定指示将以单步骤模式操作所述处理器的指示符值,从而执行所述指令流中的单个指令并且随后发生诊断异常;以及
所述诊断电路系统被配置为访问用于储存类型指示符的储存位置,所述类型指示符指示所述被执行的单个指令是否为至少一种预定类型指令中的一种;以及
响应于所述类型指示符指示所述被执行的单个指令并非为所述预定类型中的一种,所述诊断电路系统被配置为控制所述处理器继续以所述单步骤模式执行指令,以使得在从所述诊断异常返回之后执行下一单个指令;以及
响应于所述类型指示符指示所述被执行的单个指令为所述至少一种预定类型中的一种,所述诊断电路系统被配置为控制所述处理器退出所述单步骤模式并且不执行作为后面跟随着诊断异常的单个指令的所述指令流内的所述下一指令,
其中所述预定类型包括以下情况下的指令的类型:在进入异常或从异常返回之后由异常处置器执行的操作改变所述处理设备的状态,以使得所述指令流中的后续指令可以以不同方式执行。
15.如权利要求14所述的诊断设备,其中响应于所述类型指示符指示所述被执行的单个指令为所述至少一种预定类型中的一种,所述诊断电路系统被配置为控制所述处理器在从所述诊断异常返回之后执行所述指令流内的多个指令。
16.如权利要求15所述的诊断设备,其中所述多个指令包括所述指令流中继所述被执行的单个指令之后的多个指令。
17.如权利要求15所述的诊断设备,其中所述多个指令包括所述指令流中继所述被执行的单个指令之后的多个指令并且包括所述被执行的单个指令。
18.如权利要求15-17中的任一项所述的诊断设备,所述诊断电路系统被配置为响应于所述类型指示符指示所述被执行的单个指令为所述至少一种预定类型中的一种,在所述多个指令之后在所述指令流内设定断点。
19.如权利要求14所述的诊断设备,其中所述诊断电路系统被配置为仿真所述被执行的单个指令以及所述指令流中的至少一个后续指令,并且所述诊断电路系统被配置为向所述处理器发出控制信号,以从一指令开始所述单步骤模式,该指令紧跟着经仿真的所述至少一个后续指令的后面。
20.如权利要求14-17中的任一项所述的诊断设备,其中储存于所述数据储存位置中的所述类型指示符指示所述指令为所述预定类型中的一种或所述指令并非为所述预定类型中的一种,或者指示所述指令为未知类型,所述诊断电路系统被配置为响应于所述类型指示符指示所述类型为未知,向所述处理器请求所述被执行的单个指令并从所述指令判定所述类型。
21.如权利要求20所述的诊断设备,其中所述类型指示符包括两个指示符值:第一值以及第二有效值,所述第一值指示为所述预定类型或并非为所述预定类型,所述第二有效值指示所述第一值是否有效,所述第二有效值为无效指示所述指令为所述未知类型。
22.如权利要求14-17中的任一项所述的诊断设备,其中所述类型指示符进一步包括所发生的诊断异常的类型的指示。
23.一种数据处理设备,其包括用于处理指令流的处理器以及如权利要求14-22中的任一项所述的用于分析所述处理器的诊断设备。
24.如权利要求23所述的数据处理设备,所述数据处理设备包括用于储存类型指示符的储存位置,所述处理器被配置为响应于执行来自所述指令流的单个指令,来判定所述单个指令是否为至少一种预定类型中的一种并储存类型指示符,所述类型指示符指示所述单个指令是否为所述预定类型。
25.如权利要求22所述的数据处理设备,所述处理器被配置为响应于在执行所述单个指令中的一个单个指令之后发生的、除所述诊断异常以外的异常,来将所述类型指示符设定成指示被执行的指令为未知类型。
26.如权利要求23或24所述的数据处理设备,其中所述诊断设备被配置为执行单个指令步骤诊断方法,并且当执行所述方法以设定单个指令步骤控制值并且设定步骤指示符值,所述单个指令步骤控制值指示将要执行所述单个指令步骤诊断方法,所述步骤指示符值指示将要在将发生下一诊断异常之前执行的所述指令流中的单个指令。
27.如权利要求26所述的数据处理设备,所述处理器被配置为响应于在执行所述单个指令中的一个单个指令之后发生除所述诊断异常以外的异常,来将所述步骤指示符值设定成指示零个指令,以使得在从所述异常返回之后,响应于所述步骤指示符值不执行任何指令,并且所述处理器发生搁置诊断异常。
28.如权利要求23或24所述的数据处理设备,其中所述至少一种预定类型指令中的一种包括访问锁定位置的指令,所述锁定位置储存锁定值和清除值中的一个,所述清除值指示处理器可写入至预定储存位置,并且所述锁定值指示储存所述锁定值的处理器对所述预定储存位置的专属写入访问。
29.一种包括处理器以及多个储存位置的数据处理设备,所述处理器用于处理数据,所述多个储存位置用于储存控制数据;
所述储存位置中的至少一个储存位置储存单步骤模式控制值,所述数据处理设备被配置为对所述单步骤模式控制值作出响应,所述单步骤模式控制值被设定为以单步骤模式执行来自指令流的指令,以使得在所述指令中的每个的执行之后发生诊断异常;
所述处理器被配置为在设定所述单步骤模式控制值时,针对由所述处理器执行的每个指令来判定所述指令是否为至少一种预定类型中的一种,并且被配置为将类型指示符储存于所述储存位置中的一个储存位置内,所述类型指示符指示所述指令为所述预定类型中的一种,或所述指令并非为所述预定类型中的一种,或所述指令为未知类型。
30.如权利要求29所述的数据处理设备,其中所述类型指示符的储存包括两个值的储存:第一值以及第二值,所述第一值指示所述类型是否为所述预定类型,并且所述第二值指示所述第一值是否有效,由所述第二值表示的所述未知类型指示所述第一值无效。
31.如权利要求29所述的数据处理设备,其中所述类型指示符进一步包括所发生的诊断异常的类型的指示。
32.如权利要求29-31中的任一项所述的数据处理设备,所述数据处理设备被配置为响应于在发生紧接的所述诊断异常之前所述处理器的清除状态,来将所述类型指示符设定成指示执行的所述指令为所述未知类型。
33.如权利要求29-31中的任一项所述的数据处理设备,所述储存位置中的一个储存位置被配置为储存步骤指示符值,所述步骤指示符值指示在发生下一诊断异常之前一个或者零个指令将被执行,所述数据处理设备被配置为响应于所述步骤指示符值为零,在发生所述诊断异常之后将所述类型指示符设定成所述未知类型。
34.如权利要求29-31中的任一项所述的数据处理设备,其中所述预定类型包括以下情况下的指令的类型:在进入异常或从异常返回之后由异常处置器执行的操作改变所述处理设备的状态,以使得所述指令流中的后续指令可以以不同方式执行。
CN201280013329.0A 2011-03-14 2012-02-03 使用执行单一步骤来诊断编码 Active CN103430158B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201710550482.1A CN107577593B (zh) 2011-03-14 2012-02-03 使用执行单一步骤来诊断编码

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB1104254.6A GB2489000B (en) 2011-03-14 2011-03-14 Diagnosing code using single step execution
GB1104254.6 2011-03-14
PCT/GB2012/050232 WO2012123706A1 (en) 2011-03-14 2012-02-03 Diagnosing code using single step execution

Related Child Applications (1)

Application Number Title Priority Date Filing Date
CN201710550482.1A Division CN107577593B (zh) 2011-03-14 2012-02-03 使用执行单一步骤来诊断编码

Publications (2)

Publication Number Publication Date
CN103430158A CN103430158A (zh) 2013-12-04
CN103430158B true CN103430158B (zh) 2017-08-04

Family

ID=43980928

Family Applications (2)

Application Number Title Priority Date Filing Date
CN201710550482.1A Active CN107577593B (zh) 2011-03-14 2012-02-03 使用执行单一步骤来诊断编码
CN201280013329.0A Active CN103430158B (zh) 2011-03-14 2012-02-03 使用执行单一步骤来诊断编码

Family Applications Before (1)

Application Number Title Priority Date Filing Date
CN201710550482.1A Active CN107577593B (zh) 2011-03-14 2012-02-03 使用执行单一步骤来诊断编码

Country Status (10)

Country Link
US (2) US8839038B2 (zh)
EP (1) EP2686772B1 (zh)
JP (1) JP5905911B2 (zh)
KR (1) KR102025078B1 (zh)
CN (2) CN107577593B (zh)
GB (1) GB2489000B (zh)
IL (1) IL227769A (zh)
MY (1) MY158480A (zh)
TW (1) TWI544410B (zh)
WO (1) WO2012123706A1 (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107577593A (zh) * 2011-03-14 2018-01-12 Arm 有限公司 使用执行单一步骤来诊断编码

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2013095532A1 (en) * 2011-12-22 2013-06-27 Intel Corporation Interrupt return instruction with embedded interrupt service functionality
GB2517494B (en) 2013-08-23 2021-02-24 Advanced Risc Mach Ltd Handling time intensive instructions
US9411542B2 (en) * 2014-02-21 2016-08-09 Analog Devices Global Interruptible store exclusive
WO2016014081A1 (en) * 2014-07-25 2016-01-28 Hewlett-Packard Development Company, L.P. Exception handling predicate register
GB2535212B (en) 2015-02-13 2021-08-04 Advanced Risc Mach Ltd An apparatus and method for controlling debugging of program instructions including a transaction
GB2535213B (en) 2015-02-13 2021-10-06 Advanced Risc Mach Ltd An apparatus and method for controlling debugging of program instructions including a transaction
US10390798B2 (en) * 2015-04-10 2019-08-27 Oxford University Innovation Limited Computer-aided tracking and motion analysis with ultrasound for measuring joint kinematics
WO2017109442A1 (en) * 2015-12-22 2017-06-29 Arm Limited A method, apparatus and system for diagnosing a processor executing a stream of instructions
CN106371996B (zh) * 2016-09-07 2019-05-28 东信和平科技股份有限公司 一种断电测试方法及系统
CN114185324B (zh) * 2021-10-25 2024-04-02 华能澜沧江水电股份有限公司 自动发电控制程序的异常点检测方法、装置及计算机设备

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5050168A (en) * 1989-12-29 1991-09-17 Paterson Timothy L Test coverage analyzer
CN1577291A (zh) * 2003-07-30 2005-02-09 松下电器产业株式会社 程序调试装置、程序调试方法及程序

Family Cites Families (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6376028A (ja) * 1986-09-19 1988-04-06 Fujitsu Ltd 仮想計算機システムにおける命令ステツプ実行制御方式
US4819234A (en) * 1987-05-01 1989-04-04 Prime Computer, Inc. Operating system debugger
JP3205841B2 (ja) * 1991-10-25 2001-09-04 株式会社日立製作所 データ処理装置
US5621886A (en) * 1995-06-19 1997-04-15 Intel Corporation Method and apparatus for providing efficient software debugging
US5790843A (en) * 1996-09-19 1998-08-04 International Business Machines Corporation System for modifying microprocessor operations independently of the execution unit upon detection of preselected opcodes
US5938778A (en) * 1997-11-10 1999-08-17 International Business Machines Corporation System and method for tracing instructions in an information handling system without changing the system source code
JP2000076095A (ja) * 1998-08-28 2000-03-14 Fujitsu Ltd プログラムトレース装置およびプログラムトレース方法およびそのプログラムを記憶した記憶媒体
WO2001018651A1 (en) * 1999-09-07 2001-03-15 Koninklijke Philips Electronics N.V. Thread-oriented debugging
US6981226B2 (en) * 2000-08-07 2005-12-27 Siemens Aktiengesellschaft Flowchart programming for industrial controllers, in particular motion controllers
US6986026B2 (en) * 2000-12-15 2006-01-10 Intel Corporation Single-step processing and selecting debugging modes
GB0124563D0 (en) * 2001-10-12 2001-12-05 Siroyan Ltd Debug exception registers
US7350110B2 (en) * 2002-01-14 2008-03-25 International Business Machines Corporation Method and system using hardware assistance for continuance of trap mode during or after interruption sequences
JP3982353B2 (ja) 2002-07-12 2007-09-26 日本電気株式会社 フォルトトレラントコンピュータ装置、その再同期化方法及び再同期化プログラム
US7062684B2 (en) * 2002-12-19 2006-06-13 International Business Machines Corporation Enabling tracing of a repeat instruction
US7356735B2 (en) * 2004-03-30 2008-04-08 Intel Corporation Providing support for single stepping a virtual machine in a virtual machine environment
US7277998B1 (en) 2004-08-12 2007-10-02 Vmware, Inc. Restricting memory access to protect data when sharing a common address space
JP4537908B2 (ja) 2005-03-29 2010-09-08 株式会社東芝 プロセッサ、メモリ、コンピュータシステムおよびシステムlsi
US7882339B2 (en) * 2005-06-23 2011-02-01 Intel Corporation Primitives to enhance thread-level speculation
US20070168729A1 (en) 2005-12-06 2007-07-19 Mediatek Inc. System and method for testing and debugging electronic apparatus in single connection port
US7996835B2 (en) * 2006-10-10 2011-08-09 International Business Machines Corporation System, method and program for managing communication with multiple configurations for virtual machine
US7853834B2 (en) * 2007-01-30 2010-12-14 Freescale Semiconductor, Inc. Instruction-based timer control during debug
US7823022B2 (en) * 2007-02-20 2010-10-26 Red Hat, Inc. Methods and systems for first occurence debugging
US7827391B2 (en) * 2007-06-26 2010-11-02 International Business Machines Corporation Method and apparatus for single-stepping coherence events in a multiprocessor system under software control
US8261240B2 (en) * 2008-01-15 2012-09-04 Microsoft Corporation Debugging lazily evaluated program components
US7992043B2 (en) * 2008-10-22 2011-08-02 International Business Machines Corporation Software debugger for packets in a network on a chip
US8429622B2 (en) * 2010-04-15 2013-04-23 Oracle International Corporation Business process debugger with parallel-step debug operation
US20120102469A1 (en) * 2010-10-22 2012-04-26 International Business Machines Corporation Deterministic application breakpoint halting by logically relating breakpoints in a graph
TW201235833A (en) * 2011-02-16 2012-09-01 Ind Tech Res Inst System and method for multi-core synchronous debugging of a multi-core platform
GB2489000B (en) * 2011-03-14 2019-09-11 Advanced Risc Mach Ltd Diagnosing code using single step execution
US8522213B2 (en) * 2011-05-12 2013-08-27 International Business Machines Corporation Debugger and debugging methods using breakpoints conditioned on the static identity of data

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5050168A (en) * 1989-12-29 1991-09-17 Paterson Timothy L Test coverage analyzer
CN1577291A (zh) * 2003-07-30 2005-02-09 松下电器产业株式会社 程序调试装置、程序调试方法及程序

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107577593A (zh) * 2011-03-14 2018-01-12 Arm 有限公司 使用执行单一步骤来诊断编码
CN107577593B (zh) * 2011-03-14 2021-07-06 Arm 有限公司 使用执行单一步骤来诊断编码

Also Published As

Publication number Publication date
GB2489000A (en) 2012-09-19
WO2012123706A1 (en) 2012-09-20
KR20140013005A (ko) 2014-02-04
IL227769A (en) 2015-03-31
EP2686772B1 (en) 2018-11-28
US8839038B2 (en) 2014-09-16
KR102025078B1 (ko) 2019-11-04
EP2686772A1 (en) 2014-01-22
CN103430158A (zh) 2013-12-04
JP2014508367A (ja) 2014-04-03
GB2489000B (en) 2019-09-11
IL227769A0 (en) 2013-09-30
GB201104254D0 (en) 2011-04-27
TWI544410B (zh) 2016-08-01
CN107577593A (zh) 2018-01-12
US20140344621A1 (en) 2014-11-20
TW201237749A (en) 2012-09-16
US9201749B2 (en) 2015-12-01
CN107577593B (zh) 2021-07-06
JP5905911B2 (ja) 2016-04-20
MY158480A (en) 2016-10-14
US20120239913A1 (en) 2012-09-20

Similar Documents

Publication Publication Date Title
CN103430158B (zh) 使用执行单一步骤来诊断编码
EP0031501B1 (en) Diagnostic and debugging arrangement for a data processing system
US6754856B2 (en) Memory access debug facility
US9342437B2 (en) Backward post-execution software debugger
US5134701A (en) Test apparatus performing runtime replacement of program instructions with breakpoint instructions for processor having multiple instruction fetch capabilities
CN106055385B (zh) 监控虚拟机进程的系统和方法、过滤page fault异常的方法
CN108469984B (zh) 一种基于虚拟机自省函数级虚拟机内核动态检测系统与方法
US5845064A (en) Method for testing and verification of a CPU using a reference model
US3806878A (en) Concurrent subsystem diagnostics and i/o controller
Carter et al. Design of serviceability features for the IBM system/360
JPH11110254A (ja) ソフトウェアをデバッグする際に例外を識別するための装置および方法
CN103052941A (zh) 非法模式改变的处置
US6598181B1 (en) Method and system for debugging multiple function calls
CN102866951B (zh) 嵌入式系统内存越界错误快速定位方法
CN106528414A (zh) 处理器芯片仿真器
CN100403275C (zh) 应用于固件程序除错的微处理器与方法
TW201723813A (zh) 用於診斷執行串流指令的處理器之方法、設備、及系統
Tsai et al. A replay mechanism for non-interference real-time software testing and debugging
JP2000222243A (ja) デバッグ装置及びデバッグ方法
WO2004097545A2 (en) A method of executing a computer program
JP2000122882A (ja) マルチスレッドプロセッサおよびデバッグ装置
Manduchi A mixed approach for the formal correctness proof of distributed programs
Shishir et al. Symbolic Simulation of Behavioral Requirements
JPS59114636A (ja) マイクロプログラム・セルフ・ル−プ化処理方式
JPH0581020A (ja) データ処理装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant