生成和处理指示处理电路的指令执行的跟踪流的装置和方法与流程

文档序号:14395230阅读:134来源:国知局

本技术涉及生成指示在数据处理系统中的处理电路活动的跟踪流的机制,并且尤其涉及生成和处理指示由该处理电路的指令执行的跟踪流的机制。



背景技术:

跟踪电路可用于产生包括一系列跟踪元件的跟踪流,使得可以随后分析那些跟踪元件从而决定相关处理电路的活动,例如,决定由处理电路执行的指令序列。为减少在跟踪流中的跟踪信息量,该跟踪电路可被布置为不产生针对每个被执行的指令的单独跟踪元件,而是仅产生针对被执行的某些预定指令的跟踪元件,例如生成针对每个被执行的分支指令的跟踪元件。根据关于预定指令的信息,分析电路可以随后尝试使用程序映像来重建关于被执行的指令序列的信息。

近期,已经提出一种新类型的指令,本文将其称为分支未来指令。分支未来指令可将任何任意指令有效改变为分支。

当使用上文描述的跟踪流方法尝试跟踪处理电路的执行行为(其中仅针对某些预定指令产生跟踪元件)时,这将导致显著问题。具体地,尽管跟踪机制可以被布置为针对每个分支指令生成跟踪元件,使用分支未来指令使得任意指令(跟踪机制不将其标识为分支指令)能够在指令流中发起分支,这可能破坏分析电路根据由跟踪电路产生的跟踪流来正确决定处理电路的指令执行行为的能力。

本发明技术意在当存在这种分支未来指令时来改善可靠的跟踪。



技术实现要素:

在一个示例配置中,提供一种设备,其包括:输入接口,用于从处理电路接收指示由处理电路执行的指令序列的指令执行信息,该序列包括指示在该序列内该分支未来指令之后跟随的标识指令的分支未来指令,该分支未来指令的执行使得当处理电路在该序列中遇到该标识指令时,使得处理电路分支到由分支未来指令标识的目标地址;跟踪生成电路,以根据指令执行信息生成跟踪流,该跟踪流包括指示在该序列中由预定指令的处理电路的执行的多个跟踪元件;以及分支控制缓存,用于存储从该分支未来指令导出的分支控制信息;跟踪生成电路,被布置为基于存储在分支控制缓存中的分支控制信息来检测处理电路遇到标识指令的时间,并且随后在该跟踪流中发布跟踪元件以指示已发生到目标地址的分支。

在另一示例配置中,提供了一种装置,包括:输入接口,用来接收包括多个跟踪元件的跟踪流,该跟踪元件指示由处理电路执行的指令序列中的预定指令的处理电路的执行,该序列包括指示在该序列中的分支未来指令之后跟随的标识指令的分支未来指令,该分支未来指令的执行使得当处理电路在该序列中遇到标识指令时,使得处理电路分支到由分支未来指令标识的目标地址;解压缩电路,响应于每个跟踪元件,从当前指令地址遍历程序映像,直到在该程序映像中检测到预定指令的下一个,并且从程序映像中产生指示在该当前指令地址与该预定指令的下一个地址之间的指令的信息;以及与该解压缩电路相关联的分支控制缓存;该解压缩电路响应于当遍历该程序映像时检测到分支未来指令,在分支控制缓存中存储从分支未来指令导出的分支控制信息;当参考分支控制信息检测到标识指令已经在程序映像的遍历期间到达时,该解压缩电路被布置为将该标识指令作为该预定指令的下一个处理。

在又一示例配置中,提供了一种生成指示由处理电路的指令执行的跟踪流的方法,包括:从处理电路接收指示由处理电路执行的指令序列的指令执行信息,该序列包括指示在该序列中该分支未来指令之后跟随的标识指令的分支未来指令,分支未来指令的执行使得当处理电路在该序列中遇到时该标识指令时,处理电路分支到由分支未来指令标识的目标地址;从指令执行信息生成包括多个跟踪元件的跟踪流,该多个跟踪元件指示在该序列中预定指令由处理电路的执行;在分支控制缓存中存储从该分支未来指令导出的分支控制信息;以及基于存储在分支控制缓存中的分支控制信息来检测处理电路已遇到标识指令的时间,并且随后在跟踪流中发布跟踪元件以指示已经发生到目标地址的分支。

在又一示例配置中,提供了一种装置,包括:输入接口装置,用于从处理电路接收指示由处理电路执行的指令序列的指令执行信息,该序列包括指示在该序列中该分支未来指令之后的标识指令的分支未来指令,该分支未来指令的执行使得当处理电路遇到在该序列中的标识指令时,使得处理电路分支到由分支未来指令标识的目标地址;跟踪生成装置,用于由指令执行信息生成包括多个跟踪元件的跟踪流,该跟踪元件指示在该序列中的预定指令由处理电路的执行;以及分支控制缓存装置,用于存储由该分支未来指令导出的分支控制信息;跟踪生成装置,用于基于存储在该支控制缓存装置中的分支控制信息来检测处理电路已遇到标识指令的时间,并且用于随后在跟踪流中发布跟踪元件以指示已经发生到目标地址的分支。

根据另一示例配置,提供一种处理被生成以指示由处理电路的指令执行的跟踪流的方法,其包括:接收包括多个跟踪元件的跟踪流,该跟踪元件指示在由处理电路执行的指令的序列中的预定指令由处理电路的执行,该序列包括指示在该序列中该分支未来指令之后的标识指令的分支未来指令,该分支未来指令的执行使得当处理电路遇到在该序列中的标识指令时,使得处理电路分支到由分支未来指令标识的目标地址;响应于每个跟踪元件,从当前指令地址遍历程序映像,直到在该程序映像中检测到预定指令的下一个,并且从程序映像中产生指示在该当前指令地址与该预定指令的下一个之间的指令的信息;响应于当遍历该程序映像时检测到分支未来指令,在分支控制缓存中存储从分支未来指令导出的分支控制信息;当参考分支控制信息检测到标识指令已经在程序映像的遍历期间到达时,将该标识指令视为该预定指令的下一个。

在又一示例配置中,提供了一种设备,其包括:输入接口装置,用于接收包括多个跟踪元件的跟踪流,该跟踪元件指示在由处理电路执行的指令的序列中的预定指令由处理电路的执行,该序列包括指示在该序列中的分支未来指令之后跟随的标识指令的分支未来指令,该分支未来指令的执行使得当处理电路遇到在该序列中的标识指令时,使得处理电路分支到由分支未来指令标识的目标地址;解压缩装置,响应于每个跟踪元件,从当前指令地址遍历程序映像,直到在该程序映像中检测到预定指令的下一个,并且从程序映像中产生指示在该当前指令地址与该预定指令的下一个之间的指令的信息;以及与该解压缩装置相关联的分支控制缓存装置;该解压缩装置响应于当遍历该程序映像时检测到分支未来指令,在分支控制缓存中存储从分支未来指令导出的分支控制信息;解压缩装置,当参考分支控制信息检测到标识指令已经在程序映像的遍历期间到达时,将该标识指令视为该预定指令的下一个。

附图说明

