CN102222017A - 通过不可见接口实现不符合abi特征的方法和系统 - Google Patents
通过不可见接口实现不符合abi特征的方法和系统 Download PDFInfo
- Publication number
- CN102222017A CN102222017A CN2011101263833A CN201110126383A CN102222017A CN 102222017 A CN102222017 A CN 102222017A CN 2011101263833 A CN2011101263833 A CN 2011101263833A CN 201110126383 A CN201110126383 A CN 201110126383A CN 102222017 A CN102222017 A CN 102222017A
- Authority
- CN
- China
- Prior art keywords
- routine
- entrance
- interface
- name
- called
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/447—Target code generation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/54—Link editing before load time
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
- Stored Programmes (AREA)
- Communication Control (AREA)
- Exchange Systems With Centralized Control (AREA)
Abstract
公开了多种通过不可见接口实现不符合ABI特征的方法和系统,用于编译一代码模块以允许调用例程将参数传递到单独编译的代码模块的被调用例程,并且允许被调用例程通过多个接口从单独编译的代码模块的调用例程接收参数。接口可以包括规范接口和备选接口。调用例程可以被配置为通过备选接口传递参数,并且调用被调用例程的备选入口点。相关联的存根例程可以被配置为通过规范接口传递参数并调用被调用例程的规范入口点。如果被调用例程包括相对应的备选入口点,则调用例程可以被链接到备选入口点。否则,被调用例程可以通过存根例程被链接到被调用例程。
Description
背景技术
在计算机程序中,第一编译模块的调用例程可以通过接口向单独编译的第二编译模块的被调用例程传递一个或更多个参数的组,并且编译模块可以随后被链接以在计算机系统中执行。
接口可以符合公认规范或标准,诸如应用程序二进制接口(ABI)。ABI可以描述计算机程序之间的底层接口,并且可以处理调用规范细节,例如数据类型、大小、对齐,以控制函数变量或者参数的传递与返回。在WindowsIA-32和Linux调用规范下,例如,函数参数在调用堆栈上被传递。
底层软件编写者或编译器可以构建不遵循规范的接口,或修改现有接口以使得接口不再遵循规范。在32位Windows或Linux环境中,例如,接口可以被修改为通过寄存器传递参数以避免与调用堆栈相关联的存储器加载/存储操作。
传统上,当修改器(编程器或编译器)能够访问被调用例程和被调用例程的所有调用例程时,接口可以被构造或修改为与规范相反。在不是所有的调用例程都可用时,可用的调用例程的接口可以被修改,假设被调用例程被配置为适应所修改的接口和规范接口二者,其可以由其他调用例程使用。换句话说,被调用例程和至少一个调用例程被修改。
附图说明
图1是包括第一和第二代码模块和相对应的第一和第二编译模块的计算环境的图形描述。
图2是包括调用例程和存根例程的编译模块的图形描述。
图3是包括被调用例程的编译模块的图形描述。
图4是编译一代码模块的方法的流程图,该代码模块可以包括调用例程和/或被调用例程。
图5是编译一代码模块以通过多个接口中的一个接口从调用例程向另一个编译模块的被调用例程传递参数组的方法流程图。
图6是编译一代码模块以向被调用例程提供多个入口点以通过多个相对应的接口中的一个接口接收参数组的方法的流程图。
图7是将第一编译模块的调用例程链接到第二编译模块的被调用例程的方法的流程图。
图8是包括图2和图3中的编译模块的计算机系统的图形描述,其中调用例程的调用被链接到被调用例程的备选入口点。
图9是包括图2的编译模块和图1的编译模块的另一个计算机程序的图形描述,其中调用例程的调用被链接到存根例程,并且存根例程的调用被链接到被调用例程的入口点。
图10是包括调用例程用以通过单个接口传递来自多个相对应的位置的多个参数的编译模块的图形描述。
图11是包括调用例程用以通过多个接口中的一个接口来选择性传递参数组的另一个编译模块的图形描述。
图12是被配置为编译一代码模块并链接一编译模块的计算机系统的框图。
附图中,最左边附图标记标识了其中第一次出现该附图标记的图。
具体实施方式
本文公开了方法和系统,其配置具有多个接口的调用例程以将参数组传递到单独编译的被调用例程,并且基于被调用例程的配置通过多个接口中的一个或更多个接口而链接一编译调用例程和一编译被调用例程。多个接口可以包括规范接口(interface by convention)和备选接口(alternate interface)。本文还公开了方法和系统,其配置具有多个入口点的被调用例程以通过多个对应接口中的一个接口从另一个编译模块接收参数组。
图1是分别包括第一和第二代码模块102和104的计算环境100的图形描述。代码模块102和104可以包括源级代码和/或中间级代码。
代码模块102包括调用例程106,该调用例程106具有对代码模块104的被调用例程110的调用108。
调用108可以包括名字112以及在运行时要被传递给被调用例程110的一个或更多个参数(例如,PARM1和PARM2)的组114的指示或标识。
被调用例程110可以包括函数代码111,用以执行与参数组相关的一个或更多个函数。
环境100可以包括编译器116,用以将一代码模块102和104编译为相对应的第一和第二编译模块118和120。可替代地,代码模块102和104之一可以由另一个编译器编译。编译模块118和120可以包括机器可读代码。
编译模块118包括与调用例程106相对应的调用例程122。调用例程122包括与调用例程106的调用108相对应的调用126。
编译模块120包括与被调用例程110相对应的被调用例程124,该被调用例程124具有用名字112标识的入口点125。被调用例程124还包括与函数代码111相对应的函数代码128。
当代码模块102和104被彼此单独编译时,调用例程122和被调用例程124可以被配置为根据规范和/或标准而传递参数组114,这可以包括但不限于在调用堆栈上传递参数。
在图1的例子中,调用例程122包括接口代码130,用以通过调用堆栈传递参数组114,并且被调用例程124包括接口代码132,用以在进入一入口点125后通过调用堆栈接收参数组114。调用堆栈和任何格式化要求可以被称为接口。
编译器116包括规范接口构造器142,用以根据规范构造接口代码130,以及规范入口点构造器144,用以根据规范构造入口点125和相对应的接口代码132。
可替代地,当编译模块118或者编译模块120由另一个编译器生成,相对应的接口代码可以由其他的编译器生成。
环境100可以包括链接系统136,用以链接编译模块118和120,以允许计算机系统将编译模块118和120作为集成计算机程序137来执行。图1包括从调用126到被调用例程124的入口点125的链接138。
在一些情况下,可以希望通过不符合规范的备选接口传递参数。例如,在图1中,被调用例程124的接口代码132被配置为将参数组114从调用堆栈分别加载到寄存器R1和R2。函数代码128可以被配置为访问寄存器R1和R2中的参数。在这种情况下,可以希望配置调用例程122和被调用例程124以通过寄存器R1和R2传递参数组114。
编译器116可以包括备选入口点构造器145,用以构造被调用例程中的备选入口点,例如下文参照图3所描述的。
编译器116还可以包括备选接口构造器146,用以构造被调用例程中的备选接口和相对应的对备选入口点的备选调用,例如下文参照图2所描述的。
编译器116可以被配置为针对调用例程构造一规范接口和一备选接口,其可以允许调用例程调用一适当修改的被调用例程或者一无修改的被调用例程。
类似的,编译器116可以被配置为针对被调用例程构造规范入口点、相对应的规范接口和备选入口点,其可以允许由适当修改的调用例程和无修改的调用例程来调用一被调用例程。
链接系统136可以被配置为,例如下文参照图8所描述的,当调用例程和被调用例程都被适当配置时,通过备选接口将调用例程选择性链接到被调用例程,否则例如下文参照图9所描述的,通过规范接口将调用例程选择性链接到被调用例程。
在上面例子中,备选接口、备选调用和备选入口点都被描述为由编译器116构造。可替代地,备选接口和相对应的备选调用、或者备选入口点可以在编译后被构造,例如响应于用户输入用机器代码编辑器进行。
图2是包括调用例程202和存根例程(stub routine)204的编译模块200的图形描述。
编译模块200可以通过编译器116从图1中的代码模块102生成。可替代地,在图1中的编译模块118由另一个编译器生成的情况下,图2中的编译模块200可以从编译模块118构造或者修改,例如响应于用户输入由机器代码编辑器进行。
调用例程202包括对名字208的调用206,在这里被说明为Bar_bair_2。调用例程202还包括相对应的接口代码210,用以通过第一接口传递参数组114(例如PARM1和PARM2),所述第一接口在这里被说明为寄存器R1和R2。第一接口可以对应于备选接口,而调用206可以被称为备选调用。
名字208可以根据图1中的调用例程106的名字112来生成。名字208还可以根据第一接口的名字和参数组114中参数的数目来生成。例如,“bair”可以表示“寄存器中的盲变量(blind arguments in registers)”,“2”可以表示参数组114中的参数的数目。名字208可以被称为备选名字。
存根例程204包括对名字112的调用126,以及相对应的接口代码218,用以通过第二接口(例如调用堆栈)传递来自第一接口(例如R1和R2)的参数组114。接口代码218可以对应于规范接口。
存根例程204可以与调用例程202相关联以允许链接系统136来将调用例程202链接到存根例程204。例如,存根例程204的入口点212可以被命名为备选名字208的“弱”版本,在这里说明为weak.Bar_bair_2。
图3是包括被调用例程302的编译模块300的图形描述。
编译模块300可以由编译器116从图1的代码模块104生成。可替代地,在图1中的编译模块120由另一编译器生成的情况下,编译模块300可以从编译模块120构造或者修改,例如响应于用户输入由机器代码编辑器进行。
被调用例程302包括入口点125,并且相对应的接口代码132通过调用堆栈接收参数组114,例如上文参照图1中的被调用例程124所描述的。入口点125可以对应于规范入口点,并且接口代码132可以对应于规范接口。
被调用例程302可以包括备选入口点304,这里说明为在接口代码132和函数代码128之间。
接口代码132可以被配置为将参数组114从调用堆栈移动到寄存器R1和R2,以及函数代码126可以被配置为访问在寄存器R1和R2处的参数组114,例如上文参照图1中的被调用例程124所描述的。
在这种情况下,备选入口点304不需要对应的接口代码。在其他情况下,入口点304可以包括接口代码,用以重定位和/或格式化参数组114。
下面将参照图4-7以及参照本文一个或更多个其它例子而公开示例方法。然而,图4-7的例子并不限于这些其他例子。
图4是编译一代码模块的方法400的流程图,该代码模块可以包括调用例程和/或被调用例程。
在402,接收代码模块。在图1中,编译器116可以接收代码模块102和/或代码模块104。
在404,评估代码模块中的调用例程,例如图1中的调用例程106。在调用例程调用未出现在代码模块中的名字的情况下,处理进行到406,在406根据下文描述的图5来编译调用例程。可以针对一个或更多个另外的调用例程而重复在404的评估和在406的编译。
在408,评估代码模块中的被调用例程。在可以从代码模块外部调用该被调用例程的情况下,处理进行到410,在410根据下文描述的图6来编译被调用例程。可以针对一个或更多个另外的被调用例程而重复在408的评估和在410的编译。
在412,代码模块的其他代码例如可以根据传统编译技术被编译。
上面参照图4公开的特征和/或其部分可以用彼此相对的各种序列中的一种或更多种序列来执行,彼此并行地执行,和/或以综合方式来执行。
图5是编译一代码模块以通过多个接口中的一个接口从调用例程向另一编译模块的被调用例程传递参数组的方法500的流程图。
在502,调用例程在代码模块中被识别为具有对未在代码模块中出现的名字的调用。
在504,生成备选点名字。备选点名字可以根据调用名字、第一接口的指示、和通过第一接口传递的参数的数目来生成。
在506,生成备选名字的弱版本,例如上文参照图2中的入口点212所描述的。
在508,调用例程被编译以调用备选名字并且通过第一接口传递参数组,例如上文参照图2中的调用例程202所描述的。
在510,第一代码模块被编译以包括存根例程,用以调用所述名字并且通过第二接口传递来自第一接口的参数组。存根例程或者存根例程的入口点用备选名字的弱版本被标识,例如上文参照图2中的存根例程204所描述的。
图6是编译一代码模块以向被调用例程提供多个入口点以通过多个对应接口中的一个接口接收参数组的方法600的流程图。
在602,被调用例程在代码模块中被标识为可从代码模块外部被调用。
在604,生成备选入口点名字。备选入口点名字可以根据被调用例程的名字、备选接口的指示和通过备选接口传递的参数的数目来生成。
在606,被调用例程被编译为包括第一入口点,用于通过规范接口接收参数组,和备选入口点,用于通过备选接口接收参数组。可以用被调用例程的名字标识第一入口点,并且可以用备选入口点名字标识备选入口点,例如上文参照图3中的被调用例程302所描述的。
图7是将第一编译模块的调用例程链接到第二编译模块的被调用例程的方法700的流程图。
在702,例如在图1的链接系统136处,接收第一和第二编译模块。第一编译模块可以对应于图2中的编译模块200。第二编译模块可以对应于图1的编译模块120或者图3的编译模块300。
在704,识别根据方法600配置的第一编译模块的调用例程和相关联的存根例程。调用例程和相关联的存根例程可以对应于图2中的调用例程202和存根例程200。
在706,识别第二编译模块的被调用例程,该被调用例程具有与存根例程的调用相对应的第一入口点。被调用例程可以对应于图1中的被调用例程124或者图3中的被调用例程302。
在708,评估被调用例程。在被调用例程包括如上面参照图6中的606所描述的备选入口点的情况下,处理进行到710。在被调用例程不包括这种备选入口点的情况下,处理进行到712。
在710,调用例程链接到被调用例程的备选入口点。图8是计算机程序800的图形描述,计算机程序800包括图2的编译模块200和图3的编译模块300,其中调用206用链接802被链接到被调用例程302的备选入口点304。
在712,调用例程被链接到存根例程,且存根例程被链接到被调用例程的第一入口点。图9是计算机程序900的图形描述,包括图2的编译模块200和图1的编译模块120,其中调用206用链接902被链接到存根例程204,并且存根例程204的调用126用链接904被链接到被调用例程124的入口点125。
在上面的例子中,两个参数(PARM1和PARM2)通过寄存器R1和R2或者通过调用堆栈来传递。然而,此处公开的方法和系统并不局限于寄存器或者调用堆栈。
备选接口可以被配置为执行任务和/或逻辑操作。下面公开了示例任务和逻辑操作。然而,备选接口并不局限于下述例子。
备选接口可以被构造为组合来自多个位置的多个参数,并且通过单个位置传递组合参数,例如如下面参照图10所描述的。
备选接口可以被构造为通过多个可选择的接口中的一个接口传递参数组,例如如下面参照图11所描述的。
备选接口可以被构造为通过第一接口传递第一参数组以及通过第二接口传递第二参数组。
图10是编译模块1000的图形描述,包括调用例程1002和存根例程1004。调用例程1002可以包括备选调用1006和相对应的备选接口代码1008,用以通过单个备选接口(这里被说明为寄存器R1)传递来自多个位置的多个参数。备选接口代码1006可以被配置为在加载到寄存器之前组合或者操纵参数。存根例程1004可以配置为按规范传递多个参数,例如上面一个或更多个例子所描述的。
图11是编译模块1100的图形描述,包括调用例程1102和存根例程1104。调用例程1102包括多个备选调用1106和1108,被指向被调用例程的相应多个备选入口点。备选调用1106包括备选接口代码1110,用以通过第一备选接口(此处说明为寄存器R1和R2)传递参数组。备选调用1108包括备选接口代码1112,用以组合参数组并且通过第二备选接口(此处被说明为寄存器R1)传递组合参数组。
调用例程1102还包括状态确定逻辑(contingency logic)1114和1116,用以基于状态(contingency)“A”来选择性调用备选调用1106或者备选调用1108。状态可以涉及一个或更多个参数的值和/或一个或更多个条件。
存根例程1104可以配置为当被调用例程不包括备选入口点时根据规范传递参数组。
本文公开的一个或更多个特征可以用硬件、软件、固件以及其结合实现,包括分立或者集成电路逻辑、专用集成电路(ASIC)逻辑和微控制器,并且可以被实现为特定领域集成电路封装的部分、或者集成电路封装的结合。如本文所使用的术语软件、代码和指令是指计算机程序产品,其包括其中存储有计算机程序逻辑的计算机可读介质,以使得计算机系统执行本文公开的一个或更多个特征和/或特征的结合。
图12是示例性计算机系统1200的框图,包括一个或更多个计算机指令处理单元(如这里所说明的处理器1202)以执行计算机程序产品逻辑。
计算机系统1200包括一个或更多个存储器、高速缓存、寄存器和存储设备(下文称为“存储器”)1204。
存储器1204包括计算机可读介质,其上存储有计算机程序产品逻辑1206以使得处理器1202响应于其而执行一个或更多个功能。
存储器1204还包括由处理器1202在执行逻辑1206中使用的数据1208、和/或由处理器1202响应于对逻辑1206的执行而生成的数据1208。
数据1208可以包括图1中的代码模块102和/或代码模块104。
逻辑1206包括编译器逻辑1210,用以使得处理器1202编译一代码模块102和/或一代码模块104以生成相对应的编译模块200和300,例如上文一个或更多个例子中所描述的。可替代地,代码模块102或代码模块104可以被另一个编译器编译以分别生成编译模块118或者编译模块120。
编译器逻辑1210可以包括规范接口逻辑1212以使得处理器1202生成接口代码以允许调用例程按照规范传递参数组,例如上文一个或更多个例子中所描述的。
编译器逻辑1210可以包括备选接口逻辑1214以使得处理器1202生成备选接口代码以允许调用例程通过备选接口传递参数组,例如上文一个或更多个例子中所描述的。
编译器逻辑1210可以包括规范入口点逻辑1216以使得处理器1202构造入口点和相对应的接口代码来允许被调用例程按规范接收参数组,例如上文一个或更多个例子中所描述的。
编译逻辑1210可以包括备选入口点逻辑1218以使得处理器1202构造备选入口以允许被调用例程通过备选接口接收参数组,例如上文一个或更多个例子中所描述的。
逻辑1206可以包括链接逻辑1220以使得处理器1202链接多个编译模块,这包括选择性链接调用例程到被调用例程的备选入口点,或者通过存根例程链接调用例程到被调用例程,例如上文一个或更多个例子中所描述的。
计算机系统1200可以包括通信基础设施1240,用以在计算机系统1200内进行通信,以及输入/输出控制器1242,用以通过诸如因特网的网络通信系统连接一个或更多个其他计算机系统。
本文借助于功能构建块来公开方法和系统,以说明其功能、特征以及关系。为了描述的方便,一个或更多这种划分可以在本文被任意定义。可替代的划分可以被定义。
虽然本文公开了各种实施例,但是应该理解作为示例而非限制呈现了这些实施例。在不脱离本文所公开的系统和方法的精神和范围的情况下,可以在其中进行形式和细节上的各种改变,这对相关领域技术人员将是显而易见的。所以,权利要求的宽度和范围并不被本文公开的任何例子所限制。
Claims (20)
1.一种系统,包括:
编译器,用于从代码模块生成第一编译模块,包括:
识别调用在所述第一代码模块中没有出现的名字的调用例程,
根据所述名字生成备选名字,并且生成所述备选名字的弱版本,
编译所述调用例程以通过第一接口传递一个或更多个参数的组并且调用所述备选名字,并且
编译所述第一代码模块以包括存根例程,该存根例程具有用所述备选名字的所述弱版本标识的入口点,并且配置为通过第二接口传递来自所述第一接口的所述参数组并调用所述名字。
2.如权利要求1所述的系统,还包括:
链接系统,用于将所述第一编译模块与第二编译模块链接,所述第二编译模块包括具有用所述名字标识的第一入口点的被调用例程,其中所述链接系统被配置为,
当所述被调用例程包括备选入口点时,将所述调用例程链接到具有所述备选名字的所述被调用例程的所述备选入口点,并且
当所述被调用例程不包括所述备选入口点时,将所述调用例程链接到所述存根例程的所述入口点并且将所述存根例程链接到所述被调用例程的所述第一入口点。
3.如权利要求1所述的系统,其中所述编译器还被配置为:
识别所述第一代码模块中的被调用例程,
根据所识别的被调用例程的名字生成备选入口点名字,并且
编译所识别的被调用例程以包括第一入口点,所述第一入口点具有所述被调用例程的所述名字并且被配置为通过所述第二接口接收所述参数组,并且包括备选入口点,所述备选入口点具有所述备选入口点名字并被配置为通过所述第一接口接收所述参数组。
4.如权利要求1所述的系统,其中所述第二接口符合规范并且所述第一接口不符合所述规范。
5.如权利要求1所述的系统,其中所述第一接口对应于寄存器并且所述第二接口对应于调用堆栈。
6.如权利要求1所述的系统,其中所述编译器还被配置为根据所述名字、所述第一接口的指示和所述参数组中的参数的数目生成所述备选名字。
7.一种方法,包括:
编译代码模块以生成第一编译模块,包括:
识别调用在所述第一代码模块中没有出现的名字的调用例程,
根据所述名字生成备选名字,
生成所述备选名字的弱版本,
编译所述调用例程以通过第一接口传递一个或更多个参数的组,并且调用所述备选名字,并且
编译所述第一代码模块以包括存根例程,所述存根例程具有用所述备选名字的所述弱版本标识的入口点,并且配置为通过第二接口传递来自所述第一接口的所述参数组并调用所述名字;
其中,在适当编程的计算机系统中执行所述编译。
8.如权利要求7所述的方法,还包括:
将所述第一编译模块与第二编译模块链接,所述第二编译模块包括具有用所述名字标识的第一入口点的被调用例程,包括:
当所述被调用例程包括备选入口点时,将所述调用例程链接到具有所述备选名字的所述被调用例程的所述备选入口点,并且
当所述被调用例程不包括所述备选入口点时,将所述调用例程链接到所述存根例程的所述入口点并且将所述存根例程链接到所述被调用例程的所述第一入口点。
9.如权利要求7所述的方法,其中所述编译还包括:
识别所述第一代码模块中的被调用例程;
根据所识别的被调用例程的名字生成备选入口点名字;并且
编译所识别的被调用例程以包括第一入口点,所述第一入口点具有所述被调用例程的所述名字并且被配置为通过所述第二接口接收所述参数组,并且包括备选入口点,所述备选入口点具有所述备选入口点名字并被配置为通过所述第一接口接收所述参数组。
10.如权利要求7所述的方法,其中所述编译还包括编译所述调用例程以通过多个接口中所选的一个接口来传递所述参数组。
11.如权利要求10所述的方法,其中所述编译还包括编译所述调用例程以基于所述参数组的参数的值通过所述多个接口中所选的一个接口来传递所述参数组。
12.如权利要求7所述的方法,其中所述编译还包括编译所述调用例程以组合来自多个位置的多个参数并且通过所述第一接口传递所述多个参数。
13.一种计算机程序产品,包括其上记录有计算机程序逻辑的计算机可读介质,所述计算机程序逻辑包括:
编译器逻辑,用于使得计算机系统编译一代码模块以生成第一编译模块,其中所述编译器逻辑包括:
使得所述计算机系统识别调用在所述第一代码模块中没有出现的名字的调用例程的逻辑,
使得所述计算机系统根据所述名字生成备选名字并且生成所述备选名字的弱版本的逻辑,
使得所述计算机系统编译所述调用例程以通过第一接口传递一个或更多个参数的组并且调用所述备选名字的逻辑,并且
使得所述计算机系统编译所述第一代码模块以包括存根例程的逻辑,所述存根例程具有用所述备选名字的所述弱版本标识的入口点,并且配置为通过第二接口传递来自所述第一接口的所述参数组并调用所述名字。
14.如权利要求13所述的计算机程序产品,还包括:
链接逻辑,用于使得所述计算机系统将所述第一编译模块与第二编译模块链接,所述第二编译模块包括具有用所述名字标识的入口点的被调用例程,其中所述链接逻辑包括用于使得所述处理器系统进行以下的逻辑:
当所述被调用例程包括备选入口点时,将所述调用例程链接到具有所述备选名字的所述被调用例程的所述备选入口点,并且
当所述被调用例程不包括所述备选入口点时,将所述调用例程链接到所述存根例程的所述入口点并且将所述存根例程链接到所述被调用例程的所述第一入口点。
15.如权利要求13所述的计算机程序产品,其中所述编译器逻辑还包括:
使得所述计算机系统识别所述第一代码模块中的被调用例程的逻辑;
使得所述计算机系统根据所识别的被调用例程的名字生成备选入口点名字的逻辑;并且
使得所述计算机系统编译所识别的被调用例程以包括第一入口点并且包括备选入口点的逻辑,所述第一入口点具有所述被调用例程的所述名字并且被配置为通过所述第二接口接收所述参数组,所述备选入口点具有所述备选入口点名字并被配置为通过所述第一接口接收所述参数组。
16.如权利要求13所述的计算机程序产品,其中所述第一接口对应于寄存器并且所述第二接口对应于调用堆栈。
17.如权利要求13所述的计算机程序产品,其中所述编译器逻辑还包括:使得所述计算机系统根据所述名字、所述第一接口的指示和所述参数组中的参数的数目生成所述备选名字的逻辑。
18.如权利要求13所述的计算机程序产品,其中所述编译器逻辑还包括:使得所述计算机系统编译所述调用例程以通过多个接口中所选的一个接口来传递所述参数组的逻辑。
19.如权利要求18所述的计算机程序产品,其中所述编译器逻辑还包括:使得所述计算机系统编译所述调用例程以基于所述参数组的参数的值通过多个接口中所选的一个接口来传递所述参数组的逻辑。
20.如权利要求13所述的计算机程序产品,其中所述编译器逻辑还包括:使得所述计算机系统编译所述调用例程以组合来自多个位置的多个参数并且通过所述第一接口传递所述多个参数的逻辑。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/759,487 US8464230B2 (en) | 2010-04-13 | 2010-04-13 | Methods and systems to implement non-ABI conforming features across unseen interfaces |
US12/759,487 | 2010-04-13 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102222017A true CN102222017A (zh) | 2011-10-19 |
CN102222017B CN102222017B (zh) | 2014-03-19 |
Family
ID=44284042
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110126383.3A Expired - Fee Related CN102222017B (zh) | 2010-04-13 | 2011-04-13 | 通过不可见接口实现不符合abi特征的方法和系统 |
Country Status (5)
Country | Link |
---|---|
US (1) | US8464230B2 (zh) |
EP (1) | EP2378413B1 (zh) |
JP (1) | JP5384551B2 (zh) |
KR (1) | KR101293389B1 (zh) |
CN (1) | CN102222017B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108304191A (zh) * | 2016-09-30 | 2018-07-20 | 龙芯中科技术有限公司 | 函数动态调用方法和装置 |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8464230B2 (en) | 2010-04-13 | 2013-06-11 | Intel Corporation | Methods and systems to implement non-ABI conforming features across unseen interfaces |
CN103853532B (zh) * | 2012-11-29 | 2017-09-29 | 国际商业机器公司 | 用于函数调用的方法和装置 |
US10185547B2 (en) * | 2015-06-26 | 2019-01-22 | Intel Corporation | Techniques for distributed operation of secure controllers |
US10235190B2 (en) | 2016-12-14 | 2019-03-19 | International Business Machines Corporation | Executing instructions to store context information based on routine to be executed |
US10241769B2 (en) | 2016-12-14 | 2019-03-26 | International Business Machines Corporation | Marking sibling caller routines |
US20180165073A1 (en) | 2016-12-14 | 2018-06-14 | International Business Machines Corporation | Context information based on type of routine being called |
US10152338B2 (en) | 2016-12-14 | 2018-12-11 | International Business Machines Corporation | Marking external sibling caller routines |
US10095493B2 (en) * | 2016-12-14 | 2018-10-09 | International Business Machines Corporation | Call sequence generation based on type of routine |
US10180827B2 (en) * | 2016-12-14 | 2019-01-15 | International Business Machines Corporation | Suppressing storing of context information |
US11416227B2 (en) * | 2019-01-31 | 2022-08-16 | Bayerische Motoren Werke Aktiengesellschaft | Method for executing program components on a control unit, a computer-readable storage medium, a control unit and a system |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6199200B1 (en) * | 1994-04-15 | 2001-03-06 | International Business Machines Corporation | Method and system for supporting dual conventions for methods that return structures |
CN1809812A (zh) * | 2003-04-18 | 2006-07-26 | 盎司实验室股份有限公司 | 用于源代码检测源代码中弱点的方法和装置 |
CN1975666A (zh) * | 2005-11-28 | 2007-06-06 | 安捷伦科技有限公司 | 具有可替换函数库的软件程序 |
US20080098377A1 (en) * | 2006-10-20 | 2008-04-24 | International Business Machines Corporation | Compiler neutral linking solution for c++ code |
US20100037208A1 (en) * | 2008-08-07 | 2010-02-11 | International Business Machines Corporation | handle based method for side-by-side assemblies in a unix environment |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS62262135A (ja) | 1986-05-09 | 1987-11-14 | Nec Corp | 外部手続き結合手順リンク時決定方式 |
JPS6324422A (ja) | 1986-07-17 | 1988-02-01 | Nec Corp | セグメント方式計算機における2種以上の呼出し手順の共存方式 |
JPH0322141A (ja) | 1989-06-20 | 1991-01-30 | Fujitsu Ltd | 異なる言語間における呼出仲介方式 |
US7350193B2 (en) | 2004-09-30 | 2008-03-25 | Motorola, Inc. | Procedure invocation in an integrated computing environment having both compiled and interpreted code segments |
US7412710B2 (en) * | 2004-11-12 | 2008-08-12 | Red Hat, Inc. | System, method, and medium for efficiently obtaining the addresses of thread-local variables |
US20070157178A1 (en) * | 2006-01-04 | 2007-07-05 | International Business Machines Corporation | Cross-module program restructuring |
KR101308781B1 (ko) * | 2006-10-02 | 2013-09-17 | 인터내셔널 비지네스 머신즈 코포레이션 | 프로그램 코드 변환과 관련된 링크된 함수 호출을 동적으로 처리하는 방법 및 장치 |
US8296745B2 (en) * | 2007-12-31 | 2012-10-23 | Oracle America, Inc. | Method and apparatus for portable stub generation |
US8464230B2 (en) * | 2010-04-13 | 2013-06-11 | Intel Corporation | Methods and systems to implement non-ABI conforming features across unseen interfaces |
-
2010
- 2010-04-13 US US12/759,487 patent/US8464230B2/en active Active
-
2011
- 2011-04-11 EP EP11250455A patent/EP2378413B1/en not_active Not-in-force
- 2011-04-12 JP JP2011088417A patent/JP5384551B2/ja not_active Expired - Fee Related
- 2011-04-13 KR KR1020110034452A patent/KR101293389B1/ko not_active IP Right Cessation
- 2011-04-13 CN CN201110126383.3A patent/CN102222017B/zh not_active Expired - Fee Related
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6199200B1 (en) * | 1994-04-15 | 2001-03-06 | International Business Machines Corporation | Method and system for supporting dual conventions for methods that return structures |
CN1809812A (zh) * | 2003-04-18 | 2006-07-26 | 盎司实验室股份有限公司 | 用于源代码检测源代码中弱点的方法和装置 |
CN1975666A (zh) * | 2005-11-28 | 2007-06-06 | 安捷伦科技有限公司 | 具有可替换函数库的软件程序 |
US20080098377A1 (en) * | 2006-10-20 | 2008-04-24 | International Business Machines Corporation | Compiler neutral linking solution for c++ code |
US20100037208A1 (en) * | 2008-08-07 | 2010-02-11 | International Business Machines Corporation | handle based method for side-by-side assemblies in a unix environment |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108304191A (zh) * | 2016-09-30 | 2018-07-20 | 龙芯中科技术有限公司 | 函数动态调用方法和装置 |
CN108304191B (zh) * | 2016-09-30 | 2021-06-01 | 龙芯中科技术股份有限公司 | 函数动态调用方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
US20110252409A1 (en) | 2011-10-13 |
EP2378413A2 (en) | 2011-10-19 |
US8464230B2 (en) | 2013-06-11 |
KR101293389B1 (ko) | 2013-08-05 |
JP5384551B2 (ja) | 2014-01-08 |
CN102222017B (zh) | 2014-03-19 |
KR20110114497A (ko) | 2011-10-19 |
EP2378413B1 (en) | 2013-03-27 |
JP2011222022A (ja) | 2011-11-04 |
EP2378413A3 (en) | 2011-12-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102222017B (zh) | 通过不可见接口实现不符合abi特征的方法和系统 | |
CN107943469B (zh) | 一种智能合约的发布方法及装置 | |
CN103038760B (zh) | 分布式处理器系统中的数据组播的方法、设备及系统 | |
US8464217B2 (en) | Object-oriented support for dynamic assignment of parallel computing resources | |
Pena et al. | The internet of things: The role of reconfigurable platforms | |
Jussila et al. | Model checking dynamic and hierarchical UML state machines | |
US20150199787A1 (en) | Distribute workload of an application to a graphics processing unit | |
CN106802804B (zh) | 一种人机界面的可视化变量关联组件的方法及系统 | |
US8402450B2 (en) | Map transformation in data parallel code | |
CN101799760A (zh) | 生成任意目标架构的并行单指令多数据代码的系统和方法 | |
CN109656608A (zh) | 一种mcu固件升级方法及其相关设备 | |
CN103729235A (zh) | Java虚拟机的编译方法和Java虚拟机 | |
US20050004786A1 (en) | State machine modelling | |
CN101025698A (zh) | 强制性地终止输入/输出操作阻止的线程的设备和方法 | |
CN103049710A (zh) | 用于sm2数字签名验证算法的fpga芯片 | |
CN1460208A (zh) | 使用主叫用户地址的安全软件smi调度 | |
US10620916B2 (en) | Read-only communication operator | |
CN111399829A (zh) | 一种基于模型驱动的波形建模方法及终端 | |
CN110781126A (zh) | 一种TensorFlow的FPGA异构加速实现方法、系统、终端及存储介质 | |
Hasanagić et al. | Code generation for distributed embedded systems with VDM-RT | |
Johnsen et al. | A formal model of object mobility in resource-restricted deployment scenarios | |
Haupt et al. | ContextJ: Context-oriented programming with Java | |
CN115390986A (zh) | 一种基于国密芯片的智能合约并行执行系统 | |
WO2022035476A1 (en) | Representing asynchronous state machine in intermediate code | |
WO2022046198A1 (en) | Thread-local return structure for asynchronous state machine |
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 | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20140319 Termination date: 20210413 |
|
CF01 | Termination of patent right due to non-payment of annual fee |