本发明专利技术提供了一种用于处理应用程序中的内容表(TOC)访问溢出的方法和系统。其中,该方法在对编译产生的目标文件进行链接时,确定该目标文件中的TOC访问是否存在溢出。如果在目标文件中的TOC访问存在溢出,则对该目标文件所对应的源文件进行再次编译,以产生没有TOC溢出的目标文件,并对目标文件进行再次链接,从而产生应用程序的可执行文件。本发明专利技术通过采用两轮编译,仅对确实存在TOC溢出的TOC表项才产生两条指令形式的双指令TOC访问。因此,该方案具有很好的易用性,并且降低了性能损失。
【技术实现步骤摘要】
本专利技术涉及应用程序的处理,尤其涉及一种用于处理应用程序中的内容表(TOC)访问溢出的方法和系统。
技术介绍
用于AIX和Linux的POWER系统是IBM服务器系列的主要产品,其中,工具链的易用性(tools chain usability)和性能是在POWER系统上进行开发的一个很重要的基础。对于POWER系统来说,在对应用程序进行构建的过程中,存在一个被称为“T0C溢出(overflow) ”的问题,该TOC溢出会限制全局数据/代码的使用,常常为POWER系统开发人员带来很大的不便。
技术实现思路
本专利技术希望提供一种新的方案来处理应用程序构建中出现的TOC溢出问题。依据本专利技术的一个实施例,提供了一种用于处理应用程序的方法,包括对应用程序的源文件进行编译,以产生与源文件对应的目标文件;对编译产生的目标文件进行链接,以确定目标文件中的TOC访问是否存在溢出;响应于目标文件中的TOC访问存在溢出,对所述TOC访问存在溢出的目标文件所对应的源文件进行再次编译,以产生没有TOC溢出的目标文件;以及,用再次编译产生的没有TOC溢出的目标文件替换所述TOC访问存在溢出的目标文件,并对目标文件进行再次链接。依据本专利技术的另一个实施例,提供了一种用于处理应用程序的系统,包括编译器,被配置为对应用程序的源文件进行编译,以产生与源文件对应的目标文件;链接器,被配置为对编译产生的目标文件进行链接,其中,所述链接器进一步被配置为确定所述目标文件中的TOC访问是否存在溢出;所述编译器进一步被配置为响应于目标文件中的TOC访问存在溢出,对TOC访问存在溢出的目标文件所对应的源文件进行再次编译,以产生没有TOC溢出的目标文件;以及,所述链接器进一步被配置为用再次编译产生的没有TOC溢出的目标文件替换TOC访问存在溢出的目标文件,并对目标文件进行再次链接。本专利技术通过采用两轮编译,仅对确实存在TOC溢出的TOC表项才产生两条指令形式的双指令TOC访问。因此,该方案具有很好的易用性,并且降低了性能损失。附图说明通过对附图中本专利技术示例实施例方式的更详细描述,本专利技术的上述、以及其它目的、特征和优势将变得更加明显。图I示出了适于用来实现本专利技术实施方式的示例性计算系统100的框图。图2示出了一个TOC访问的示意图。图3示出了一个TOC溢出的示意图。图4示出了依据本专利技术的一个实施例的用于处理TOC溢出的方法的流程图。图5示出了依据本专利技术的另一个实施例的用于处理TOC溢出的过程的示意图。图6不出了一个溢出符号列表的不意图。图7示出了依据本专利技术的一个实施例的用于处理TOC溢出的系统700的方框图。具体实施例方式以下参照按照本专利技术实施例的方法、系统描述本专利技术。其中,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机程序指令实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,使得通过计算机或其它可编程数据处理装置执行的这些指令,产生实现流程图和/或框图中的方框中规定的功能/操作的装置(means)。也可以把这些计算机程序指令存储在能指令计算机或其它可编程数据处理装置以特定方式工作的计算机可读介质中,这样,存储在计算机可读介质中的指令产生一个包括实现流程图和/或框图中的方框中规定的功能/操作的指令装置(instruction means) 的制造品。还可以把计算机程序指令加载到计算机或其它可编程数据处理装置上,使得在计算机或其它可编程数据处理装置上执行一系列操作步骤,以产生计算机实现的过程,从而在计算机或其它可编程装置上执行的指令就提供实现流程图和/或框图中的方框中规定的功能/操作的过程。图I示出了适于用来实现本专利技术实施方式的示例性计算系统100的框图。如所示,计算机系统100可以包括CPU(中央处理单元)101、RAM(随机存取存储器)102、R0M(只读存储器)103、系统总线104、硬盘控制器105、键盘控制器106、串行接口控制器107、并行接口控制器108、显示控制器109、硬盘110、键盘111、串行外部设备112、并行外部设备113和显示器114。在这些设备中,与系统总线104耦合的有CPU10URAM 102,ROM 103、硬盘控制器105、键盘控制器106、串行控制器107、并行控制器108和显示控制器109。硬盘110与硬盘控制器105耦合,键盘111与键盘控制器106耦合,串行外部设备112与串行接口控制器107耦合,并行外部设备113与并行接口控制器108耦合,以及显示器114与显示控制器109耦合。应当理解,图I所述的结构框图仅仅为了示例的目的而示出的,而不是对本专利技术范围的限制。在某些情况下,可以根据具体情况而增加或者减少某些设备。在参考附图具体描述依据本专利技术的实施例之前,下面先对本专利技术所涉及的一些术语进行如下介绍。IBM POWER的硬件指令IBM POWER硬件支持用偏移指令加载/存储。例如,“L RT, offet (RA) ”表示从地址“offset+RA”加载到寄存器RT。“offset”是介于_2~ 15和2~ 15之间的一个立即数。TOC (内容表)AIX 的 ABI (Application Binary Interface 应用程序二进制接口)和 64 位的Linux限定了 T0C,该内容表实际上是存储器中分配的一个部分。所有的全局变量和函数指针的地址被放入该TOC中,必须通过地址来访问。TOC 访问通常,使用一条加载指令来进行TOC地址访问。TOC表存有数据和函数的地址,图2示出了一个TOC访问的示意图,其中,基址寄存器R2指向TOC表的中心位置。对数据的访问必须通过TOC表得到数据地址,然后根据地址完成数据访问。例如,当使用全局变量A2时,编译器必须首先通过访问TOC :“L R3,offset_of_A2 (R2) ”来加载A的地址。R2是TOC的基地址,offset_of_A2 (R2)是TOC中的TOC表项A2的偏移。这里需要注意的是,TOC表项存储的是A2的地址,而不是A2的值。然后,编译器使用另一条加载指令来获得值A2 :“L R4,R3”。需要注意的是,寄存器R3仅在最近一次TOC访问时获得A2的地址。以图2所示的TOC表为例,如果要访问数据A2,首先通过符号A2在TOC表中的偏移位置(+800)和基址寄存器R2 (T0C表基地址),计算出A2 在TOC表中的位置,并读取A2的地址,可以通过指令L0ADR3,800(R2)完成这步操作。运行该指令后在寄存器R3存放A2的地址。之后,使用该地址再次访问存储器中的数据空间,得到所需要的数据。 如图2所示,TOC表除了可以用于A1,A2等数据之外,也可以存放f00l,f002等函数的地址。并且,同样,如果要调用函数fool,则需要通过fool在TOC表中的偏移位置和基址寄存器R2,计算出fool在TOC表中的位置,并读取fool的地址,之后,使用该地址访问存储器中的代码空间,从而调用该函数。链接器的重定位(LinkerRelocation)在编译时,并不创建T0C,编译器并不知晓TOC表项的偏移。例如,在上面的例子中,“0ffset_0f_A”是未知的,编译器必须本文档来自技高网...
【技术保护点】
一种用于处理应用程序的方法,包括:对应用程序的源文件进行编译,以产生与源文件对应的目标文件;对编译产生的目标文件进行链接,以确定目标文件中的TOC访问是否存在溢出;响应于目标文件中的TOC访问存在溢出,对所述TOC访问存在溢出的目标文件所对应的源文件进行再次编译,以产生没有TOC溢出的目标文件;以及用再次编译产生的没有TOC溢出的目标文件替换所述TOC访问存在溢出的目标文件,并对目标文件进行再次链接。
【技术特征摘要】
1.一种用于处理应用程序的方法,包括 对应用程序的源文件进行编译,以产生与源文件对应的目标文件; 对编译产生的目标文件进行链接,以确定目标文件中的TOC访问是否存在溢出; 响应于目标文件中的TOC访问存在溢出,对所述TOC访问存在溢出的目标文件所对应的源文件进行再次编译,以产生没有TOC溢出的目标文件;以及 用再次编译产生的没有TOC溢出的目标文件替换所述TOC访问存在溢出的目标文件,并对目标文件进行再次链接。2.如权利要求I所述的方法,其中,对应用程序的源文件进行编译,以产生与源文件对应的目标文件进一步包括,对源文件产生单指令TOC访问,以及, 响应于目标文件中的TOC访问存在溢出,对所述TOC访问存在溢出的目标文件所对应的源文件进行再次编译,以产生没有TOC溢出的目标文件进一步包括,对于TOC访问存在溢出的目标文件所对应的源文件,产生多指令TOC访问。3.如权利要求2所述的方法,其中,所述多指令TOC访问是采用二条指令形式的双指令TOC访问。4.如权利要求I所述的方法,其中,对应用程序的源文件进行编译,以产生与源文件对应的目标文件进一步包括,记录所述编译的编译命令。5.如权利要求I所述的方法,其中,对编译产生的目标文件进行链接,以确定目标文件中的TOC访问是否存在溢出进一步包括,将所述溢出的溢出信息记录在溢出符号列表中,以及, 响应于所述目标文件中的TOC访问存在溢出,对所述TOC访问存在溢出的目标文件所对应的源文件进行再次编译,以产生没有TOC溢出的目标文件进一步包括,根据所述溢出符号列表,确定TOC访问存在溢出的目标文件。6.如权利要求5所述的方法,其中,所述溢出信息包括TOC访问溢出的溢出符号以及包含所述溢出符号的目标文件的目标文件名。7.如权利要求I所述的方法,其中,对应用程序的源文件进行编译,以产生与源文件对应的目标文件进一步包括,获得TOC符号的频率信息, 对编译产生的目标文件进行链接,以确定目标文件中的TOC访问是否存...
【专利技术属性】
技术研发人员:蒋健,张嗣元,纪金松,
申请(专利权)人:国际商业机器公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。