将参考在附图中图示的实施例仅通过示例的方式进一步描述本技术,其中:

图1是根据一个实施例的系统的框图;

图2是根据一个实施例所使用更详细说明之跟踪模块的框图;

图3是根据更详细示出的一个实施例的所使用的跟踪分析电路的框图;

图4a-4c示意地示出了根据一个实施例可用于图1的系统中的分支目标地址缓存(btac)的不同形式;

图5是示出的根据一个实施例的图2的跟踪模块的操作的流程图;

图6是示出的根据一个实施例的图3的解压缩器电路的操作的流程图;

图7示出了在不提供跟踪btac的情况下的替代实施例中的图2的跟踪模块的操作;以及

图8示出了在不提供跟踪btac的情况下的另一替代实施例中的图2的跟踪模块的操作。

具体实施方式

在数据处理系统中跟踪处理电路的活动,其中生成跟踪元件的流,该流可以随后被分析以标识处理电路的逐步活动在系统开发中是高度有用的工具。跟踪流可以例如被分析从而辅助由处理电路执行的指令序列的调试。通常,跟踪机制与处理电路一起被提供在芯片上,此芯片上跟踪机制的示例是由armlimited,cambridge,england(英国剑桥的arm公司)提供的与各种arm处理器相关联的嵌入式跟踪宏单元(embeddedtracemacrocell)(etm)。该跟踪机制可潜在地产生随后需要在芯片外提供以用于进一步分析的大量跟踪元件。已经发展许多技术以尝试减少产生的跟踪信息量,同时仍能够实现随后对处理电路的逐步活动的分析。

如先前提及,一种减少产生的跟踪信息的量的技术,仅涉及针对由处理电路执行的指令序列中的特定类型指令的输出跟踪元件,其中跟踪分析电路随后能够根据关于这些特定指令的执行重建处理电路的逐步指令执行行为。例如,每次分支指令被处理时,跟踪电路可以输出跟踪元件,该跟踪元件指示分支已经发生或还未发生,并且分析电路可随后推断在已对其产生跟踪元件的那些指令之间哪些指令已由处理电路执行。

已经提出一种新类型指令,本文将其称为分支未来指令。分支未来指令可用以标识在指令序列中的分支未来指令之后的指令,分支未来指令的执行使得当在指令序列中遇到标识指令时,处理电路随后分支到由分支未来指令标识的目标地址。因此,分支未来指令可以将任何任意指令有效地改变到分支。

如先前提及,当使用上文描述的跟踪流方法尝试跟踪处理电路的执行行为(其中仅针对某些预定指令产生跟踪元件)时,这将导致显著问题。所描述的实施例旨在减轻这些问题,允许继续采用上文提及的减少跟踪流的量方法,同时还容纳包括分支未来指令的指令序列。

在参考附图讨论实施例之前,提供了实施例的以下描述。

在一个实施例中,提供一种装置,其包括:输入接口,用于从处理电路接收指示由处理电路执行的指令序列的指令执行信息;以及跟踪生成电路,用于根据指令执行信息生成包括多个跟踪元件的跟踪流,该跟踪元件指示在该序列中的预定指令由该处理器的执行。该指令的序列包括分支未来指令,该分支未来指令指示在序列中分支未来指令之后的标识指令。由处理电路的分支未来指令的执行使得,当随后遇到序列中的标识指令时,处理电路分支到由分支未来指令标识的目标地址。因此,标识指令本身不在该执行的实例中,而是由到分支未来指令标识的目标地址的分支来替代它。

该装置包括分支控制缓存,其用于存储从分支未来指令导出的分支控制信息。此外,跟踪生成电路被布置为基于存储在分支控制缓存中的分支控制信息来检测处理电路已遇到标识指令的时间,并且随后在跟踪流中发布跟踪元件以指示已经发生到目标地址的分支。

因此,在上文所描述的实施例中,跟踪生成电路可使用在分支控制缓存中维持的分支控制信息,以检测分支未来指令的执行已导致标识指令被分支替代的时间,并随后在跟踪流中发布跟踪元件以指示已发生到目标地址的分支。通过在跟踪流中结合跟踪元件,除当由处理电路执行序列中预定指令(例如标准分支指令)时跟踪生成电路插入的跟踪元件之外,这使得跟踪分析电路随后根据在跟踪流中的跟踪元件,来决定由处理电路执行的指令流。

其中分支控制信息由跟踪生成电路使用的分支控制缓存可以是与处理电路相关联的分支控制缓存,在该事件中处理电路可包括处理电路何时在其分支控制缓存中检测到命中的指示,作为指令执行信息的一部分。然而,在一个实施例中,由跟踪生成电路使用的分支控制缓存实际上是与跟踪生成电路相关联的分支控制缓存,在一个实施例中该分支控制缓存可以被单独提供到为处理电路本身提供的任何分支控制缓存。在此实施例中,跟踪生成电路可以被布置为取决于从处理电路接收的指令执行信息将分支控制信息存储在其相关联的分支控制缓存中。因此,在此实施例中,跟踪生成电路具有其自身分支控制缓存,其中,维持适当的分支控制信息以使得其能够检测处理电路遇到标识指令的时间并且用以随后发布适当的跟踪元件。

跟踪生成电路填充其相关联的分支控制缓存的方式可以根据实施例而变化。然而,在一个实施例中,当指令执行信息指示分支未来指令已经被处理电路执行时,跟踪生成电路被布置为在分支控制缓存中存储由分支未来指令标识并用以决定该标识指令的分支点数据。分支点数据可以采用各种形式,但足够使得能以决定标识指令,并且因此使得跟踪生成电路能够检测处理电路遇到该标识指令的时间。

在一个实施例中,分支点数据可包括下列一个或多个:地址数据,指示该标识指令的地址;结束数据,指示紧接在该标识指令之前的最后指令的地址;偏移数据,指示在该分支未来指令与该标识指令之间的距离;位的适当子集,指示从该存储器存储地址的位的最低有效位末端开始的所述标识指令的存储器存储地址,该位的适当子集区分指令的起始存储地址;剩余大小指令数据,指示在该标识指令之前待处理的剩余指令的数量;以及剩余大小数据,指示在该标识指令到达之前待处理的剩余程序存储位置的数量。应当了解,这些各种选项提供了用于决定标识指令什么时候在指令序列中到达的机制。如先前提及,当处理电路到达其将要执行标识指令的点时,由于分支未来指令的较早执行,实际上该处理电路不执行该标识指令,而是在该点处使用到由分支未来指令标识的目标地址的分支。

在一个实施例中,跟踪生成电路参考存储在其相关联的分支控制缓存中的分支点数据,从而根据接收到的指令执行信息来检测处理电路已遇到标识指令的时间,并且一旦检测到,随后在跟踪流中发布指示已经发生到目标地址的分支的跟踪元件。

无论跟踪生成电路是否将以上提及的分支点数据存储在其相关联的分支控制缓存中,在一个实施例中,当指令执行信息指示分支未来指令已由处理电路执行时,跟踪生成电路被布置为在分支控制缓存中存储目标指示符,该目标指示符指示目标地址是否直接从分支未来指令中指定的立即值中可导出。

