指示调用或返回的意图的控制转移指令的制作方法

文档序号:14213453阅读:190来源:国知局
指示调用或返回的意图的控制转移指令的制作方法

优先权的要求

本申请要求题为“controltransferinstructionsindicatingintenttocallorreturn”并且于2015年9月30日提交的美国非临时专利申请no.14/870,417的优先权提交权益。



背景技术:

1.领域

本公开与信息处理的领域有关,并且更特别地与信息处理系统中的执行控制转移的领域有关。

2.相关技术的描述

信息处理系统可以提供要使用指令(通常,控制转移指令或cti)来转移的执行控制。例如,跳转指令(jmp)可以被用来将控制转移到除了接下来的顺序指令之外的指令。类似地,调用指令(call)可以被用来将控制转移到过程或代码序列的入口点,其中所述过程或代码序列包括返回指令(ret)以将控制转移回到调用代码序列(或其他过程或代码序列)。与call的执行相关,可以将返回地址(例如,跟随调用过程中的call的指令的地址)存储在数据结构(例如,过程栈)中。与ret的执行相关,可以从数据结构取回返回地址。

在它们的指令集架构(isa)中具有cti的处理器可以包括用于通过预测cti的目标来改进性能的硬件。例如,处理器硬件可以通过相应的call基于存储在栈上的信息来预测ret的目标,具有在性能和节能上的可能的益处,其通常比与预测jmp的目标的相关联的在性能和节能上的可能的益处要大。

附图说明

通过示例来图示本发明并且本发明不限于附图。

图1图示了根据本发明的实施例的包括对指示调用或返回的意图的控制转移指令的支持的系统。

图2图示了根据本发明的实施例的包括对指示调用或返回的意图的控制转移指令的支持的处理器。

图3图示了根据本发明的实施例的用于使用指示调用或返回的意图的控制转移指令的方法。

图4图示了根据本发明的实施例的使用指示调用或返回的意图的控制转移指令的二进制转译的表示。

具体实施方式

描述了根据本发明的实施例的用于指示调用或返回的意图的控制转移指令的发明的实施例。在该描述中,可以记载多个具体细节,诸如部件和系统配置,以便提供对本发明的更透彻的理解。然而,本领域技术人员将会理解,在没有此类具体细节的情况下,也可以实施本发明。另外,尚未详细地示出一些公知的结构、电路和其他特征,以避免不必要地模糊本发明。

在以下的描述中,对“一个实施例”、“实施例”、“示例实施例”、“各种实施例”等的引用指示如此描述的本发明的(一个或多个)实施例可以包括特定特征、结构或特性,但是多于一个实施例可以包括特定特征、结构或特性并且不是每个实施例都必须包括特定特征、结构或特性。此外,一些实施例可以具有针对其他实施例描述的特征中的一些、全部或不具有针对其他实施例描述的特征。

如在该描述和权利要求书中使用的那样,并且除非另外指定,用于描述元素的序数形容词“第一”、“第二”、“第三”等的使用仅指示正在引用元素的特定实例或相同元素的不同实例,并且不旨在暗示如此描述的元素必须按照时间上、空间上、排序上或按照任何其他方式的特定顺序。

另外,如在本发明的实施例的描述中使用的那样,在术语之间的“/”字符可以意味着实施例可以包括第一术语和/或第二术语(和/或任何其他附加的术语)或者可以使用、用和/或根据第一术语和/或第二术语(和/或任何其他附加的术语)来实现实施例。

如在背景技术部分中描述的那样,在它们的isa中具有cti的处理器可以包括用于通过经过相应的call基于存储在栈上的信息预测ret的目标来改进性能的硬件。然而,如果二进制转译被用于转换使用call和ret的代码,则该硬件的使用可能是无效的,因为与在未转译代码中的call相关联的返回地址将不对应于在转译代码中要被使用的正确的返回地址。因此,call的转译通常包括将与call相关联的返回地址压入(使用push指令,如以下描述的那样)到栈上并且使用jmp来模拟call的控制转移,使得将原始call的返回地址压入到程序的栈上(所述栈应当保持与未转译的代码相关联的地址,因为其是程序可读的),而将控制转移生效到(effectto)转译的代码位置。类似地,ret的转译通常涉及从栈弹出(使用pop指令,如以下描述的那样)与未转译的代码中的call相关联的返回地址、使用其来确定对应于转译的代码的新返回地址并且然后使用具有新返回地址的jmp来模拟ret的控制转移。根据该方法,jmp、call和ret所有都被转译成jmp,而没有基于栈的硬件ret目标预测的可能的益处。因此,可以期望本发明的实施例的使用提供在已经通过二进制转译生成的代码中的基于栈的ret目标预测的可能的益处(例如,更高的性能和更低的功耗)。

