[发明专利]针对程序代码转换处理动态链接的函数调用的方法和设备有效
| 申请号: | 200780036797.9 | 申请日: | 2007-10-01 |
| 公开(公告)号: | CN101523348A | 公开(公告)日: | 2009-09-02 |
| 发明(设计)人: | 亚历山大·巴拉克劳·布朗 | 申请(专利权)人: | 特兰斯蒂有限公司 |
| 主分类号: | G06F9/45 | 分类号: | G06F9/45;G06F9/455;G06F9/445 |
| 代理公司: | 北京铭硕知识产权代理有限公司 | 代理人: | 韩明星;张 军 |
| 地址: | 英国*** | 国省代码: | 英国;GB |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 针对 程序代码 转换 处理 动态 链接 函数 调用 方法 设备 | ||
技术领域
本发明总体上涉及计算机和计算机软件领域,更详细地讲,涉及例如在 转换包括动态链接的函数调用的程序代码的代码翻译器、仿真器和加速器中 有用的程序代码转换方法和设备。
背景技术
在嵌入式和非嵌入式CPU市场中,可找到占主导地位的指令集架构 (ISA),对于这些ISA存在大量软件,这些软件为了性能可被“加速”,或者 可被“翻译”给大量有能力的能够表现出更好的成本/性能优点的处理器,只 要这些处理器能够透明地访问相关软件。还可找到占优势的CPU架构,所述 CPU架构最终被锁定到它们的ISA,不能在性能或市场占有方面得到发展, 并且可从“合成CPU”协同架构受益。
经常期望在第二类型的处理器(“目标”处理器)上运行为第一类型的处 理器(“对象”处理器)编写的程序代码。这里,仿真器或翻译器用于执行程序 代码转换,从而对象程序能够在目标处理器上运行。PCT申请WO00/22521 公开了程序代码转换方法和设备,所述程序代码转换方法和设备促进了这样 的加速、翻译和协同架构能力,可在本发明的实施例中采用所述程序代码转 换方法和设备。
将被翻译的对象程序通常由多个对象代码单元组成,对象代码单元包括 对象应用和多个对象库,一些对象库可以是专有的,一些对象库被提供作为 对象OS的一部分(“系统库”)。当对象程序运行时,随着对库进行函数调用, 控制流在这些不同的对象代码单元之间传递。
在特定的操作系统(例如来自Sun微系统公司的Solaris)中,将函数调用 链接到实现该函数的库代码的处理可在运行时被执行,并且该过程被称为动 态链接。动态链接由动态链接器代码执行,并且包括中间控制结构的使用, 中间控制结构被称为过程链接表(PLT)。
PLT是编译的程序的一部分,并且包含入口,入口包括程序所需要的每 个库函数的链接信息。当在程序的一般运行中遇到对库函数的首次调用时, 控制流跳转到与该函数相关联的PLT入口。该函数的PLT入口通过调用动态 链接器代码来控制该阶段的链接处理。动态链接器代码使得所涉及的函数的 链接信息被更新。通过更新链接信息,动态链接器代码生成从该函数的PLT 入口到实现该函数的库代码的链接。通过这种方式建立的链接通常持续程序 的剩余运行那么长时间。
然后,动态链接器代码将控制流传递给库中的代码,从而函数被执行。
程序对该函数的随后调用如先前那样将控制流传递给PLT入口。由于已 经使用对实现该函数的库代码的链接更新了PLT入口,所以现在PLT在这些 随后调用中使得控制流从PLT直接传递给库。这些随后调用既不需要另外更 新PLT入口,也不需要另外调用动态链接器。
在特定的操作系统中,创建函数的PLT入口与包含执行该函数的代码的 库之间的链接的动作具有修改与PLT相关联的数据(诸如全局偏移表)的效果。 然后,修改的全局偏移表可通过PLT入口中的代码在运行时被读取,使得能 够形成链接。在特定的其它操作系统(例如Solaris)中,创建特定函数的PLT 入口与包括该函数的库之间的链接的动作具有修改形成PLT入口本身的可执 行代码的替换效果。
如上所述作为中间控制结构的PLT的使用,具体地讲,在函数被首次调 用时,通过修改包括PLT的代码来进行PLT中的链接信息的修改,使得对于 采用PLT作为动态链接机制的一部分的对象代码的程序代码转换变得复杂。
由于被修改的对象代码可对应于已经被翻译的目标代码,所以运行时的 代码修改给动态翻译器带来问题。当发生了对象代码的这种修改时,修改的 对象代码的所有目标代码翻译必须被识别,并且作为陈旧物被丢弃。因此, 翻译器应该能够识别与正被修改的特定对象代码地址对应的所有目标代码序 列(即,翻译)。
在动态翻译器中,发现并删除与给定的对象地址对应的目标代码是困难 的,有时甚至是不可能的。在一些情况下,在翻译期间应用了优化,所述优 化产生与翻译所表示的对象地址的范围不再正确相关的翻译。在这些情况下, 如果对象程序修改了特定对象地址处的自己的代码,则翻译器无法识别哪个 翻译的目标代码将被无效。另外,在多线程环境中安全删除翻译的目标代码 可能导致另外的问题。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于特兰斯蒂有限公司,未经特兰斯蒂有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/200780036797.9/2.html,转载请声明来源钻瓜专利网。