当决定需要将哪些信息提供在与指示已发生到目标地址的分支的跟踪元件相关联的跟踪流中时,此目标指示符信息可由跟踪生成电路使用。具体地,如果目标指示符指示目标地址直接从在分支未来指令中指定的立即值中导出,则不需要提供关于目标地址的任何额外信息,由于通常跟踪分析电路将被提供有正由处理电路执行的程序的程序映像,并因此可导出目标地址。然而,在一个实施例中,当目标指示符指示目标地址不可直接从立即值导出时,跟踪生成电路被布置为与指示到目标地址的分支已经发生的跟踪元件相关联在跟踪流中发布从处理电路接收的指令执行信息中导出的目标地址的指示。具体地,基于针对处理电路提供的指令执行信息,跟踪生成电路可以决定目标地址并随后在跟踪流中输出目标地址的指示,使得跟踪分析电路随后能够在分析跟踪流时决定目标地址。

在一些情况中,跟踪生成电路可被布置为跟踪处理电路的全部活动。然而,在替代实施例中,跟踪生成电路的操作可被选择性地激活,使得实际上仅跟踪一部分由处理电路执行的指令。例如,跟踪可针对在特定存储器地址范围中执行的指令而启动。在此布置中,跟踪生成电路将随后针对在实际上落入正在被跟踪的地址范围的序列中的那些预定指令而产生跟踪元件,并且此外,追踪生成电路将在其从分支控制缓存中检测到由执行的分支未来指令标识的标识指令已由处理电路遇到(并且在正在跟踪的地址范围中)的情况下,添加额外跟踪元件。然而,在一个实施例中,仅当相关分支未来指令位于在正在被跟踪的该部分指令序列(例如,地址范围)中时,跟踪生成电路被布置为将分支控制信息存储在分支控制缓存中。因此,如果分支未来指令在跟踪活动的指令范围外,则分支控制缓存将不填充有关于那个分支未来指令的条目。

如先前提及,可将与跟踪生成电路相关联的分支控制缓存独立地提供给处理电路分支控制缓存,以使得当分支未来指令的执行之后处理电路遇到标识指令时,处理电路能够分支到由分支未来指令标识的目标地址,该处理电路分支控制缓存用于维持由处理电路使用的分支控制信息。

在一个实施例中,如果处理电路分支控制缓存仅具有单个条目,并且因此将仅存储从单个分支未来指令导出的分支控制信息,则可简化与跟踪生成电路相关联的分支控制缓存的内容。具体地,在这些实施例中,与跟踪生成电路相关联的分支控制缓存可能仅需要存储指示目标地址是否能够直接从在单个分支未来指令中指定的立即值导出的目标指示符,但不需要存储用于决定标识指令的分支点数据。事实上,如果处理电路在其处理电路分支控制缓存中检测到命中,并经通过转发到跟踪生成电路的指令执行信息通知跟踪生成电路这一事实,则跟踪生成电路将得知该命中是由于已填充其分支控制缓存条目的相同分支未来指令,并因此可仅直接使用目标指示符以决定哪些信息(如果存在)需要伴随有跟踪元件,该跟踪元件将随后被发布以指示已发生到目标地址的分支。此方法可因此降低与跟踪生成电路相关联的分支控制缓存的大小需求。

如先前提及,在一些实施例中,跟踪生成电路可不跟踪由处理电路执行的整个指令序列,而是可被设置为仅产生针对正在被执行的指令序列的一个或多个部分的跟踪信息。在该情况中,分支未来指令可能落到所跟踪部分外,并且因此可能不使得在与跟踪生成电路相关联的分支控制缓存中填充条目。在该实施例中,之后,跟踪生成电路可能接收指示因为在处理电路的分支控制缓存中遇到具有相关联分支控制信息的标识指令所以处理电路已分支到目标地址的指令执行信息,但与跟踪生成电路相关联的分支控制缓存可能不具有相同条目。在该情况中,在一个实施例中,跟踪生成电路被布置为发布跟踪元件来标识标识指令和在遇到标识指令时已采用的分支两者。

因为必须在跟踪元件中提供充分信息以清楚地标识该标识指令并且充分标识在遇到标识指令时已采用的分支,因此与在跟踪生成电路的相关联分支控制缓存中检测命中时发布的上文提及的跟踪元件相比,这种特殊形式的跟踪元件需要捕获更多信息。因此,在一个实施例中,彼跟踪元件将需要标识标识指令的地址以及目标地址。尽管这在踪带宽方面是昂贵的,但应了解,该特殊形式的跟踪元件仅在处理电路的分支控制缓存中已存在命中,但在跟踪生成电路的分支控制缓存中未检测到同等命中的特定实例中才需要。在一个实施例中,预先存在类型的跟踪元件格式可用于该特定跟踪元件,即已用于提供关于在指令执行期间发生的异常的信息的跟踪元件格式。

在一个实施例中,跟踪生成电路可被布置为在发生预定跟踪控制事件时在其相关联的分支控制缓存中使分支控制信息失效。预定跟踪控制事件可采用各种形式。例如,其可以是同步事件或“跟踪进行”事件,该事件可用于指示退出用于从正在跟踪者过滤出一些活动的过滤状态。这种事件可表示在跟踪活动中的间断性。

在一些实施例中,可能不需要与跟踪生成电路相关联地提供分支控制缓存。而是,仅使用与处理电路相关联的分支控制缓存就足以为跟踪生成电路提供充足信息使其能够发布跟踪元件,以指示发生了到由分支未来指令标识的目标地址的分支。

具体地,在一个该实施例中,从处理电路提供到跟踪生成电路的指令执行信息,包括当分支未来指令已由处理电路执行时的指示、当分支由处理电路已由处理电路处置的指示、以及关于该分支的处置是否由于在处理电路的分支控制缓存中维持的分支控制信息而不是由于分支指令的执行的指示。当具备该信息时,跟踪生成电路可以随后决定将基于在指令执行信息中这些指示而生成跟踪元件,并且具体地还可决定必须发布跟踪元件以指示已发生到由分支未来指令标识的目标地址的分支的情况。

具体地,当指令执行信息指示已执行分支未来指令并且发生的下一分支是由于该分支控制信息,该跟踪生成电路可以被布置为生成该跟踪元件来指示已发生到目标地址的分支。

此外,在一个实施例中,当指令执行信息指示分支已由于分支指令的执行而被处置并且这不在分支未来指令的执行之后时,跟踪生成电路被布置为发布跟踪元件,该跟踪元件的类型指示该分支是否被处理电路采用。

可以出现的另一情况是,指令执行信息可以指示已由于分支指令的执行而处置该分支,但这是在分支未来指令的执行之后。这可以(例如)发生在如果处理电路的分支控制缓存在已执行分支未来指令之后,但在指令序列中遇到标识指令之前的时间点处使得其内容的一些或全部无效的情况出现时。在该情况中,在一个实施例中,跟踪生成电路被布置为生成指示尚未发生到目标地址的分支的第一跟踪元件,以及其类型指示由于该分支指令的执行所处置的分支是否由处理电路采用的第二跟踪元件。因此,在此情况中,跟踪生成电路仍输出表示在指令序列中已遇到标识指令的第一跟踪元件,但在此情况中指示尚未发生到目标地址的分支。随后是第二跟踪元件,用于表示该分支指令的执行,并且尤其用于指示是否采用该分支,采用/未采用状态是根据处理电路提供的指令执行信息来决定的。