图1图示了系统100,根据本发明的实施例的包括对指示调用或返回的意图的控制转移指令的支持的信息处理系统。系统100可以表示任何类型的信息处理系统,诸如服务器、台式计算机、便携式计算机、机顶盒、诸如平板计算机或智能电话之类的手持式设备或嵌入式控制系统。系统100包括处理器110、系统存储器120、图形处理器130、外围控制代理140和信息存储设备150。实现本发明的系统可以包括任何数量的这些部件和任何其他部件或其他元素中的每个,诸如外围设备和输入/输出设备。除非另外指定,否则可以通过任何数量的总线、点到点或其他有线或无线接口或连接将该系统实施例或任何系统实施例中的部件或其他元素中的任何或所有部件彼此连接、耦合或否则彼此通信。无论在图1中示出还是未在图1中示出,系统100的任何部件或其他部分都可以被集成或否则包括在单个芯片(片上系统或soc)、管芯、衬底或封装上或者中。

系统存储器120可以是动态随机存取存储器或任何其他类型的处理器110可读介质。系统存储器120可以被用来存储过程栈122。图形处理器130可以包括用于处理用于显示器132的图形数据的任何处理器或其他部件。外围控制代理140可以表示任何部件,诸如芯片组部件,包括外围设备、输入/输出(i/o)或其他部件或设备、诸如设备142(例如,触摸屏、键盘、麦克风、扬声器、其他音频设备、照相机、视频或其他媒体设备、网络适配器、运动或其他传感器、用于全球定位或其他信息的接收机等)和/或信息存储设备150或者外围设备、输入/输出(i/o)或其他部件或设备、诸如设备142(例如,触摸屏、键盘、麦克风、扬声器、其他音频设备、照相机、视频或其他媒体设备、网络适配器、运动或其他传感器、用于全球定位或其他信息的接收机等)和/或信息存储设备150可以通过所述外围控制代理140连接到或耦合到处理器110。信息存储设备150可以包括任何类型的持久的或非易失性的存储器或存储设备,诸如闪存和/或固态、磁或光盘驱动器。

处理器110可以表示集成在单个衬底上的或封装在单个封装内的一个或多个处理器或处理器核心,其中的每个可以包括以任何组合的多线程(thread)和/或多个执行核心。表示为处理器110的或者在处理器110中表示的每个处理器可以是任何类型的处理器,包括诸如处理器家族或来自公司或另一个公司的其他处理器家族中的处理器之类的通用微处理器、专用处理器或微控制器,或可以在其中实现本发明的实施例的信息处理系统中的任何其他设备或部件。

可以使用嵌入如以下描述的或根据任何其他方法布置的硬件、微代码、固件和/或其他结构中的电路和/或逻辑的任何组合在诸如处理器110之类的处理器中实现根据本发明的实施例的对指示调用或返回的意图的控制转移指令的支持,并且根据本发明的实施例的对指示调用或返回的意图的控制转移指令的支持在图1中被表示为jmp_intent单元112,所述jmp_intent单元112可以包括jci硬件/逻辑114以支持jmp_call_intent指令和jri硬件/逻辑116以支持jmp_return_intent指令,每个根据如以下描述的本发明的实施例。

图1还示出了二进制转译器(bt)160,其可以表示用于将一个isa的二进制代码转译成另一个isa的二进制代码、例如将除了处理器110的二进制代码之外的isa的二进制代码转译成处理器110的isa的任何硬件(例如,在处理器110内)、微代码(例如,在处理器110内)、固件或软件(例如,在系统存储器120和/或处理器110内的存储器内)。

图2图示了处理器200,其可以表示图1中的处理器110或者图1中的处理器110的多核心处理器实施例的执行核心的实施例。处理器200可以包括存储单元210、指令单元220、执行单元230和控制单元240。为了方便,将每个此类单元示出为单个单元;然而,可以根据任何方法将每个此类单元的电路组合在处理器200内和/或遍及处理器200分布。例如,可以将对应于处理器110的jmp/intent单元112的硬件/逻辑的各种部分物理地集成到存储单元210、指令单元220、执行单元230和/或控制单元240中,例如,如可以在以下描述的那样。处理器200还可以包括未在图1中示出的任何其他电路、结构或逻辑。

