共享库的二进制翻译执行方法和装置的制造方法

文档序号:9579105阅读:155来源:国知局
共享库的二进制翻译执行方法和装置的制造方法
【技术领域】
[0001]本发明涉及计算机技术领域,具体涉及一种共享库的二进制翻译执行方法和装置。
【背景技术】
[0002]计算机体系结构不断发展,适应不同需求的新处理器不断涌现。当一种新处理器产生时,软件资源的匮乏是阻碍其向前发展的一个重要因素。老牌通用处理器有着丰富的软件资源,但其二进制程序仅能够在本指令集体系结构平台上运行。在这种背景下,移植原有体系结构中可执行代码到新处理器的工作越来越重要,二进制翻译技术在这种情况下应运而生。
[0003]其中,二进制翻译(BT, Binary Translat1n)技术是一种重要的跨指令集体系结构(ISA Instruct1n Set Architecture)进行代码迁移的技术,通常BT技术在翻译源平台(也可称客户机(guest))的某共享库时,通常是以源平台支持的二进制形式的该共享库和依赖该共享库的主程序及该主程序依赖的其他所有共享库作为输入(即使目标平台上本来已有对应主程序),通过对输入信息翻译得到可以在目标平台(也称宿主机(host))运行的相应共享库和依赖该共享库的主程序及该主程序依赖的其他所有共享库。由于二进制翻译技术具有十分广泛应用,目前业内已经开始对其进行深入研究。
[0004]现有技术的二进制翻译系统通常是将客户机支持的共享库和依赖该共享库的主程序及该主程序依赖的其他所有共享库全部进行二进制翻译,以得到可在宿主机上运行的相应共享库和依赖该共享库的主程序及该主程序依赖的其他所有共享库,然而,这使得现有二进制翻译系统需翻译的代码量有些时候可能比较巨大,进而可能给二进制翻译系统带来很大工作负担,进而可能影响到用户体验。

【发明内容】