此方法确保一个实施例的跟踪分析器电路的正确操作。具体地,如后文将讨论,在一个实施例中,跟踪分析器电路还被提供有其自己的本地分支控制缓存,当程序映像内遇到分支未来指令时填充该本地分支高速缓存。因此,通过继续生成与到目标地址的分支相关联的跟踪元件,但标识不发生该分支的跟踪元件,这确保跟踪分析器正确地响应于其在跟踪流中接收到的一系列跟踪元件。

可以出现的又一示例情景,是当指令执行信息指示分支由于分支控制信息而发生,但跟踪生成电路不具有充分信息以得知先前的分支未来指令是否由处理电路已执行。这可以(例如)发生在当仅正在跟踪处理电路活动的子集并且分支未来指令在该子集外时。在该情况中,在一个实施例中,跟踪生成电路被布置为发布跟踪元件,来标识该标识指令和在遇到该标识指令时已采用的分支两者。该跟踪元件可采用与先前提及的特殊跟踪元件相同的形式,并且因此可以使用预先存在的异常类型格式的跟踪元件,从而捕获所有所需信息,在一个实施例中,该信息包括标识指令地址的地址和目标地址。

在分支控制缓存与处理电路相关联并用于维持由处理电路使用的分支控制信息以当在执行分支未来指令之后该标识指令被处理电路遇到时使得处理电路分支到由分支未来指令标识的目标地址的又一实施例中,跟踪生成电路可被布置为具有当指令执行信息指示分支未来指令已由处理电路执行时设置的存储元件。此外,当指令执行信息指示由于在分支控制缓存中遇到具有相关联分支控制信息的标识,指令处理电路已分支到目标地址,并且存储元件被设置时,该跟踪生成电路随后被布置为在跟踪流中发布跟踪元件以指示已发生了到目标地址的分支并且还被布置为清除该存储元件。

因此,在该实施例中,该跟踪生成电路不维持分支控制缓存自身,但具有如上该的被设置或清除的简单存储元件。当由于在处理电路的分支控制缓存中的命中使得该处理电路分支时,这使得该跟踪生成电路可靠地发布跟踪元件。

在一个实施例中,当指令执行信息指示由于在分支控制缓存中遇到具有相关联的分支控制信息的标识指令使得处理电路已分支至目标地址并且不设置存储元件时,跟踪生成电路被布置为发布跟踪元件来标识该标识指令和在遇到该标识指令时已采用的分支两者。此跟踪元件可采用与先前提及的特殊跟踪元件相同的形式,并且因此可使用预先存在的异常样式格式的跟踪元件,从而捕获全部所需信息。

在一个实施例中,当指令执行信息指示分支已由于分支指令的执行而得以处置时,跟踪生成电路被布置为发布其类型指示处理电路是否采用分支的跟踪元件,并还被布置为清除存储元件。因此,当跟踪生成电路被通知已发生正常分支(即,不是由于分支未来指令的较早执行)时,清除存储元件。

在又一实施例中,可提供一种用于执行跟踪分析功能的设备。具体地,此装置可包括输入接口,用以接收包括多个跟踪元件的跟踪流,该跟踪元件指示在由处理电路执行的指令序列中由预定指令的处理电路的执行。该序列可包括先前提及的分支未来指令中一个或多个。该装置还包括解压缩电路,其响应于各个跟踪元件以从当前指令地址遍历程序映像直到在程序映像中检测到预定指令的下一个。随后,解压缩电路从指示在当前指令地址与已检测到的该下一预定指令之间的指令的程序映像信息而产生。该设备还具有与解压缩电路相关联的分支控制缓存,并且该解压缩电路响应于当遍历程序映像时检测到分支未来指令以在分支控制缓存中存储从分支未来指令导出的分支控制信息。此外,当参考分支控制信息检测到在遍历程序映像期间已到达标识指令时,解压缩电路被布置为将该标识指令视为预定指令的下一个。

因此,考虑到其中预定指令是分支指令的示例,随后尽管标识指令本身可能不是分支指令,通过使用与解压缩电路相关联的分支控制缓存,该解压缩电路可检测到在程序映像中遇到该标识指令的时间,并且在该点可以将标识指令视为如同它是分支指令。因此这允许跟踪流的生成,其仅产生将由跟踪分析电路正确分析的用于由处理电路执行的某些指令的跟踪元件,甚至当正在执行的指令序列包括分支未来指令时,并因此可以潜在地将任何任意指令转为分支。

存储在与解压缩电路相关联的分支控制缓存中的信息可采用各种形式。在一个实施例中,该解压缩电路被布置为将由分支未来指令标识的并用以决定标识指令的分支点数据存储为分支控制信息。此外,在一个实施例中,当该目标地址是直接从在分支未来指令中指定的立即值导出时,该解压缩电路被布置为将目标地址存储为分支控制信息。因此,如果该目标地址是直接从立即值中导出,则该解压缩电路可从程序映像中决定目标地址,并且因此捕获在其本地分支控制缓存中的目标地址。这使得能够直接决定当遇到标识指令时在程序映像中的什么地方分支。如果相反地,目标地址不可直接标识,则应从先前讨论中了解到,该跟踪流将包括直接标识目标地址的信息,并因此解压缩电路可能从具有跟踪流的信息中决定目标地址。

现将参考附图描述特定实施例。

图1示意地说明根据一个实施例的系统,提供了监控电路10、跟踪模块20、跟踪缓冲器30和跟踪分析器40。尽管图1说明了提供跟踪缓冲器30的系统,但在替代实施例中,跟踪模块20可将它的输出直接传递到跟踪分析器40,而不经过跟踪缓冲器。跟踪模块20被布置为产生包括一系列跟踪元件的跟踪流,该跟踪流随后使得跟踪分析器能够重建监控电路10的活动。监控电路10可采用各种形式,但在一个实施例中包括至少一个处理元件,例如被布置为执行指令序列的处理器核心。该监控电路将指示指令正在监控电路上被执行的指令执行信息输出到跟踪模块20。

在一个实施例中体现在芯片上并且可以例如采用由armlimited,cambridge,unitedkingdom生产的etm电路的形式的跟踪模块,被布置为产生提供一系列跟踪元件的跟踪流,其中该等跟踪元件指示在指令序列中预定指令的执行。因此,不是产生表示由监控电路执行的各个指令的跟踪元件,而是在跟踪流中的跟踪元件仅指示某些预定指令的执行,其中跟踪分析器被提供有充分知识(例如,通过程序映像)以使其能够重建关于已在提供跟踪元件的各个这种预定指令之间执行的指令的信息。例如,在一个实施例中,跟踪模块可以被布置为针对在序列中执行的每个分支指令生成跟踪元件,该跟踪元件提供关于分支是否被采用的信息,并且跟踪分析器40被提供具有程序映像以使其能够基于关于分支指令的处理的信息确定已经被执行的指令的真实序列。这使得生成显著减少的量的跟踪元件。这是非常有用的,因为跟踪分析器40典型地体现在片外,并且因此跟踪流需要经由芯片的引脚被路由到分析器。