存储单元210可以包括处理器200中的可用于任何目的的任何类型的存储设备的任何组合;例如,其可以包括使用任何存储器或存储技术实现的任何数量的可读、可写和/或可读-可写寄存器、缓冲器和/或高速缓存,在其中存储能力信息、配置信息、控制信息、状态信息、性能信息、指令、数据和在处理器200的操作中可使用的任何其他信息,以及可使用来访问此类存储设备和/或可使用来引起或支持与对此类存储设备的访问相关联的各种操作和/或配置的电路。

在实施例中,存储单元210可以包括指令指针(ip)寄存器212、指令寄存器(ir)214和栈指针(sp)寄存器216。ip寄存器212、ir214和sp寄存器216中的每个可以表示一个或多个寄存器或一个或多个寄存器的部分或其他存储位置,但是为了方便可以被简单地称为寄存器。

ip寄存器212可以被用来保持ip或用于直接地或间接地指示当前正被调度、解码、执行或否则处理的;紧接在当前正被调度、解码、执行或否则处理的指令(“当前指令”)之后要被调度、解码、执行或否则处理的,或在指令的流中的指定的点(例如,在当前指令之后的指定数量的指令)处要被调度、解码、执行或否则处理的指令的地址或其他位置的其他信息。可以根据任何已知的指令排序技术,诸如通过ip的进步(advancement)或通过cti的使用,来加载ip寄存器212。

ir214可以被用来保持当前指令和/或在相对于当前指令的指令流中的指定点处的任何其他(一个或多个)指令。可以根据任何已知的指令取出(fetch)技术,诸如通过指令取出从由ip指定的系统存储器120中的位置来加载ir214。

sp寄存器216可以被用来存储指针或对过程栈的其他引用,用于控制转移的返回地址可以被存储在所述过程栈上。在实施例中,可以将栈实现为遵循“后入-先出”(lifo)访问范式(paradigm)的线性数组。栈可以在诸如系统存储器120之类的系统存储器中,如由图1的过程栈122表示的那样。在其他实施例中,可以在没有栈指针的情况下实现处理器,例如,在其中过程栈被存储在处理器的内部存储器中的实施例中。

指令单元220可以包括任何电路、逻辑、结构和/或其他硬件,诸如指令解码器,以取出、接收、解码、解释、调度和/或处理要被处理器200执行的指令。在本发明的范围内可以使用任何指令格式;例如,指令可以包括操作码(opcode)和一个或多个操作数(operand),其中可以将操作码解码为用于由执行单元230执行的一个或多个微指令或微操作。可以隐含地、直接地、间接地或根据任何其他方法将操作数或其他参数与指令相关联。

在实施例中,指令单元220可以包括指令取出器(fetcher)(if)220a和指令解码器(id)220b。if220a可以表示执行和/或控制从由ip指定的位置取出指令的和向ir214中加载指令的电路和/或其他硬件。id220b可以表示解码ir214中的指令的电路和/或其他硬件。可以设计if220a和id220b以执行指令取出和指令解码作为指令执行管线中的前端级(front-endstage)。管线的前端还可以包括jmp目标预测器220c,所述jmp目标预测器220c可以表示预测jmp指令(未基于存储在栈上的信息)的目标的硬件,并且可以包括ret目标预测器220d,所述ret目标预测器220d可以表示基于存储在栈上的信息来预测ret指令的目标的硬件。

还可以设计指令单元220以接收支持控制流转移的指令。例如,指令单元220可以包括jmp硬件/逻辑222、call硬件/逻辑224和ret硬件/逻辑226以分别地接收跳转、调用和返回指令,如以上在背景技术部分中描述的那样和/或如在本领域中已知的那样。

指令单元220还可以包括jci硬件/逻辑224a,所述jci硬件/逻辑224a可以对应于处理器110的jci硬件/逻辑114,并且可以包括jri硬件/逻辑226a,所述jri硬件/逻辑226a可以对应于处理器110的jri硬件/逻辑116,以根据如以下描述的本发明的实施例分别地接收jmp_call_intent和jmp_ret_intent指令。在各种实施例中,可以与转换call相关地由二进制转译器使用jmp_call_intent(代替jmp),并且可以与转换ret相关地由二进制转译器使用jump_ret_intent(代替jmp),如以下进一步描述的那样。在各种实施例中,jmp_call_intent和jmp_ret_intent指令可以具有不同的操作码或可以是用于诸如jmp之类的另一个指令的操作码的叶子,其中,可以由前缀或其他注释或与其他指令的操作码相关联的操作数指定叶子指令。