[0005]本发明实施例提供共享库的二进制翻译执行方法和装置,以期待能减少翻译共享库时的相关代码翻译量,从而提高二进制翻译的执行效率,进而提升用户体验。
[0006]本发明第一方面提供一种共享库的二进制翻译执行方法,所述方法应用于宿主机,所述宿主机中包括所述宿主机支持的第一共享库、所述宿主机支持的第二共享库和客户机支持的第三共享库,所述第一共享库包括翻译函数,所述宿主机和所述客户机支持不同的指令集体系架构,
[0007]所述方法包括:
[0008]当所述第二共享库中的第一函数被调用时,所述宿主机执行所述第一函数以调用所述第一共享库中的翻译函数;
[0009]所述宿主机利用所述调用的所述第一共享库中的翻译函数,对所述第三共享库中的函数接口与所述第一函数的函数接口相同的第二函数进行翻译,以得到所述宿主机支持的第三函数;其中,所述第三函数的函数接口和所述第二函数的函数接口相同;
[0010]所述宿主机执行所述第三函数。
[0011]结合第一方面,在第一方面的第一种可能的实施方式中,所述宿主机中还包括所述宿主机支持的第五共享库;若所述第二函数包括调用所述客户机支持的第四共享库中的第四函数的指令,对所述第二函数进行翻译的步骤,还包括:
[0012]所述宿主机将所述第二函数包括的调用所述第四共享库中的第四函数的指令,翻译成调用所述第五共享库中的第五函数的指令,其中,所述第四函数和所述第五函数的函数功能相同,或者,所述第四函数和所述第五函数的函数功能和函数接口均相同。
[0013]结合第一方面,在第一方面的第二种可能的实施方式中,所述宿主机中还包括所述宿主机支持的第五共享库,当所述第三函数调用所述客户机支持的第四共享库中的第四函数时,所述方法还包括:
[0014]所述宿主机将所述第三函数包括的调用所述客户机支持的第四共享库中的第四函数的指令,翻译成所述第三函数调用所述第五共享库中第五函数的指令;其中,所述第四函数和所述第五函数的函数功能相同,或者,所述第四函数和所述第五函数的函数功能和函数接口均相同。
[0015]结合第一方面或第一方面的第一种可能的实施方式或第一方面的第二种可能的实施方式,在第一方面的第三种可能的实施方式中,
[0016]所述宿主机中还包括所述宿主机支持的第二主程序,若所述第二函数包括调用所述客户机支持的第一主程序中的第六函数的指令,对所述第二函数进行翻译的步骤,还包括:
[0017]所述宿主机将所述第二函数包括的所述调用所述客户机支持的第一主程序中的第六函数的指令,翻译成调用所述第二主程序中的第七函数的指令,其中,所述第六函数和所述第七函数的函数功能相同,或者,所述第六函数和所述第七函数的函数功能和函数接口均相同。
[0018]结合第一方面或第一方面的第一种可能的实施方式或第一方面的第二种可能的实施方式,在第一方面的第四种可能的实施方式中,所述宿主机中还包括所述宿主机支持的第二主程序,当所述第三函数调用所述客户机支持的第一主程序中的第六函数时,所述方法还包括:
[0019]所述宿主机将所述第三函数包括的调用所述客户机支持的第一主程序中的第六函数的指令,翻译成所述第三函数调用所述第二主程序中的第七函数的调用,其中,所述第六函数和所述第七函数的函数功能相同,或者,所述第六函数和所述第七函数的函数功能和函数接口均相同。
[0020]结合第一方面或第一方面的第一种可能的实施方式或第一方面的第二种可能的实施方式或第一方面的第三种可能的实施方式或第一方面的第四种可能的实施方式,在第一方面的第五种可能的实施方式中,当所述第二函数包括以所述客户机支持的第十函数的函数指针作为传入参数,以调用所述宿主机支持的第八函数的调用指令,对所述第二函数进行翻译的步骤,还包括:所述宿主机将所述以所述客户机支持的第十函数的函数指针作为传入参数,以调用所述宿主机支持的第八函数的调用指令,替换为,以所述宿主机支持的第九函数的函数指针作为传入参数,以调用所述宿主机支持的第八函数的调用指令;
[0021]其中,当所述第九函数被调用时,所述宿主机执行所述第九函数以调用所述第一共享库中的翻译函数对所述第十函数进行翻译,得到所述宿主机支持的第十一函数,所述宿主机执行所述第十一函数。
[0022]结合第一方面或第一方面的第一种可能的实施方式或第一方面的第二种可能的实施方式或第一方面的第三种可能的实施方式或第一方面的第四种可能的实施方式或第一方面的第五种可能的实施方式,在第一方面的第六种可能的实施方式中,当所述第二函数包括以第一结构体作为传入参数调用第十二函数的调用指令,对所述第二函数进行翻译的步骤,还包括:
[0023]所述宿主机将所述以第一结构体作为传入参数调用第十二函数的调用指令翻译为,以第二结构体作为传入参数调用第十二函数的调用指令,所述第一结构体包含的域为所述第二结构体包含的域的子集;
[0024]其中,所述第一结构体为所述客户机支持的结构体,且所述第二结构体为所述宿主机支持的结构体,且所述第十二函数为所述宿主机支持的函数;
[0025]或者,所述第一结构体为所述宿主机支持的结构体,并且所述第二结构体为所述客户机支持的结构体,并且所述第十二函数为所述所述客户机支持的函数。
[0026]结合第一方面或第一方面的第一种可能的实施方式或第一方面的第二种可能的实施方式或第一方面的第三种可能的实施方式或第一方面的第四种可能的实施方式或第一方面的第五种可能的实施方式或第一方面的第六种可能的实施方式,在第一方面的第七种可能的实施方式中,
[0027]当所述第二函数包括以第一结构体指针作为传入参数调用第十三函数的调用指令,对所述第二函数进行翻译的步骤,还包括:所述宿主机将所述以第一结构体指针作为传入参数调用第十三函数的调用指令,翻译为,以第二结构体指针作为传入参数调用第十三函数的调用指令;
[0028]其中,所述第一结构体指针指向第一结构体,所述第二结构体指针指向第二结构体,所述第一结构体包含的域为所述第二结构体包含的域的子集;
[0029]其中,所述第一结构体为客户机支持的结构体,且所述第二结构体为宿主机支持的结构体,且所述第十三函数为所述宿主机支持的函数;或者所述第一结构体为宿主机支持的结构体,并且所述第二结构体为客户机支持的结构体,且所述第十三函数为所述客户机支持的函数。
[0030]结合第一方面或第一方面的第一种可能的实施方式或第一方面的第二种可能的实施方式或第一方面的第三种可能的实施方式或第一方面的第四种可能的实施方式或第一方面的第五种可能的实施方式或第一方面的第六种可能的实施方式或第一方面的第七种可能的实施方式,在第一方面的第八种可能的实施方式中,
[0031]当所述第二函数的传入参数包括第三结构体,所述方法还包括:所述宿主机将作为所述第二函数的传入参数的第三结构体替换为第四结构体,所述第三结构体包含的域为所述第四结构体包含的域的子集;
[0032]其中,所述第四结构体为客户机支持的结构体,且所述第三结构体为宿主机支持的结构体。
[0033]结合第一方面或第一方面的第一种可能的实施方式或第一方面的第二种可能的实施方式或第一方面的第三种可能的实施方式或第一方面的第四种可能的实施方式或第一方面的第五种可能的实施方式或第一方面的第六种可能的实施方式或第一方面的第七种可能的实施方式,在第一方面的第九种可能的实施方式中,
[0034]当所述第二函数的传入参数包括第三结构体指针,所述方法还包括:所述宿主机将作为所述第二函数的传入参数的所述第三结构体指针替换为第四结构体指针,所述第四结构体指针指向第四结构体,所述第三结构体指针指向第三结构体,所述第三结构体包含的域为所述第四结构体包含的域的子集;
[0035]其中,所述第四结构体为客户机支持的结构体,且所述第三结构体为宿主机支持的结构体。
[0036]结合第一方面或第一方面的第一种可能的实施方式或第一方面的第二种可能的实施方式或第一方面的第三种可能的实施方式或第一方面的第四种可能的实施方式或第一方面的第五种可能的实施方式或第一方面的第六种可能的实施方式或第一方面的第七种可能的实施方式或第一方面的第八种可能的实施方式或第一方面的第九种可能的实施方式,在第一方面的第十种可能的实施方式中,
[0037]所述对第三共享库中的第一函数进行翻译以得到第二函数之前,所述方法还包括:所述宿主机对所述第三共享库和所述宿主机的同名全局变量进行符号重定位。
[0038]结合第一方面的第十种可能的实施方式,在第一方面的第i^一种可能的实施方式中,所述宿主机对所述第三共享库和所述宿主机的同名全局变量进行符号重定位包括:若所述第三共享库包含的第一全局变量和所述宿主机的N个全局变量同名,所述宿主机将所述第一全局变量和所述N个全局变量之中最先加载的全局变量的地址,设定为所述N个全局变量和所述第一全局变量的公共地址。
[0039]结合第一方面的第十种可能的实施方式,在第一方面的第十二种可能的实施方式中,所述宿主机对所述第三共享库和所述宿主机的同名全局变量进行符号重定位包括:在所述第二共享库中被加载之后,所述宿主机将所述第三共享库中的第一全局变量的地址,重定位为所述第二共享库中的第二全局变量的地址,其中,所述第一全局变量和所述第二全局变量的声明相同。
[0040]本发明第二方面提供一种宿主机,所述宿主机包括:
[0041]存储单元,用于存储所述宿主机支持的第一共享库、所述宿主机支持的第二共享库和客户机支持的第三共享库,所述第一共享库包括翻译函数,所述宿主机和所述客户机支持不同的指令集体系架构;
[0042]调用单元,用于当所述第二共享库中的第一函数被调用时,执行所述第一函数以调用所述第一共享库中的翻译函数;
[0043]翻译单元,用于利用所述调用的第一共享库中的翻译函数,对所述第三共享库中的函数接口与所述第一函数的函数接口相同的第二函数进行翻译,以得到所述宿主机支持的第三函数;其中,所述第三函数的函数接口和所述第二函数的函数接口相同;
[0044]执行单元,用于执行所述第三函数。
[0045]结合第二方面,在第二方面的第一种可能的实施方式中,所述存储单元还用于存储所述宿主机支持的第五共享库;其中,若所述第二函数包括调用所述客户机支持的第四共享库中的第四函数的指令;
[0046]所述翻译单元还用于:
[0047]将所述第二函数包括的调用所述第四共享库中的第四函数的指令,翻译成调用所述第五共享库中的第五函数的指令,其中,所述第四函数和所述第五函数的函数功能相同,或者,所述第四函数和所述第五函数的函数功能和函数接口均相同。
[0048]结合第二方面,在第二方面的第二种可能的实施方式中,所述存储单元还用于存储所述宿主机支持的第五共享库,当所述第三函数调用所述客户机支持的第四共享库中的第四函数时,所述翻译单元还用于:
[0049]将所述第三函数包括的调用所述客户机支持的第四共享库中的第四函数的指令,翻译成所述第三函数调用所述第五共享库中第五函数的指令;所述第四函数和所述第五函数的函数功能相同,或者,所述第四函数和所述第五函数的函数功能和函数接口均相同。
[0050]结合第二方面或第二方面的第一种可能的实施方式或第二方面的第二种可能的实施方式,在第二方面的第三种可能的实施方式中,所述存储单元还用于存储所述宿主机支持的第二主程序,若所述第二函数包括调用所述客户机支持的第一主程序中的第六函数的指令,所述翻译单元还用于:
[0051]将所述第二函数包括的所述调用所述客户机支持的第一主程序中的第六函数的指令,翻译成调用所述第二主程序中的第七函数的指令,其中,所述第六函数和所述第七函数的函数功能相同,或者,所述第六函数和所述第七函数的函数功能和函数接口均相同。
[0052]结合第二方面或第二方面的第一种可能的实施方式或第二方面的第二种可能的实施方式,在第二方面的第四种可能的实施方式中,所述存储单元还用于存储所述宿主机支持的第二主程序,当所述第三函数调用所述客户机支持的第一主程序中的第六函数时,所述翻译单元还用于:
[0053]将所述第三函数包括的调用所述客户机支持的第一主程序中的第六函数的指令,翻译成所述第三函数调用所述第二主程序中的第七函数的调用,所述第六函数和所述第七函数的函数功能相同,或者,所述第六函数和所述第七函数的函数功能和函数接口均相同。
[0054]可选的,当所述第二函数包括以所述客户机支持的第十函数的函数指针作为传入参数,以调用所述宿主机支持的第八函数的调用指令,所述翻译单元还用于:
[0055]将所述以所述客户机支持的第十函数的函数指针作为传入参数,以调用所述宿主机支持的第八函数的调用指令,替换为以所述宿主机支持的第九函数的函数指针作为传入参数,以调用所述宿主机支持的第八函数的调用指令;当所述第九函数被调用时,执行所述第九函数以调用所述第一共享库中的翻译函数对所述第十函数进行翻译,得到所述宿主机支持的第i^一函数。
[0056]结合第二方面或第二方面的第一种可能的实施方式或第二方面的第二种可能的实施方式或第二方面的第三种可能的实施方式或第二方面的第四种可能的实施方式,在第二方面的第五种可能的实施方式中,当所述第二函数包括以第一结构体作为传入参数调用第十二函数的调用指令,所述翻译单元还用于将所述以第一结构体作为传入参数调用第十二函数的调用指令,翻译为,以第二结构体作为传入参数调用第十二函数的调用指令,其中,所述第一结构体包含的域为所述第二结构体包含的域的子集;
[0057]其中,所述第一结构体为所述客户机支持的结构体,且所述第二结构体为所述宿主机支持的结构体,且所述第十二函数为所述宿主机支持的函数;
[0058]或者,所述第一结构体为所述宿主机支持的结构体,并且所述第二结构体为所述客户机支持的结构体,并且所述第十二函数为所述所述客户机支持的函数。
[0059]结合第二方面或第二方面的第一种可能的实施方式或第二方面的第二种可能的实施方式或第二方面的第三种可能的实施方式或第二方面的第四种可能的实施方式或第二方面的第五种可能的实施方式,在第二方面的第六种可能的实施方式中,当所述第二函数包括以第一结构体指针作为传入参数调用第十三函数的调用指令,
[0060]所述翻译单元还用于:所述宿主机将所述以第一结构体指针作为传入参数调用第十三函数的调用指令,翻译为,以第二结构体指针作为传入参数调用第十三函数的调用指令;其中,所述第一结构体指针指向第一结构体,所述第二结构体指针指向第二结构体,其中,所述第一结构体包含的域为所述第二结构体包含的域的子集;
[0061 ]其中,所述第一结构体为客户机支持的结构体,且所述第二结构体为宿主机支持的结构体,且所述第十三函数为所述宿主机支持的函数;
[0062]或者所述第一结构体为宿主机支持的结构体,并且所述第二结构体为客户机支持的结构体,且所述第十三函数为所述客户机支持的函数。
[0063]结合第二方面或第二方面的第一种可能的实施方式或第二方面的第二种可能的实施方式或第二方面的第三种可能的实施方式或第二方面的第四种可能的实施方式或第二方面的第五种可能的实施方式或第二方面的第六种可能的实施方式,在第二方面的第七种可能的实施方式中,
[0064]所述宿主机还包括:重定位单元,用于在对第三共享库中的第一函数进行翻译以得到第二函数之前,对所述第三共享库和所述宿主机的同名全局变量进行符号重定位。
[0065]结合第二方面的第七种可能的实施方式,在第二方面的第八种可能的实施方式中,所述重定位单元具体用于,若所述第三共享库包含的第一全局变量和所述宿主机的N个全局变量同名,将所述第一全局变量和所述N个全局变量之中最先加载的全局变量的地址,设定为所述N个全局变量和所述第一全局变量的公共地址;
[0066]或者,
[0067]所述重定位单元具体用于,在所述第二共享库中被加载之后,将所述第三共享库中的第一全局变量的地址,重定位为所述第二共享库中的第二全局变量的地址,其中,所述第一全局变量和所
当前第1页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1