由监控电路执行的指令序列可以包括分支未来指令。分支未来指令能够标识在分支未来指令之后的任何任意指令,并且当随后遇到该标识指令时,这可以导致监控电路不执行该标识指令,而是采用到由分支未来指令标识的目标地址的分支。为支持此行为,在一个实施例中,监控电路可具有相关联的分支目标地址缓存(btac),其具有一个或多个条目。当执行分支未来指令时,条目被分配在btac中,并且该条目将由分支未来指令指示的标识指令的地址记录为源地址,还记录标识当遇到该标识指令时处理电路应分支到的地址的目标地址。在一个实施例中,在执行分支未来指令并以上述方式中填充btac之后,当处理电路随后(例如)由于检测到已更新或将要更新其程序计数器为响应于在btac条目中的一个中保持的源地址的值而在其btac条目中的一个中检测到命中时,随后并不在该地址执行标识指令,而是使得指令流分支到在btac的该条目中还捕获的目标地址。

通过此方法,可以看到分支未来指令可以被用于将任何任意指令有效地转为分支。该标识指令的形式无关紧要,因为当以上述方式由分支未来指令标识时,该处理电路实际上不执行该标识指令,而是进行由分支未来指令标识的分支。如果需要,分支未来指令可以有条件地执行。因此,当满足用于执行分支未来指令的条件时,以上讨论的处理将会发生,并且当随后遇到标识指令时,监控电路将执行到目标地址的分支而非执行标识指令。相反地,如果在将执行分支未来指令时不满足该条件,则将不执行分支未来指令,并且在适当过程中该标识指令将以其正常方式执行以执行由该标识指令指定的功能。

尽管该分支未来指令的使用将为可由监控电路进行的操作添加显著灵活性,但当跟踪模块被布置为产生先前提及类型的跟踪流时,其导致跟踪模块20的显著问题,其中跟踪元件仅针对在由监控电路正在执行的序列中的特定预定指令而产生。具体地,如果跟踪模块被设置为产生用于执行的各个分支指令的跟踪元件,其将通常不产生用于已由分支未来指令标记为导致分支的标识指令的跟踪元件,因为该标识指令可以本身不是分支指令。如果跟踪流未正确地标记已发生此分支,应了解跟踪分析器将不能正确推断由监控电路执行的指令序列。

可能布置跟踪生成电路以跟踪由于到达标识指令发生的任何该分支,该标识指令是以与跟踪关于发生异常的时间的信息相同的方式而由在监控电路的btac中的条目标记。然而,因为必须跟踪标识指令的地址及分支的目标地址两者,所以就跟踪频宽而言它是昂贵的,并且因此这可以显著地损害跟踪流格式的有效性。

如本文将进一步讨论,提供了一种使跟踪生成电路能够有效跟踪由于遇到标识指令而发生在监控电路中的分支的机制,由于先前的分支未来指令的执行,该标识指令匹配在监控电路的btac中的条目。

图2是说明一个实施例的跟踪模块20的框图。如图所示,跟踪模块20经耦接至处理元件50,在一个实施例中处理元件50形成监控电路10的至少一部分。处理元件50具有相关联的btac55,其维持基于各个分支未来指令的执行而填充的分支控制信息。btac55具有一个或多个条目,并且每次处理元件50执行分支未来指令时,在btac55中条目中的一个被填充有某些分支控制信息。具体地,在一个实施例中,如图4a所示,在btac55中各个条目可包括源地址字段155(在其中捕获由分支未来指令指示的标识指令的地址)和目标地址字段160(在其中存储由分支未来指令标识的目标地址)。尽管,在一个实施例中,字段155存储标识指令的地址,更一般地,字段155存储可采用先前讨论的任何形式的分支点数据,但足够使得处理元件能够检测其在指令流中遇到标识指令的时间。无论何时在btac55条目中的一个中检测到命中,指示在指令流中已遇到标识指令,不执行该标识指令,而是处理元件分支到在相关联的目标地址字段160中的目标地址。

由于处理元件50执行该指令序列,其将指令执行信息传递到跟踪模块20的输入接口65,从此处将其转发到跟踪生成电路60。跟踪生成电路60可选地具有相关联的跟踪btac75,其中,其存储从通过输入接口65接收的指令执行信息导出的某些分支控制信息。在一个实施例中,跟踪btac75采用图4b所示的形式,并且包括一个或更多条目,其中各个条目具有用于将由(已由处理元件执行的)分支未来指令指示的标识指令的地址(或如先前讨论的任何其他等效分支点数据)存储为源地址的字段165。此外,针对各个此条目提供了另一字段170,其标识目标地址是否可直接从分支未来指令决定,例如通过在分支未来指令中作为立即值提供。如果相反,分支未来指令标识其内容用于导出目标地址的暂存器,则认为目标地址是间接目标地址,并且在字段170中标记该目标地址不为直接,即为间接。在跟踪btac中不必实际捕获目标地址本身。

在一个实施例中,在跟踪btac75中产生条目,而不考虑是否已满足与执行分支未来指令相关联的任何条件代码。

跟踪模块20可以被布置为在发生一个或多个预定跟踪控制事件时使其跟踪btac75内容失效。这些跟踪控制事件可采用各种形式,但可以例如为同步事件或退出预定跟踪过滤操作并且因此在跟踪时提供间断性的“跟踪进行”事件。因此这确保在跟踪btac75中不维持过期信息。

如下文将讨论的,在一些实施例中,跟踪btac可以无需具有字段165,并且替代地仅需要在字段170中捕获目标地址的直接/间接性质。此外,如将参考图7和图8的实施例所讨论的,在一些情况中,跟踪模块20可无需独立地维持跟踪btac75,并且替代地,处理元件50提供的指示其与其本地btac55交互的信息可以足够使得跟踪生成电路60生成所需的跟踪元件。在下文参考图8所讨论的实施例中,跟踪模块维持小存储元件78,其内容以图8所讨论的方式被设置和清除。

在一个实施例中,跟踪生成电路60被布置为无论什么时候在指令序列中执行分支指令都在其跟踪流中输出跟踪元件,该跟踪元件还指示是否采用分支,这可从通过输入接口65从处理元件50接收的指令执行信息而导出。然后,跟踪元件的流通过输出接口70被转发用于向前传播到跟踪缓冲器30和/或跟踪分析器40。本文各个跟踪元件还可称为“原子”。

此外,跟踪生成电路被布置为基于存储在其本地跟踪btac75中的分支控制信息(或在一些实施例中,基于由处理元件50转发的指示在处理电路的本地btac55中已发生的命中的btac命中信息),来检测由执行的分支未来指令标识的指令被处理元件50遇到的时间。在该情况中,跟踪生成电路还在跟踪流中发布跟踪元件以指示已发生到目标地址的分支。如果目标地址可直接从分支未来指令推导,则目标地址本身不需要在跟踪流中被标识,由于跟踪分析器40将随后能够决定目标地址。然而,如果目标地址不是可直接推导的,则跟踪生成电路60将根据该处理元件50所提供的信息来决定目标地址,并且将在跟踪流中输出目标地址,使得该目标地址可随后由跟踪分析器40使用。