还可以设计指令单元220以接收访问栈的指令。在实施例中,栈向较小(lesser)存储地址生长。可以使用push指令将数据条目置于栈上并且使用pop指令从栈取回数据条目。为了将数据条目置于栈上,处理器200可以修改(例如,减少)栈指针的值并且然后将数据条目复制到由栈指针引用的存储器位置中。因此,栈指针总是引用栈的最上面的元素。为了从栈取回数据条目,处理器200可以读由栈指针引用的数据条目,并且然后修改(例如,增加)栈指针的值,使得其引用被置于栈上的紧接在正在被取回的元素之前的元素。

如以上介绍的那样,call的执行可以包括将返回地址压入到栈上。因此,在分支到被调用的过程中的入口点之前,处理器200可以将存储在ip寄存器中的地址压入到栈上。还被称为返回指令指针的该地址指向指令,其中调用过程的执行应当在从被调用的过程返回之后继续。当在被调用的过程中执行返回指令时,处理器200可以将返回指令指针从栈取回回到指令指针寄存器中,并且因此继续调用过程的执行。

然而,过程200可能不需要返回指令指针指回到调用过程。在执行返回指令之前,可以由软件(例如,通过执行push指令)操纵存储在栈中的返回指令指针以指向除了在调用过程中的调用指令之后的指令的地址之外的地址。处理器200可以允许返回指令指针的操纵支持灵活的编程模型。

执行单元230可以包括任何电路、逻辑、结构和/或其他硬件,诸如算术单元、逻辑单元、浮点单元、移位器等,以处理数据和执行指令、微指令和/或微操作。执行单元230可以表示任何一个或多个物理上或逻辑上不同的执行单元。

jmp_call_intent指令的执行可以包括将返回地址存储在返回地址缓冲器、影子栈(shadowstack)或硬件ret目标预测器(例如,ret目标预测器220d)中的或者由硬件ret目标预测器(例如,ret目标预测器220d)使用的其他数据结构中。在实施例中,要被存储的返回地址可以是紧随jmp_call_intent的指令的返回地址。在实施例中,jmp_call_intent指令的操作数可以指定要被存储的返回地址,因此提供了用于二进制转译器放置转译的ret目标的更多灵活性。

注意,jmp_call_intent和jmp之间的差异在于jmp不包括用于ret目标预测器的返回地址的存储。因此,由二进制转译器对jmp_call_intent(代替jmp)的使用可以提供ret目标预测的益处。jmp_call_intent和jmp之间的另一个差异在于jmp_call_intent可选地可以不尝试使用(并且因此不污染(pollute))硬件jmp目标预测器(例如,jmp目标预测器220c),所述硬件jmp目标预测器(例如,jmp目标预测器220c)可以被提供用于改进jmp指令的性能。还注意,jmp_call_intent和call之间的差异在于call将其返回地址存储在栈上,而jmp_call_intent不将其返回地址存储在栈上。

jmp_ret_intent指令的执行可以包括从返回地址缓冲器、影子栈或硬件ret目标预测器(例如,ret目标预测器220d)中的或者由硬件ret目标预测器(例如,ret目标预测器220d)使用的其他数据结构取回返回地址。注意,jmp_ret_intent和jmp之间的差异在于,jmp不包括从ret目标预测器的返回地址的取回。因此,由二进制转译器对jmp_ret_intent(代替jmp)的使用可以提供ret目标预测的益处。jmp_ret_intent和jmp之间的另一个差异在于,jmp_ret_intent不尝试使用(并且因此不污染)硬件jmp目标预测器(例如,jmp目标预测器220c),所述硬件jmp目标预测器(例如,jmp目标预测器220c)可以被提供用于改进jmp指令的性能。

控制单元240可以包括任何微代码、固件、电路、逻辑、结构和/或硬件以控制处理器200的单元和其他元件的操作和在处理器200中的数据的转移、到处理器200中的数据的转移和到处理器200外的数据的转移。控制单元240可以使得处理器200执行或参与本发明的方法实施例的执行,诸如以下描述的(一个或多个)方法实施例,例如,通过使用执行单元230和/或任何其他资源使得处理器200执行由指令单元220接收的指令和从由指令单元220接收的指令导出的微指令或微操作。由执行230对指令的执行可以基于存储单元210中的控制和/或配置信息而变化。