图3是示意性说明一个实施例的跟踪分析器40的图。跟踪分析器40于其输入接口105处接收跟踪流(一系列原子),随后从该处将该信息转发至解压缩器电路100。解压缩器电路100访问提供由监控电路执行的程序代码副本的程序映像110。解压缩器电路100保持跟踪程序映像中的当前地址(该当前地址在预定点处(诸如当跟踪开始时)被设置为预定初始值),并且每次接收新原子时,其遍历程序映像直到到达程序映像中的特定类型的下一指令,例如在以上示例中的分支指令,其中在跟踪流中各个跟踪元件指示分支指令的执行。解压缩器电路从程序映像提取关于在当前地址和该下一预定指令的地址之间执行的各个指令的信息,并且将所有执行信息输出到分析电路120用于分析。一旦在程序映像中已遇到下一预定指令,随后基于该遇到的分支的目标地址更新当前地址,使得当在跟踪流中接收到下一原子时,可以从新的当前地址,再次开始相同的程序映像遍历过程。

如先前提及,除标准分支指令之外,跟踪流还将包括当跟踪模块20已检测到由于监控电路已遇到由分支未来指令指示的标识指令而发生到目标地址的分支时插入的跟踪元件。为了使解压缩器电路100能够在这些情况中执行适当遍历程序映像,该解压缩器电路还具有相关联的本地btac,在图3中称为解压缩器btac115。当解压缩器电路100遍历程序映像110时,由于并且当其遇到分支未来指令时,其随后在解压缩器btac115中存储从彼分支未来指令导出的分支控制信息。在一个实施例中,解压缩器btac采用图4c所示的形式,并且包括一个或多个条目,其中,各个条目具有用于将由分支未来指令标识的指令的地址(或如先前讨论的任何其他等效分支点数据)存储为源地址的字段175,并且还具有用于当该目标地址可直接从分支未来指令决定时存储目标地址的字段180。具体地,在该事件中,解压缩器电路100将能够从程序映像的内容直接决定目标地址,并且因此在字段180中捕获彼目标地址。如果目标地址不是可直接决定的,字段180留作空白,并且替代地该解压缩器电路随后将根据跟踪流中提供的信息来决定目标地址。

在以上述方式填充解压缩器btac115之后,由于其遍历程序映像,解压缩器电路100随后能够参考解压缩器btac115。无论什么时候从在程序映像中被考虑的当前指令的地址中检测到存在解压缩器btac115的条目中的一个中源地址信息的命中,则决定该当前考虑的指令为已由分支未来指令标识的标识指令,并且因此将该标识指令作为下一预定指令处理而非等到它到达下一分支指令。在该点处解压缩器电路100可以为分析电路120提供关于在当前遍历程序映像期间所遍历的全部指令的信息,并且还可以在该点将当前地址更新为目标地址。针对直接目标地址,将为在解压缩器btac115中相关联的条目的字段180中指示的目标地址,而针对间接目标地址,将在与当前考虑的原子相关联的跟踪流中直接提供该目标地址信息。

以与先前针对跟踪模块20的btac75的讨论的相同方式,跟踪分析器40可被布置为根据一个或多个预定跟踪控制事件的发生而使得它的解压缩器btac115内容失效,因而确保在解压缩器btac115中不维持过期信息。

图5是根据一个实施例可由图2的跟踪模块20执行的过程的流程图。在步骤200处,等待关于由监控电路正在执行的当前指令的信息,并且一旦接收该信息,其通过输入接口65路由到跟踪生成电路60,其中在步骤205处跟踪生成电路决定是否将跟踪该当前指令。尽管在一些实施例中,可以判定将跟踪整个指令序列,但在其他实施例中跟踪机制可取决于当前正在执行的指令而选择性地接开启和关闭。这使得能够跟踪代码的特定部分,而不跟踪其他部分。在此实施例中,跟踪流将仅关于将被跟踪的代码的这些部分而产生,并且使用先前描述的机制,实际跟踪元件/原子将随后仅关于在这些部分中执行的某些指令,使得跟踪分析器电路可随后重建关于在这些部分中的其他指令的信息。

如果在步骤205处决定不跟踪当前指令,则该过程仅返回步骤200以等待关于由监控电路执行的下一指令的信息。

当在步骤205处决定跟踪当前指令时,则在步骤210处跟踪生成电路决定当前指令的地址是否命中在跟踪btac75中的条目。如果命中,则这指示当前指令为已由先前执行的分支未来指令标识的标识指令,并且因此应该将其作为分支来处理。因此,在步骤215处,该当前指令作为分支指令被处理并在跟踪流中发布原子。

在一个实施例中,跟踪生成电路被布置为发布跟踪原子的预定指令被称为“p0指令”,并且在一个实施例中p0指令的示例为分支指令。其他类型的指令也可能被认为是p0指令,并且将因此导致在跟踪流中发布相应原子。尽管由于在跟踪btac75中的命中,由分支未来指令标识的指令本身将无需是p0指令,但其仍视为p0指令那样被处理并因此在步骤215处在跟踪流中发布针对p0指令的适当原子。如果在跟踪btac75中相关条目的直接/间接目标地址字段170指示该目标地址可由分支未来指令直接决定,则不需要在跟踪流中输出目标地址信息。此外,不需要输出源地址信息,由于该点处当前指令仅被作为p0指令被处理,并且全部所需要的仅为简单原子以标识已执行p0指令。在一个实施例中,该原子被称为“e”原子。因此,这提供了非常有效的编码以标识已发生分支。

如果跟踪btac的相关条目的字段170指示目标地址为间接目标地址,则跟踪生成电路将根据处理元件50提供的指令执行信息来决定目标地址,并且该目标地址的指示将遵循在跟踪流中的e原子,使得彼目标地址随后可用于跟踪分析器40。在步骤215之后,该过程随后返回步骤200以等待由处理元件50执行的下一指令的信息。

如果在步骤210处,决定当前指令的地址未命中跟踪btac75中的条目,则决定当前指令是否为标准p0指令(例如,标准分支指令)。如果为标准p0指令,则在步骤225处在指令流中发布用于该p0指令的标准原子。就分支指令而言,指令执行信息将标识当执行该分支指令时是否采用分支,并且此信息可以表示在步骤225发布的原子中。具体地,如果采用分支则发布先前提及的“e”原子,而如果不采用分支则发布“n”原子。因此,原子本身的存在标识了已遇到p0指令,并且原子之e/n种类标识了是否采用了分支。应当了解,参考先前步骤215,由于先前分支未来指令的执行将导致处理电路分支到目标地址,并因此在步骤215处所生成的原子将通常为e原子,当在跟踪btac中检测到命中,并因此当前指令作为p0指令被处理时,已知采用分支。

以与先前参考步骤215所讨论的相同方式,如果目标地址为从分支指令可直接导出,则在步骤225处不需要发布任何目标地址信息。然而,如果其不可直接导出,则跟踪生成电路决定目标地址,并且将在与e/n原子相关联的跟踪流中输出该目标地址的指示。该过程随后返回步骤200。

如果在步骤220处决定当前指令不为标准p0指令,则在步骤230处决定当前指令是否已导致处理元件由于在处理元件的btac55中的命中而改变其程序计数器。这可以(例如)由于跟踪过滤操作而发生,其中仅处理元件的指令子集被跟踪。如果相关的先前分支未来指令位于所跟踪的该指令的子集之外,则将不在跟踪btac75中捕获关于该分支未来指令的信息并且因此将遵循步骤210的“否”路径。如果在步骤230处决定已经由于在处理元件的btac55中的命中而发生处理元件中的分支,则随后该过程进行到步骤235,在该处使用捕获关于当前指令和目标地址的全部所需信息的特殊类型原子,来在跟踪流中跟踪当前指令。具体地,该原子将标识当前指令的地址和将分支到的目标地址。在一个实施例中,处理元件50中用于捕获关于在指令执行期间发生的异常的信息的预先存在类型原子可用于此目的。应当理解,就跟踪频宽而言,当与在步骤215和225发布的原子相比,在步骤235发布的原子和相关信息系昂贵的,但将仅需要在跟踪btac已无法捕获关于相关的分支未来指令的信息的情况下发布。在步骤235之后,该过程随后返回步骤200。

如果在步骤230处,决定当前指令不导致处理元件由于在处理元件的btac55中的命中而改变其程序计数器,则在步骤240处决定当前指令是否预加载处理元件btac55,即,当前指令是否为先前提及的分支未来指令之一。如果是,则在步骤245处分配在跟踪btac75中的条目,并且使用从自处理元件转发的指令执行信息导出的信息来填充源地址字段165和直接/间接字段170。该过程随后返回步骤200。

尽管在一个实施例中,跟踪btac75采用图4b所示的形式,并且因此在步骤245处源地址和直接/间接目标地址信息两者都在字段165、170中被捕获,在一个实施例中,可能移除源地址字段165,并且仅直接/间接目标地址字段170使用跟踪btac来维持。具体地,如果处理元件btac55仅有单个条目,并且因此仅可存储关于单个分支未来指令的信息,如果从处理元件50转发的指令执行信息指示在其本地btac55中已存在命中,则跟踪生成电路60能够推断在其跟踪btac75中维持的条目是用于该相同分支未来指令,并因此可直接使用直接/间接目标地址信息170而无需进行任何源地址检查。

图6是说明根据一个实施例的由图3的解压缩器电路100执行的过程的流程图。在步骤300处,决定在输入接口105处是否在跟踪流中已接收到原子。一旦已接收原子,则在步骤305处,解压缩器电路100开始从当前地址遍历程序映像110。在跟踪起始点,或在在跟踪活动中的同步点,当前地址可被设置为指定值。其后,当前地址将基于由解压缩器电路执行的程序遍历操作而更新,如以下图6的进一步讨论而显然的。

在步骤310处,当前指令的细节被输出到分析电路120,并且在步骤315处参考程序映像来决定当前指令(即,由当前地址指向的指令)是否为预加载处理元件的btac55的指令,即,是否为先前提及的分支未来指令之一。如果是,则该过程进行到步骤320,此处解压缩器电路100在其解压缩器btac115中分配条目并且在该条目中将由分支未来指令标识的指令地址存储为源地址。此外,如果目标地址可从当前指令(即,分支未来指令)直接计算,则解压缩器电路100在该条目中存储目标地址。该过程随后进行到步骤335,其中程序映像中的下一指令被设置为当前指令(通过推进该地址以指向程序映像中的下一指令),并且该过程返回步骤310。

如果在步骤315处决定当前指令不是分支未来指令,则在步骤325决定当前指令的地址是否匹配存储在解压缩器btac115中的源地址。如果是,则这指示当前指令是已由先前执行的分支未来指令标识的标识指令,并且因此应该作为(与p0指令的相同方式的)使得程序映像遍历过程能够停止的指令来处理。因此,该过程进行到步骤340,此处由解压缩器电路维持的当前地址被更新到目标地址。这将在目标地址为直接目标地址的事件中,可从解压缩器btac条目中直接获得,或如果目标地址为间接目标地址,则将从跟踪流中提供的信息中可获得。在步骤345处,该过程停止遍历程序映像,并且该过程返回步骤300以等待下一原子。

如果在步骤325处决定当前指令的地址不匹配在解压缩器btac中保持的源地址,则在步骤330处决定在程序映像中的当前指令是否为标准p0指(例如,分支指令)。如果是,则该过程再次进行到步骤340,否则该过程继续到步骤335。

通过此方法,可以看到随着各个原子被接收,程序映像被遍历,其中各个原子与标准p0指令相关联或与由分支未来指令标识的指令相关联。由于用于参考图6描述的方式填充的解压缩器btac115的使用,解压缩器电路100可以正确解释跟踪流,并且尤其是准确决定什么时候响应于各个原子停止遍历程序映像,因此使得正确跟踪在指令流中的分支,而不考虑它们是由于分支指令还是由分支未来指令任意转化为分支的其他指令。

图7是根据替代实施例说明图2的跟踪模块20的操作的流程图,该替代实施例中跟踪btac75是非必需的。

在步骤400处,跟踪生成电路累积从处理元件传递到它的指令执行信息,直到该信息包括分支已由处理元件处置的指示。在一个实施例中,由于各个指令由处理元件执行,处理元件可提供指令执行信息。然而,在路标点接口被维持在处理元件50与跟踪模块20之间(路标地址被维持在处理元件50与跟踪模块20之间,意味着将下一分支的地址提供给前一分支的目标地址的指令的执行)的替代实施例中,由于分支已经被处置,则该处理元件本身可缓冲所需指令执行信息直到该点,并且随后在一批次中将所有该指令执行信息提供到跟踪模块20。

在步骤405处,决定从处理元件提供的信息是否指示在该分支之前已执行分支未来指令。如果是,则在步骤410处决定来自处理元件的信息是否还指示发生的分支是由于在处理元件的btac55中的命中,即,是否由于处理元件遇到由所执行的分支未来指令标识的指令。如果是,则该过程进行到步骤415,其中,在跟踪流中发布e原子以表示到目标地址的btac命中分支。如果目标地址可以直接从分支未来指令决定,则除e原子之外无需额外的信息,但是如果目标地址是间接的,则跟踪生成电路60还从处理元件50提供的指令执行信息决定目标地址,并且在跟踪流中与e原子相关联地转发该目标地址。其后,在步骤445处,清除由跟踪模块20当前保持的指令执行信息,并且该过程返回步骤400。

如果在步骤410处决定分支不是由于在处理元件btac中的命中,尽管在步骤405决定,由处理元件提供的信息指示了在分支之前执行分支未来指令,则该过程进行到步骤420。在该点,跟踪生成电路60发布用于基于btac的分支的n原子,以标记不发生基于btac的分支,并且随后额外发布原子以标识随后发生的正常分支。如先前讨论,该原子将是e原子还是n原子,是取决于由处理元件50提供的指令执行信息所决定的采用/不采用该分支指令的行为。在步骤420之后,该处理随后进行到步骤445。