图3图示了根据本发明的实施例的用于使用指示调用或返回的意图的控制转移指令的方法300。虽然本发明的方法实施例不限于该方面,但是可以参考图1和2的元素来帮助描述图3的方法实施例。可以由硬件、固件、软件和/或系统或设备的用户来执行方法300的各种部分。

在方法300的框310中,二进制转译器(例如,bt160)可以开始对包括call和ret的二进制码序列的转译。在图4中的伪代码(pseudo-code)中图示了一个此类序列的转译。在框312中,可以将call转换成push和jmp_call_intent,其中push可以被用来将call的预期的返回地址存储到栈(例如,栈122)上,并且其中二进制转译器将call的目标地址转换成用于jmp_call_intent的转译的目标地址(转译的call目标地址)。在框314中,可以将ret转换成pop和jmp_ret_intent,其中pop可以被用来从栈取回call的预期的返回地址。

在框320中,由处理器(例如,处理器110)对转译的代码的执行可以开始。在框322中,push的执行可以将call的预期的返回地址存储在栈上。

在框324中,jmp_call_intent的执行可以包括将转译的返回地址存储在硬件ret目标预测器(例如,ret目标预测器220d)中。在实施例中,可以将紧随jmp_call_intent的地址用作转译的返回地址。在另一个实施例中,可以由jmp_call_intent的操作数提供或者从jmp_call_intent的操作数导出转译的返回地址,其中可能已经由二进制转译器基于原始二进制代码序列的其转换提供了所述操作数。在框326中,jmp_call_intent的执行可以包括将控制转移到转译的call目标地址。

在框330中,执行可以在转译的call目标地址处继续。在框332中,pop的执行可以从栈取回call的预期的返回地址。

在框334中,jmp_ret_intent的执行可以包括从硬件ret目标预测器(例如,ret目标预测器220d)取回转译的返回地址。在框336中,jmp_ret_intent的执行可以包括将控制转移到转译的返回地址。

在框340中,可以将如在框332中取回的call的预期的返回地址与转译的返回地址比较。如果存在匹配,那么在框342中,处理器继续执行以转译的返回地址开始的代码(返回目标代码)。如果否,那么方法300在框344中继续。

在框344中,可以根据多种方法中的任何方法来校正程序流。在实施例中,可以将控制转移到修复(fix-up)或其他代码以找到进入正确的目标代码中的入口点,例如,通过搜索包含原始代码地址和它们的相应的转译的代码地址的、由转译器维护的表或其他数据结构。可以用cti、异常(exception)等实现到修复或其他此类代码的控制的转移。实现控制的该转移还可以例如,通过冲刷(flush)处理器的指令执行管线在任何结果已经被交付(commit)之前停止不正确的返回目标代码的执行。

在本发明的各种实施例中,可以以不同的顺序、用组合的或省略的图示的框,用添加的附加的框,或者用重新排序的、组合的、省略的或附加的框的组合来执行在图3中图示的方法。

此外,本发明的方法实施例不限于方法300或方法300的变型。未在本文中描述的许多其他方法实施例(以及装置、系统和其他实施例)在本发明的范围内是可能的。

如以上描述的那样的本发明的实施例或实施例的部分可以存储在任何形式的无形的或有形的机器可读介质上。例如,可以以被存储在由处理器110可读的有形的介质上的软件或固件指令来实现方法300中的所有或部分,当所述软件或固件指令被处理器110执行时,使得处理器110执行本发明的实施例。另外,可以以存储在有形的或无形的机器可读介质上的数据来实现本发明的方面,其中数据表示可使用来制造处理器110中的所有或部分的设计或其他信息。

因此,已经描述了用于指示调用或返回的意图的控制转移指令的发明的实施例。虽然已经描述了并且在附图中示出了某些实施例,但应该理解,此类实施例仅是说明性的并且不限制广泛的发明,并且本发明不限于示出的和描述的具体构造和布置,因为在研究本公开时对于本领域普通技术人员而言,各种其他修改可以发生。在诸如该技术之类的技术的领域中,其中增长迅速并且不容易预见其他进步,在不脱离本公开的原理或附带的权利要求书的范围的情况下,如通过使能技术进步而促进的那样,公开的实施例在布置上和细节上可以是容易可修改的。

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