如果在步骤405处决定来自处理元件的信息不指示在分支之前执行了分支未来指令,则该过程进行到步骤425,其中,决定是否实际上从指令执行信息得知是否执行了分支未来指令。如果从该信息得知未执行分支未来指令,则该过程进行到步骤430,其中针对已发生的正常分支发布原子,至于原子是e原子还是n原子取决于在指令执行信息中的采用/不采用信息。

然而,在仅经历由处理元件执行的指令序列的某些部分用于跟踪的实施例中,跟踪模块可能不确切地得知是否已执行分支未来指令。在该事件中,遵循来自步骤425的“是”路径,其中,随后在步骤435决定由处理元件提供的信息是否指示分支无论如何是由于处理元件btac55中的btac命中。如果是,则该过程进行到步骤440,其中发布包括关于已发生的分支事件的全部所需信息的先前提及的“异常样式”原子。具体地,该原子将包括导致分支发生的指令的地址,并且还包括分支到的目标。

如果来自处理元件的信息指示分支不是由于btac命中,即,是由于正常分支,则该过程从步骤435进行到步骤430。在步骤430或440之后,该过程随后进行到步骤445。

在如参图7所讨论的该实施例中,将因此应了解可能操作该系统而无需与跟踪生成电路相关联的跟踪btac75。事实上,跟踪生成电路使用从处理元件50提到它的、指示在处理元件btac55中已发生的btac命中的信息而操作,并且相应地生成跟踪元件。应当注意当采用图7的方法时,跟踪分析器40仍将包括解压缩器btac115,并且解压缩器电路100仍将以参考图6讨论的方式操作。

图8是根据又一替代实施例说明跟踪模块20的操作的流程图。在该实施例中,跟踪模块20不具有先前描述的跟踪btac75,但具有维持以图8描述的方式被设置并清除的字段的简单存储元件78(其在一个实施例中,可以是单个位元)。图8的步骤500和505对应于先前描述的图5的步骤200和205,并且步骤510和515对应于图5的步骤220和225。由于在此实施例中,跟踪模块不具有其自身的btac75,图5的步骤210和215不在图8中重复,并且替代地来自505的“是”路径直接进行到步骤510。如果该过程进行到步骤515以使得针对当前指令发布原子,则在步骤520处清除在跟踪模块中的存储元件78,随后过程返回步骤500。

如果在步骤510决定当前指令不为标准p0指令,则该过程进行到步骤525,其响应于图5的步骤230。如果在步骤525,决定当前指令导致处理元件50由于在其本地btac55中的命中而改变其程序计数器,则在步骤530决定是否设置在跟踪模块中的存储元件78。如果是,则在步骤535将当前指令作为p0指令来处理并且因此在跟踪流中发布原子,步骤535基本对应于图5的步骤215。其后,在步骤540,清除在跟踪模块中的存储元件,随后过程返回步骤500。

如果在步骤530处,决定不设置存储元件78,则该过程进行到步骤545,其对应于图5的步骤235,导致发布“异常样式”原子,随后过程返回步骤500。

如果在步骤525处,决定当前指令不导致处理元件由于在btac55中的命中而改变其程序计数器,则在步骤550决定当前指令是否为分支未来指令,并且因此导致处理元件50在处理元件的btac55中分配条目。如果是,则在步骤555处,设置在存储元件78中的位,随后该过程返回步骤500,而如果遵循来自步骤550的“否”路径,则该过程仅直接返回步骤500。

在一个实施例中,存储元件78仅维持先前讨论的单个位,该位以图8讨论的方式被设置和清除。在该事件中,从处理元件50转发到跟踪模块20的指令执行信息可被布置为指示当处理电路遇到标识指令时发生的分支的目标地址是否可直接从分支未来指令中指定的立即值导出。以与先前参考图5的步骤215所讨论的相同的方式,如果当在步骤535发布e原子时,决定目标地址不可直接导出,则跟踪生成电路将根据处理元件50提供的指令执行信息来决定目标地址,并且该目标地址的指示将遵循在跟踪流中的e原子,使得该目标地址随后可用于跟踪分析器40。

在替代实施例中,在步骤555,存储元件以与先前针对跟踪btac75的字段170所描述的相同的方式可选地维持直接/间接指示,并且当确定目标地址是直接还是间接、以及因此是否需要在跟踪流中输出目标地址的指示时,跟踪模块20可以参考该信息。

根据本文描述的实施例,应当理解,未来分支指令的执行使得分支行为能够与标识指令相关联,使得处理电路当在序列中遇到标识指令时分支到由分支未来指令标识的目标地址。所描述的跟踪机制使得能够跟踪这样的分支行为活动,使得跟踪分析器能够正确地确定由处理电路执行的指令流。

在上述实施例中描述的分支未来指令能够标识稍后将在指令序列中遇到的任何任意指令,作为将导致到目标地址的分支发生的指令。然而,可以被视为可以采用上述技术的分支未来指令的另一种形式的指令是在程序循环体的结束处的循环结束指令,其中该循环结束指令将程序循环体内的紧接在前的指令标识为标识指令,目标地址是程序循环体开始处的指令地址。尽管在这种情况下,标识指令将首先出现在循环结束指令之前,但是由于程序循环的性质,随着循环的进一步迭代的执行,在指令序列中还将遇到若干更多次。因此,跟踪生成单元可以被安排为发布跟踪元件,该跟踪元件指示每当指令执行信息随后指示分支由于当时遇到该紧接在前的指令而发生时,分支被触发,其中用于紧接在前的指令的分支控制信息被储存在处理元件的分支控制缓存中。

可以使用这种循环结束指令来实现所谓的“零开销循环”,其中循环结束指令(其可以被称为零开销循环结束(zole)指令)不需要在循环的每次迭代期间被执行,而是在第一次迭代之后,当遇到程序循环体中的倒数第二条指令时,可以触发进一步迭代所需的分支。通过使得跟踪生成单元以上述方式生成跟踪元件,这使得分析电路能够正确地跟踪处理电路的这种零开销循环的执行。

本文所描述的实施例实现了非常有效的跟踪机制,其中,仅针对实际上由监控电路执行的(通常非常小的)指令的子集而产生跟踪元件,但该跟踪元件可以实际上跟踪监控电路的活动,甚至当监控电路执行包括一个或多个分支未来指令的指令序列时,这可以将任何任意指令有效转化为分支。

在本申请案中,词语“经配置以…”用于意指装置元件具有能够进行所定义的操作的配置。在该上下文中,“配置”意指硬件或软件的互连的布置或方式。例如,装置可以具有提供所定义的操作的专用硬件,处理器或其他处理装置可以被编程为执行该功能。“经配置以”不意指该装置元件需要以任何方式改变以提供所定义的操作。

虽然已经参照附图详细描述了本发明的说明性实施例,但是应该理解,本发明不限于这些精确的实施例,并且在不背离由所附权利要求限定的本发明的范围和精神的情况下,可以由本领域技术人员在其中进行各种改变、添加和修改。例如,从属权利要求的特征的各种组合可以与独立权利要求的特征一起被实施,而不背离本发明的范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1