CN105335203B - 共享库的二进制翻译执行方法和装置 - Google Patents
共享库的二进制翻译执行方法和装置 Download PDFInfo
- Publication number
- CN105335203B CN105335203B CN201410306773.2A CN201410306773A CN105335203B CN 105335203 B CN105335203 B CN 105335203B CN 201410306773 A CN201410306773 A CN 201410306773A CN 105335203 B CN105335203 B CN 105335203B
- Authority
- CN
- China
- Prior art keywords
- function
- mentioned
- host
- shared library
- supported
- 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.)
- Active
Links
Landscapes
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明实施例公开了共享库的二进制翻译执行方法和装置。其中,共享库的二进制翻译执行方法可包括:当上述第二共享库中的第一函数被调用时,上述宿主机执行上述第一函数以调用上述第一共享库中的翻译函数;上述宿主机利用上述调用的上述第一共享库中的翻译函数,对上述第三共享库中的函数接口与上述第一函数的函数接口相同的第二函数进行翻译,以得到上述宿主机支持的第三函数;其中,上述第三函数的函数接口和上述第二函数的函数接口相同;上述宿主机执行上述第三函数。本发明实施例提供的方案有利于减少翻译共享库时的相关代码翻译量,从而提高二进制翻译的执行效率,进而提升用户体验。
Description
技术领域
本发明涉及计算机技术领域,具体涉及一种共享库的二进制翻译执行方法和装置。
背景技术
计算机体系结构不断发展,适应不同需求的新处理器不断涌现。当一种新处理器产生时,软件资源的匮乏是阻碍其向前发展的一个重要因素。老牌通用处理器有着丰富的软件资源,但其二进制程序仅能够在本指令集体系结构平台上运行。在这种背景下,移植原有体系结构中可执行代码到新处理器的工作越来越重要,二进制翻译技术在这种情况下应运而生。
其中,二进制翻译(BT,Binary Translation)技术是一种重要的跨指令集体系结构(ISA Instruction Set Architecture)进行代码迁移的技术,通常BT技术在翻译源平台(也可称客户机(guest))的某共享库时,通常是以源平台支持的二进制形式的该共享库和依赖该共享库的主程序及该主程序依赖的其他所有共享库作为输入(即使目标平台上本来已有对应主程序),通过对输入信息翻译得到可以在目标平台(也称宿主机(host))运行的相应共享库和依赖该共享库的主程序及该主程序依赖的其他所有共享库。由于二进制翻译技术具有十分广泛应用,目前业内已经开始对其进行深入研究。
现有技术的二进制翻译系统通常是将客户机支持的共享库和依赖该共享库的主程序及该主程序依赖的其他所有共享库全部进行二进制翻译,以得到可在宿主机上运行的相应共享库和依赖该共享库的主程序及该主程序依赖的其他所有共享库,然而,这使得现有二进制翻译系统需翻译的代码量有些时候可能比较巨大,进而可能给二进制翻译系统带来很大工作负担,进而可能影响到用户体验。
发明内容
本发明实施例提供共享库的二进制翻译执行方法和装置,以期待能减少翻译共享库时的相关代码翻译量,从而提高二进制翻译的执行效率,进而提升用户体验。
本发明第一方面提供一种共享库的二进制翻译执行方法,所述方法应用于宿主机,所述宿主机中包括所述宿主机支持的第一共享库、所述宿主机支持的第二共享库和客户机支持的第三共享库,所述第一共享库包括翻译函数,所述宿主机和所述客户机支持不同的指令集体系架构,
所述方法包括:
当所述第二共享库中的第一函数被调用时,所述宿主机执行所述第一函数以调用所述第一共享库中的翻译函数;
所述宿主机利用所述调用的所述第一共享库中的翻译函数,对所述第三共享库中的函数接口与所述第一函数的函数接口相同的第二函数进行翻译,以得到所述宿主机支持的第三函数;其中,所述第三函数的函数接口和所述第二函数的函数接口相同;
所述宿主机执行所述第三函数。
结合第一方面,在第一方面的第一种可能的实施方式中,所述宿主机中还包括所述宿主机支持的第五共享库;若所述第二函数包括调用所述客户机支持的第四共享库中的第四函数的指令,对所述第二函数进行翻译的步骤,还包括:
所述宿主机将所述第二函数包括的调用所述第四共享库中的第四函数的指令,翻译成调用所述第五共享库中的第五函数的指令,其中,所述第四函数和所述第五函数的函数功能相同,或者,所述第四函数和所述第五函数的函数功能和函数接口均相同。
结合第一方面,在第一方面的第二种可能的实施方式中,所述宿主机中还包括所述宿主机支持的第五共享库,当所述第三函数调用所述客户机支持的第四共享库中的第四函数时,所述方法还包括:
所述宿主机将所述第三函数包括的调用所述客户机支持的第四共享库中的第四函数的指令,翻译成所述第三函数调用所述第五共享库中第五函数的指令;其中,所述第四函数和所述第五函数的函数功能相同,或者,所述第四函数和所述第五函数的函数功能和函数接口均相同。
结合第一方面或第一方面的第一种可能的实施方式或第一方面的第二种可能的实施方式,在第一方面的第三种可能的实施方式中,
所述宿主机中还包括所述宿主机支持的第二主程序,若所述第二函数包括调用所述客户机支持的第一主程序中的第六函数的指令,对所述第二函数进行翻译的步骤,还包括:
所述宿主机将所述第二函数包括的所述调用所述客户机支持的第一主程序中的第六函数的指令,翻译成调用所述第二主程序中的第七函数的指令,其中,所述第六函数和所述第七函数的函数功能相同,或者,所述第六函数和所述第七函数的函数功能和函数接口均相同。
结合第一方面或第一方面的第一种可能的实施方式或第一方面的第二种可能的实施方式,在第一方面的第四种可能的实施方式中,所述宿主机中还包括所述宿主机支持的第二主程序,当所述第三函数调用所述客户机支持的第一主程序中的第六函数时,所述方法还包括:
所述宿主机将所述第三函数包括的调用所述客户机支持的第一主程序中的第六函数的指令,翻译成所述第三函数调用所述第二主程序中的第七函数的调用,其中,所述第六函数和所述第七函数的函数功能相同,或者,所述第六函数和所述第七函数的函数功能和函数接口均相同。
结合第一方面或第一方面的第一种可能的实施方式或第一方面的第二种可能的实施方式或第一方面的第三种可能的实施方式或第一方面的第四种可能的实施方式,在第一方面的第五种可能的实施方式中,当所述第二函数包括以所述客户机支持的第十函数的函数指针作为传入参数,以调用所述宿主机支持的第八函数的调用指令,对所述第二函数进行翻译的步骤,还包括:所述宿主机将所述以所述客户机支持的第十函数的函数指针作为传入参数,以调用所述宿主机支持的第八函数的调用指令,替换为,以所述宿主机支持的第九函数的函数指针作为传入参数,以调用所述宿主机支持的第八函数的调用指令;
其中,当所述第九函数被调用时,所述宿主机执行所述第九函数以调用所述第一共享库中的翻译函数对所述第十函数进行翻译,得到所述宿主机支持的第十一函数,所述宿主机执行所述第十一函数。
结合第一方面或第一方面的第一种可能的实施方式或第一方面的第二种可能的实施方式或第一方面的第三种可能的实施方式或第一方面的第四种可能的实施方式或第一方面的第五种可能的实施方式,在第一方面的第六种可能的实施方式中,当所述第二函数包括以第一结构体作为传入参数调用第十二函数的调用指令,对所述第二函数进行翻译的步骤,还包括:
所述宿主机将所述以第一结构体作为传入参数调用第十二函数的调用指令翻译为,以第二结构体作为传入参数调用第十二函数的调用指令,所述第一结构体包含的域为所述第二结构体包含的域的子集;
其中,所述第一结构体为所述客户机支持的结构体,且所述第二结构体为所述宿主机支持的结构体,且所述第十二函数为所述宿主机支持的函数;
或者,所述第一结构体为所述宿主机支持的结构体,并且所述第二结构体为所述客户机支持的结构体,并且所述第十二函数为所述所述客户机支持的函数。
结合第一方面或第一方面的第一种可能的实施方式或第一方面的第二种可能的实施方式或第一方面的第三种可能的实施方式或第一方面的第四种可能的实施方式或第一方面的第五种可能的实施方式或第一方面的第六种可能的实施方式,在第一方面的第七种可能的实施方式中,
当所述第二函数包括以第一结构体指针作为传入参数调用第十三函数的调用指令,对所述第二函数进行翻译的步骤,还包括:所述宿主机将所述以第一结构体指针作为传入参数调用第十三函数的调用指令,翻译为,以第二结构体指针作为传入参数调用第十三函数的调用指令;
其中,所述第一结构体指针指向第一结构体,所述第二结构体指针指向第二结构体,所述第一结构体包含的域为所述第二结构体包含的域的子集;
其中,所述第一结构体为客户机支持的结构体,且所述第二结构体为宿主机支持的结构体,且所述第十三函数为所述宿主机支持的函数;或者所述第一结构体为宿主机支持的结构体,并且所述第二结构体为客户机支持的结构体,且所述第十三函数为所述客户机支持的函数。
结合第一方面或第一方面的第一种可能的实施方式或第一方面的第二种可能的实施方式或第一方面的第三种可能的实施方式或第一方面的第四种可能的实施方式或第一方面的第五种可能的实施方式或第一方面的第六种可能的实施方式或第一方面的第七种可能的实施方式,在第一方面的第八种可能的实施方式中,
当所述第二函数的传入参数包括第三结构体,所述方法还包括:所述宿主机将作为所述第二函数的传入参数的第三结构体替换为第四结构体,所述第三结构体包含的域为所述第四结构体包含的域的子集;
其中,所述第四结构体为客户机支持的结构体,且所述第三结构体为宿主机支持的结构体。
结合第一方面或第一方面的第一种可能的实施方式或第一方面的第二种可能的实施方式或第一方面的第三种可能的实施方式或第一方面的第四种可能的实施方式或第一方面的第五种可能的实施方式或第一方面的第六种可能的实施方式或第一方面的第七种可能的实施方式,在第一方面的第九种可能的实施方式中,
当所述第二函数的传入参数包括第三结构体指针,所述方法还包括:所述宿主机将作为所述第二函数的传入参数的所述第三结构体指针替换为第四结构体指针,所述第四结构体指针指向第四结构体,所述第三结构体指针指向第三结构体,所述第三结构体包含的域为所述第四结构体包含的域的子集;
其中,所述第四结构体为客户机支持的结构体,且所述第三结构体为宿主机支持的结构体。
结合第一方面或第一方面的第一种可能的实施方式或第一方面的第二种可能的实施方式或第一方面的第三种可能的实施方式或第一方面的第四种可能的实施方式或第一方面的第五种可能的实施方式或第一方面的第六种可能的实施方式或第一方面的第七种可能的实施方式或第一方面的第八种可能的实施方式或第一方面的第九种可能的实施方式,在第一方面的第十种可能的实施方式中,
所述对第三共享库中的第一函数进行翻译以得到第二函数之前,所述方法还包括:所述宿主机对所述第三共享库和所述宿主机的同名全局变量进行符号重定位。
结合第一方面的第十种可能的实施方式,在第一方面的第十一种可能的实施方式中,所述宿主机对所述第三共享库和所述宿主机的同名全局变量进行符号重定位包括:若所述第三共享库包含的第一全局变量和所述宿主机的N个全局变量同名,所述宿主机将所述第一全局变量和所述N个全局变量之中最先加载的全局变量的地址,设定为所述N个全局变量和所述第一全局变量的公共地址。
结合第一方面的第十种可能的实施方式,在第一方面的第十二种可能的实施方式中,所述宿主机对所述第三共享库和所述宿主机的同名全局变量进行符号重定位包括:在所述第二共享库中被加载之后,所述宿主机将所述第三共享库中的第一全局变量的地址,重定位为所述第二共享库中的第二全局变量的地址,其中,所述第一全局变量和所述第二全局变量的声明相同。
本发明第二方面提供一种宿主机,所述宿主机包括:
存储单元,用于存储所述宿主机支持的第一共享库、所述宿主机支持的第二共享库和客户机支持的第三共享库,所述第一共享库包括翻译函数,所述宿主机和所述客户机支持不同的指令集体系架构;
调用单元,用于当所述第二共享库中的第一函数被调用时,执行所述第一函数以调用所述第一共享库中的翻译函数;
翻译单元,用于利用所述调用的第一共享库中的翻译函数,对所述第三共享库中的函数接口与所述第一函数的函数接口相同的第二函数进行翻译,以得到所述宿主机支持的第三函数;其中,所述第三函数的函数接口和所述第二函数的函数接口相同;
执行单元,用于执行所述第三函数。
结合第二方面,在第二方面的第一种可能的实施方式中,所述存储单元还用于存储所述宿主机支持的第五共享库;其中,若所述第二函数包括调用所述客户机支持的第四共享库中的第四函数的指令;
所述翻译单元还用于:
将所述第二函数包括的调用所述第四共享库中的第四函数的指令,翻译成调用所述第五共享库中的第五函数的指令,其中,所述第四函数和所述第五函数的函数功能相同,或者,所述第四函数和所述第五函数的函数功能和函数接口均相同。
结合第二方面,在第二方面的第二种可能的实施方式中,所述存储单元还用于存储所述宿主机支持的第五共享库,当所述第三函数调用所述客户机支持的第四共享库中的第四函数时,所述翻译单元还用于:
将所述第三函数包括的调用所述客户机支持的第四共享库中的第四函数的指令,翻译成所述第三函数调用所述第五共享库中第五函数的指令;所述第四函数和所述第五函数的函数功能相同,或者,所述第四函数和所述第五函数的函数功能和函数接口均相同。
结合第二方面或第二方面的第一种可能的实施方式或第二方面的第二种可能的实施方式,在第二方面的第三种可能的实施方式中,所述存储单元还用于存储所述宿主机支持的第二主程序,若所述第二函数包括调用所述客户机支持的第一主程序中的第六函数的指令,所述翻译单元还用于:
将所述第二函数包括的所述调用所述客户机支持的第一主程序中的第六函数的指令,翻译成调用所述第二主程序中的第七函数的指令,其中,所述第六函数和所述第七函数的函数功能相同,或者,所述第六函数和所述第七函数的函数功能和函数接口均相同。
结合第二方面或第二方面的第一种可能的实施方式或第二方面的第二种可能的实施方式,在第二方面的第四种可能的实施方式中,所述存储单元还用于存储所述宿主机支持的第二主程序,当所述第三函数调用所述客户机支持的第一主程序中的第六函数时,所述翻译单元还用于:
将所述第三函数包括的调用所述客户机支持的第一主程序中的第六函数的指令,翻译成所述第三函数调用所述第二主程序中的第七函数的调用,所述第六函数和所述第七函数的函数功能相同,或者,所述第六函数和所述第七函数的函数功能和函数接口均相同。
可选的,当所述第二函数包括以所述客户机支持的第十函数的函数指针作为传入参数,以调用所述宿主机支持的第八函数的调用指令,所述翻译单元还用于:
将所述以所述客户机支持的第十函数的函数指针作为传入参数,以调用所述宿主机支持的第八函数的调用指令,替换为以所述宿主机支持的第九函数的函数指针作为传入参数,以调用所述宿主机支持的第八函数的调用指令;当所述第九函数被调用时,执行所述第九函数以调用所述第一共享库中的翻译函数对所述第十函数进行翻译,得到所述宿主机支持的第十一函数。
结合第二方面或第二方面的第一种可能的实施方式或第二方面的第二种可能的实施方式或第二方面的第三种可能的实施方式或第二方面的第四种可能的实施方式,在第二方面的第五种可能的实施方式中,当所述第二函数包括以第一结构体作为传入参数调用第十二函数的调用指令,所述翻译单元还用于将所述以第一结构体作为传入参数调用第十二函数的调用指令,翻译为,以第二结构体作为传入参数调用第十二函数的调用指令,其中,所述第一结构体包含的域为所述第二结构体包含的域的子集;
其中,所述第一结构体为所述客户机支持的结构体,且所述第二结构体为所述宿主机支持的结构体,且所述第十二函数为所述宿主机支持的函数;
或者,所述第一结构体为所述宿主机支持的结构体,并且所述第二结构体为所述客户机支持的结构体,并且所述第十二函数为所述所述客户机支持的函数。
结合第二方面或第二方面的第一种可能的实施方式或第二方面的第二种可能的实施方式或第二方面的第三种可能的实施方式或第二方面的第四种可能的实施方式或第二方面的第五种可能的实施方式,在第二方面的第六种可能的实施方式中,当所述第二函数包括以第一结构体指针作为传入参数调用第十三函数的调用指令,
所述翻译单元还用于:所述宿主机将所述以第一结构体指针作为传入参数调用第十三函数的调用指令,翻译为,以第二结构体指针作为传入参数调用第十三函数的调用指令;其中,所述第一结构体指针指向第一结构体,所述第二结构体指针指向第二结构体,其中,所述第一结构体包含的域为所述第二结构体包含的域的子集;
其中,所述第一结构体为客户机支持的结构体,且所述第二结构体为宿主机支持的结构体,且所述第十三函数为所述宿主机支持的函数;
或者所述第一结构体为宿主机支持的结构体,并且所述第二结构体为客户机支持的结构体,且所述第十三函数为所述客户机支持的函数。
结合第二方面或第二方面的第一种可能的实施方式或第二方面的第二种可能的实施方式或第二方面的第三种可能的实施方式或第二方面的第四种可能的实施方式或第二方面的第五种可能的实施方式或第二方面的第六种可能的实施方式,在第二方面的第七种可能的实施方式中,
所述宿主机还包括:重定位单元,用于在对第三共享库中的第一函数进行翻译以得到第二函数之前,对所述第三共享库和所述宿主机的同名全局变量进行符号重定位。
结合第二方面的第七种可能的实施方式,在第二方面的第八种可能的实施方式中,所述重定位单元具体用于,若所述第三共享库包含的第一全局变量和所述宿主机的N个全局变量同名,将所述第一全局变量和所述N个全局变量之中最先加载的全局变量的地址,设定为所述N个全局变量和所述第一全局变量的公共地址;
或者,
所述重定位单元具体用于,在所述第二共享库中被加载之后,将所述第三共享库中的第一全局变量的地址,重定位为所述第二共享库中的第二全局变量的地址,其中,所述第一全局变量和所述第二全局变量的声明相同。
可以看出,本发明实施例方案中,引入的宿主机支持的第二共享库,可看成是客户机支持的第三共享库的一个伪共享库,因为,所述第二共享库中的第一函数和所述第三共享库中的第二函数的函数接口相同,所述第二共享库中的第一函数主要是用来触发调用第一共享库是来翻译第三共享库中的具有相同函数接口的函数,而这就可使得宿主机上的主程序或其他共享库,可以第二共享库为桥梁,通过调用第二共享库中的某函数,来间接的调用被第一共享库中的翻译函数所翻译的第三共享库中的具有相同函数接口的另一函数,由于第二共享库是宿主机支持的,因此,宿主机上的主程序或其他共享库能够识别和直接调用第二共享库中的函数,这样可实现即使不对客户机上依赖第三共享库的主程序或其他依赖的共享库进行翻译,也可对客户机上的第三共享库间接调用执行,这样就极大的降低了第三共享库与客户机的支持主程序(或其他相关共享库)之间的强依赖性,这有利于极大减少翻译代码量,从而可提高二进制翻译执行的效率,进而提升用户体验。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明的一个实施例提供的一种共享库的二进制翻译执行方法的流程示意图;
图2是本发明的另一个实施例提供的另一种共享库的二进制翻译执行方法的流程示意图;
图3-a是本发明实施例提供的一种x86客户机运行浏览器的架构示意图;
图3-b是本发明实施例提供的一种龙芯宿主机运行浏览器的架构示意图;
图3-c是本发明实施例提供的龙芯宿主机引入二进制翻译器之后的一种常规架构示意图;
图3-d是本发明实施例提供的龙芯宿主机引入二进制翻译器之后的一种新架构示意图;
图3-e是本发明实施例提供的一种代码翻译的示意图;
图3-f是本发明实施例提供的另一种涉及函数指针的代码翻译的示意图;
图4是本发明实施例提供的一种宿主机的示意图;
图5是本发明实施例提供的另一种宿主机的示意图;
图6是本发明实施例提供的另一种宿主机的示意图;
图7是本发明实施例提供的一种通信系统的示意图。
具体实施方式
本发明实施例提供共享库的二进制翻译执行方法和装置,以期待能减少翻译共享库时的相关代码翻译量,从而提高二进制翻译的执行效率,进而提升用户体验。
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
以下分别进行详细说明。
本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”和“第四”等是用于区别不同的对象,而非用于描述特定顺序。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。
本发明共享库的二进制翻译执行方法的一个实施例,一种共享库的二进制翻译执行方法所应用于宿主机,上述宿主机中可包括上述宿主机支持的第一共享库、上述宿主机支持的第二共享库和客户机支持的第三共享库,该第一共享库包括翻译函数,上述宿主机和上述客户机支持不同的指令集体系架构,上述方法包括:当上述第二共享库中的第一函数被调用时,上述宿主机执行上述第一函数以调用上述第一共享库中的翻译函数;上述宿主机利用上述调用的上述第一共享库中的翻译函数,对上述第三共享库中的函数接口与上述第一函数的函数接口相同的第二函数进行翻译,以得到上述宿主机支持的第三函数;上述第三函数的函数接口和上述第二函数的函数接口相同;上述宿主机执行上述第三函数。
参见图1,图1为本发明的一个实施例提供的一种共享库的二进制翻译执行的流程示意图。如图1所示,本发明的一个实施例提供的一种共享库的二进制翻译执行方法可包括以下内容:
101、当上述第二共享库中的第一函数被调用(其中,第二共享库中的第一函数可能被主程序调用,当然第二共享库中的第一函数也可能被第二共享库或其他共享库中的函数调用)时,上述宿主机执行上述第一函数以调用上述第一共享库中的翻译函数。
其中,宿主机中可包括上述宿主机支持的第一共享库、上述宿主机支持的第二共享库和客户机支持的第三共享库,其中,上述宿主机和上述客户机支持不同的指令集体系架构。
102、上述宿主机利用上述调用的上述第一共享库中的翻译函数,对上述第三共享库中的,函数接口与上述第一函数的函数接口相同的第二函数进行翻译,以得到上述宿主机支持的第三函数。其中,上述第三函数的函数接口和上述第二函数的函数接口相同。
可以理解,上述第二共享库中的上述第一函数例如可为第二共享库中的任意一个函数,或者,上述第二共享库中的上述第一函数也可为第二共享库中的某个特定的函数。
103、执行上述第三函数。
可以理解的是,对上述第二函数进行翻译的步骤,和执行上述第三函数的步骤之间并没有必然的执行先后顺序。其中,在一些可能的实施方式中,可能是先执行对上述第二函数进行翻译的步骤,而后执行上述执行上述第三函数的步骤,而在另一些可能的实施方式中,也可能是一边执行对上述第二函数进行翻译的步骤,一边执行上述执行上述第三函数的步骤,也就是说,执行上述第三函数和对上述第二函数进行翻译有可能是交错执行的。
可以看出,本发明实施例方案中,引入的宿主机支持的第二共享库,可看成是客户机支持的第三共享库的一个伪共享库,因为,所述第二共享库中的第一函数和所述第三共享库中的第二函数的函数接口相同,所述第二共享库中的第一函数主要是用来触发调用第一共享库是来翻译第三共享库中的具有相同函数接口的函数,而这就可使得宿主机上的主程序或其他共享库,可以第二共享库为桥梁,通过调用第二共享库中的某函数,来间接的调用被第一共享库中的翻译函数所翻译的第三共享库中的具有相同函数接口的另一函数,由于第二共享库是宿主机支持的,因此,宿主机上的主程序或其他共享库能够识别和直接调用第二共享库中的函数,这样可实现即使不对客户机上依赖第三共享库的主程序或其他依赖的共享库进行翻译,也可对客户机上的第三共享库间接调用执行,这样就极大的降低了第三共享库与客户机的支持主程序(或其他相关共享库)之间的强依赖性,这有利于极大减少翻译代码量,从而可提高二进制翻译执行的效率,进而提升用户体验。
进一步的,由于第一共享库是包含翻译函数,即将二进制翻译器编译成第一共享库,在需调用客户机支持的第三共享库中的函数时,第一共享库才对被调用的相关函数进行动态翻译,这样有利于提高翻译的针对性和有效性,有利于减少无效翻译工作量,进而有利于进一步减少翻译代码量,从而进一步提高二进制翻译的执行效率,进而进一步提升用户体验。
其中,对上述第二函数进行翻译可能涉及多方面,具体翻译方式也可能是多种多样,下面进行举例说明。
在本发明的一些可能的实施方式中,上述宿主机中还包括上述宿主机支持的第五共享库;若上述第二函数包括调用上述客户机支持的第四共享库中的第四函数的指令,其中,对上述第二函数进行翻译的步骤,还可包括:上述宿主机将上述第二函数包括的调用上述第四共享库中的第四函数的指令,翻译成调用上述第五共享库中的第五函数的指令,其中,上述第四函数和上述第五函数的函数功能相同,或者,上述第四函数和上述第五函数的函数功能和函数接口均相同。可以理解,上述宿主机将上述第二函数包括的调用上述第四共享库中的第四函数的指令,翻译成调用上述第五共享库中的第五函数的指令,本质上可看做是一种库函数包装技术,即将对客户机支持的某共享库中的某函数的调用,替换为对宿主机支持的某共享库中的函数功能相同或函数功能和函数接口均相同的函数的调用,这样有利于提高对宿主机的本地共享库的利用率,进一步减少对客户机相关共享库的函数代码的翻译,进而有利于进一步减少代码翻译量。
在本发明的另一些可能的实施方式中,上述宿主机中还可进一步包括上述宿主机支持的第五共享库,当上述第三函数调用上述客户机支持的第四共享库中的第四函数时,上述方法还可包括:上述宿主机将上述第三函数包括的调用上述客户机支持的第四共享库中的第四函数的指令,翻译成上述第三函数调用上述第五共享库中第五函数的指令;其中,上述第四函数和上述第五函数的函数功能和函数接口均相同,或者,上述第四函数和上述第五函数的函数功能相同。可以理解的是,上述宿主机将上述第三函数包括的调用上述第四共享库中的第四函数的指令,翻译成调用上述第五共享库中的第五函数的指令,本质上可看做是一种库函数包装技术,即,可将对客户机支持的某共享库中的某函数的调用,替换为对宿主机支持的某共享库中的函数功能相同或函数功能和函数接口均相同的函数的调用,这样有利于提高宿主机本地共享库的利用率,进一步减少对客户机相关共享库的函数代码的翻译,进而有利于进一步减少代码翻译量。
在本发明的一些可能的实施方式中,上述宿主机中还包括上述宿主机支持的第二主程序,若上述第二函数包括调用上述客户机支持的第一主程序中的第六函数的指令,对上述第二函数进行翻译的步骤,还可进一步包括:上述宿主机将上述第二函数包括的上述调用上述客户机支持的第一主程序中的第六函数的指令,翻译成调用上述第二主程序中的第七函数的指令,其中,上述第六函数和上述第七函数的函数功能相同,或者,上述第六函数和上述第七函数的函数功能和函数接口均相同。可以理解,将上述第二函数包括的上述调用上述客户机支持的第一主程序中的第六函数的指令,翻译成调用上述第二主程序中的第七函数的指令,本质上可看做是一种库函数包装技术,即将对客户机支持的主程序中的某函数的调用,替换为对宿主机支持的主程序中的函数功能相同或函数功能和函数接口均相同的函数的调用,这样有利于提高对宿主机的本地共享库的利用率,进一步减少对客户机相关共享库的函数代码的翻译,进而有利于进一步减少代码翻译量。
在本发明的另一些可能的实施方式中,上述宿主机中还包括上述宿主机支持的第二主程序,当上述第三函数调用上述客户机支持的第一主程序中的第六函数时,上述方法还包括:上述宿主机将上述第三函数包括的调用上述客户机支持的第一主程序中的第六函数的指令,翻译成上述第三函数调用上述第二主程序中的第七函数的调用,其中,上述第六函数和上述第七函数的函数功能相同,或者,上述第六函数和上述第七函数的函数功能和函数接口均相同。可以理解的是,将上述第三函数包括的上述调用上述客户机支持的第一主程序中的第六函数的指令,翻译成调用上述第二主程序中的第七函数的指令,本质上可看做是一种库函数包装技术,即,可以将对客户机支持的主程序中的某函数的调用,替换为对宿主机支持的主程序中的函数功能相同或函数功能和函数接口均相同的函数的调用,这样有利于提高对宿主机的本地共享库的利用率,进一步减少对客户机相关共享库的函数代码的翻译,进而有利于进一步减少代码翻译量。
在本发明的一些可能的实施方式中,当上述第二函数包括以上述客户机支持的第十函数的函数指针作为传入参数,以调用上述宿主机支持的第八函数的调用指令,对上述第二函数进行翻译的步骤,还可包括:上述宿主机将上述以上述客户机支持的第十函数的函数指针作为传入参数,以调用上述宿主机支持的第八函数的调用指令,替换为,以上述宿主机支持的第九函数的函数指针作为传入参数,以调用上述宿主机支持的第八函数的调用指令。其中,当上述第九函数被调用时,上述宿主机执行上述第九函数以调用上述第一共享库中的翻译函数对上述第十函数进行翻译,得到上述宿主机支持的第十一函数,上述宿主机执行上述第十一函数。可以理解,在上述存在函数指针的场景下,引入上述第九函数作为桥梁,有利于实现在较合适的时机对函数指针所指向的函数进行翻译,有利于尽量避免出现错误。
在本发明的一些可能的实施方式中,当上述第三年函数包括以上述宿主机支持的函数S01的函数指针作为传入参数,以调用上述宿主机支持的S02函数的调用指令,当上述函数S01被调用时,上述宿主机执行上述函数S01,宿主机不翻译上述函数S001。
在本发明的一些可能的实施方式中,当上述第二函数包括以第一结构体作为传入参数调用第十二函数的调用指令,对上述第二函数进行翻译的步骤还可以包括:上述宿主机将上述以第一结构体作为传入参数调用第十二函数的调用指令,翻译为,以第二结构体作为传入参数调用第十二函数的调用指令,上述第一结构体包含的域为上述第二结构体包含的域的子集。其中,上述第一结构体为上述客户机支持的结构体,并且上述第二结构体为上述宿主机支持的结构体,且上述第十二函数为上述宿主机支持的函数;或者上述第一结构体为上述宿主机支持的结构体,并且上述第二结构体为上述客户机支持的结构体,并且上述第十二函数为上述上述客户机支持的函数。例如,上述第一结构体包含的域与上述第二结构体包含的域可以相同。
在本发明的一些可能的实施方式中,当上述第二函数包括以第一结构体指针作为传入参数调用第十三函数的调用指令,对上述第二函数进行翻译的步骤还可包括:上述宿主机将上述以第一结构体指针作为传入参数调用第十三函数的调用指令,翻译为,以第二结构体指针作为传入参数调用第十三函数的调用指令。其中,上述第一结构体指针指向第一结构体,上述第二结构体指针指向第二结构体,上述第一结构体包含的域为上述第二结构体包含的域的子集。其中,上述第一结构体为客户机支持的结构体,且上述第二结构体为宿主机支持的结构体,且上述第十三函数为上述宿主机支持的函数。或者上述第一结构体为宿主机支持的结构体,并且上述第二结构体为客户机支持的结构体,且上述第十三函数为上述客户机支持的函数。例如,上述第一结构体包含的域与上述第二结构体包含的域可以相同。
在本发明的一些可能的实施方式中,当上述第二函数的传入参数包括第三结构体,上述方法还可进一步包括:上述宿主机将作为上述第二函数的传入参数的第三结构体替换为第四结构体,上述第三结构体包含的域为上述第四结构体包含的域的子集;其中,上述第四结构体为客户机支持的结构体,且上述第三结构体为宿主机支持的结构体。例如,上述第三结构体包含的域与上述第四结构体包含的域可以相同。
在本发明的一些可能的实施方式中,当上述第二函数的传入参数包括第三结构体指针,上述方法还可进一步包括:上述宿主机将作为上述第二函数的传入参数的上述第三结构体指针替换为第四结构体指针,上述第四结构体指针指向第四结构体,上述第三结构体指针指向第三结构体,上述第三结构体包含的域为上述第四结构体包含的域的子集。其中,上述第四结构体为客户机支持的结构体,且上述第三结构体为宿主机支持的结构体。例如,上述第三结构体包含的域与上述第四结构体包含的域可以相同。
其中,上述举例了一些翻译第二函数可能实施方式,以及翻译翻译第二函数还可能涉及与翻译相关的一些其他操作,当然在实际应用,还可能涉及其他的翻译操作,当然上述的翻译操作之间也可能相互进行嵌套,具体方式此处不再赘述。
此外,在本发明的一些可能的实施方式中,上述对第三共享库中的第一函数进行翻译以得到第二函数之前,上述方法还可包括:上述宿主机对上述第三共享库和上述宿主机的同名全局变量进行符号重定位。
举例来说,上述宿主机对上述第三共享库和上述宿主机的同名全局变量进行符号重定位包括:若上述第三共享库包含的第一全局变量和上述宿主机的N个全局变量同名,上述宿主机将上述第一全局变量和上述N个全局变量之中最先加载的全局变量的地址,设定为上述N个全局变量和上述第一全局变量的公共地址。
又例如,上述宿主机对上述第三共享库和上述宿主机的同名全局变量进行符号重定位包括:在上述第二共享库中被加载之后,上述宿主机将上述第三共享库中的第一全局变量的地址,重定位为上述第二共享库中的第二全局变量的地址,其中,上述第一全局变量和上述第二全局变量的声明相同。
可以理解的是,上述第一全局变量可为上述第三共享库包含的任意一个全局变量。或者,上述第一全局变量也可为上述第三共享库包含的某个特定的全局变量。
其中,本发明实施例的宿主机和客户机支持不同的指令集体系架构,例如宿主机和客户机可以分别支持如下指令集体系架构中的其中一种:POWER指令集体系架构、x86指令集体系架构、龙芯指令集体系架构和MIPS指令集体系架构。
为便于更好的理解和实施本发明实施例的上述技术方案,下面通过一些具体的应用场景进行举例说明。
下面举例中主要以客户机支持x86指令集体系架构,宿主机支持龙芯指令集体系架构为例。其中,在下面的举例描述中,支持x86指令集体系架构的客户机可以称之为x86客户机,支持龙芯指令集体系架构的宿主机可以称之为龙芯宿主机。
例如,假设龙芯宿主机上可以运行开源的火狐(Firefox)浏览器(浏览器可看做是主程序),但是浏览器中的flash播放插件(即flashplayer.so共享库)是由Adobe公司开发,假设flash播放插件不开源且只提供x86指令集体系架构下的版本,因此在龙芯宿主机的Firefox浏览器内无法使用。
为简化描述,下面可将龙芯宿主机支持的浏览器称之为龙芯浏览器,龙芯宿主机支持的共享库称之为龙芯共享库。类似的,可将x86客户机支持的浏览器称之为x86浏览器,可将x86客户机支持的共享库称之为x86共享库。
参见图3-a,图3-a示出了x86客户机运行x86浏览器的一种软件架构。x86浏览器可能调用各种x86共享库(包括flash播放插件)里的函数;flash播放插件也可能会调用其它x86共享库里的函数;flash播放插件还可能会调用x86浏览器里的函数。
其中,在x86客户机上,这些程序是齐全的。在龙芯宿主机上,龙芯浏览器和其它的x86共享库都可用开源代码编译生成,但龙芯宿主机缺少flash播放插件这个共享库,具体如图3-b举例所示。
现有的二进制翻译方案中,二进制翻译器作为龙芯宿主机的主程序,其架构具体可例如图3-c所示,二进制翻译器不仅需翻译运行x86客户机的flash播放插件,还需要翻译运行x86浏览器和其他x86共享库,因此,由于需要翻译各x86共享库和x86浏览器,这使得翻译代码量较大,影响了翻译运行效率。
在本发明一些实施例的技术方案中,二进制翻译器被编译成龙芯宿主机上的第一共享库bt.so(上述实施例中的第一共享库的一种举例实现),第一共享库bt.so可被龙芯浏览器调用,而x86客户机的flash播放插件被第一共享库bt.so翻译后运行,架构如图3-d所示。由于需翻译运行的x86代码大大减少,有利于极大提高翻译运行效率。
参见图2,图2为本发明的另一个实施例提供的另一种共享库的二进制翻译执行的流程示意图。如图2所示,本发明的另一个实施例提供的另一种共享库的二进制翻译执行方法可包括以下内容:
201、龙芯宿主机将二进制翻译器编译成第一共享库bt.so。
202、龙芯宿主机将伪flash播放插件flashplayer_ls.so(该伪flash播放插件flashplayer_ls.so可看做是上述实施例中的第二共享库的一种举例实现)加载到龙芯浏览器。
其中,伪flash播放插件flashplayer_ls.so提供的函数接口和x86flash播放插件flashplayer_x86.so(其中,x86flash播放插件flashplayer_x86.so可看做是上述实施例中第三共享库的一种举例实现)提供的函数接口相同。其中,可通过解析x86flash播放插件的二进制文件,从其符号表中寻找全局函数符号,这些全局函数符号即为x86flash播放插件的函数接口,而x86flash播放插件的函数接口作为伪flash播放插件提供的函数接口。
当然,龙芯宿主机还可加载第一共享库bt.so,还可通过第一共享库bt.so来初始化x86运行环境(例如模拟的x86寄存器、内存等)、以及翻译后的龙芯代码缓冲区等。
203、当伪flash播放插件flashplayer_ls.so之中的第一函数被龙芯浏览器调用时,龙芯宿主机执行伪flash播放插件flashplayer_ls.so之中的第一函数,以调用第一共享库bt.so中的翻译函数x86_exec,对x86flash播放插件flashplayer_x86.so中的函数接口与第一函数的函数接口相同的第二函数(如NPP_New函数)进行翻译以得到第三函数,执行第三函数。
参见图3-e,其中,图3-e举例示出了x86flash播放插件flashplayer_x86.so中的第二函数(图3-e中举例为NPP_New函数),以及对其进行翻译后得到的龙芯宿主机支持的第三函数。
在本发明一些可能的实施方式中,上述龙芯宿主机中还包括上述龙芯宿主机支持的第五共享库;若上述第二函数包括调用上述x86客户机支持的第四共享库(如libc.so)中的第四函数(如malloc函数)的指令,其中,对上述第二函数进行翻译的步骤,还可包括:龙芯宿主机将上述第二函数包括的调用上述第四共享库(如libc.so)中的第四函数(如malloc函数)的指令,翻译成调用上述第五共享库中的第五函数的指令,其中,上述第四函数和上述第五函数的函数功能和函数接口均相同。可以理解,龙芯宿主机将上述第二函数包括的调用上述第四共享库中的第四函数的指令,翻译成调用上述第五共享库中的第五函数的指令,本质上可看做是一种库函数包装技术,即将对x86客户机支持的某共享库中的某函数的调用,替换为对龙芯宿主机支持的某共享库中的函数功能相同或函数功能和函数接口均相同的函数的调用,这样有利于提高对龙芯宿主机的本地共享库的利用率,进一步减少对x86客户机相关共享库的函数代码的翻译,进而有利于进一步减少代码翻译量。
在本发明另一些可能的实施方式中,上述龙芯宿主机中还包括上述龙芯宿主机支持的第五共享库,当上述第三函数调用上述x86客户机支持的第四共享库(例如libc.so)中的第四函数(例如malloc函数)时,上述龙芯宿主机可将上述第三函数包括的调用上述x86客户机支持的第四共享库(如libc.so中的第四函数(例如malloc函数)的指令,翻译成上述第三函数调用上述第五共享库中第五函数的指令;其中上述第四函数和上述第五函数的函数功能和函数接口均相同,或者上述第四函数和上述第五函数的函数功能相同。可以理解,上述龙芯宿主机将所第三函数包括的调用上述第四共享库中的第四函数的指令,翻译成调用上述第五共享库中的第五函数的指令,本质上可看做是一种库函数包装技术,即,可以将对x86客户机支持的某共享库中的某函数的调用,替换为对龙芯宿主机支持的某共享库中的函数功能相同或函数功能和函数接口均相同的函数的调用,这样有利于提高对龙芯宿主机本地共享库的利用率,进一步减少对x86客户机相关共享库的函数代码的翻译,进而有利于进一步减少代码翻译量。
在本发明一些可能的实施方式中,上述龙芯宿主机中还包括上述龙芯宿主机支持的龙芯浏览器,若第二函数包括调用x86浏览器中的第六函数(如NPN_PostURL函数)的指令,对第二函数进行翻译的步骤,还可包括:上述龙芯宿主机将上述第二函数包括的上述调用上述x86客户机支持的x86浏览器中的第六函数(如NPN_PostURL函数)的指令,翻译成调用龙芯浏览器中的第七函数(如NPN_PostURL函数)的指令,其中,上述第六函数和上述第七函数的函数功能和函数接口均相同。可以理解,将上述第二函数包括的上述调用上述x86客户机支持的x86浏览器中的第六函数的指令,翻译成调用龙芯浏览器中的第七函数的指令,本质上可看做是一种库函数包装技术,即将对x86客户机支持的x86浏览器中的某函数的调用,替换为对龙芯宿主机支持的龙芯浏览器中的函数功能和函数接口均相同函数的调用,这样有利于提高对龙芯宿主机的本地共享库利用率,进一步减少对x86客户机相关共享库的函数代码的翻译,进而有利于进一步减少代码翻译量。
在本发明的另一些可能的实施方式中,上述龙芯宿主机中还包括上述龙芯宿主机支持的龙芯浏览器,当上述第三函数调用上述x86客户机支持的x86浏览器中的第六函数(如NPN_PostURL函数)时,上述龙芯宿主机可将上述第三函数包括的调用上述x86客户机支持的x86浏览器中的第六函数的指令,翻译成上述第三函数调用上述龙芯浏览器中的第七函数(如NPN_PostURL函数)的调用,其中,上述第六函数和上述第七函数的函数功能相同,或者上述第六函数和上述第七函数的函数功能和函数接口均相同。可以理解的是,将上述第三函数包括的上述调用上述x86客户机支持的x86浏览器中的第六函数的指令,翻译成调用上述龙芯浏览器中的第七函数的指令,本质上可看做是一种库函数包装技术,即,可以将对x86客户机支持的主程序中的某函数的调用,替换为对龙芯宿主机支持的主程序中的函数功能相同或函数功能和函数接口均相同的函数的调用,这样有利于提高对龙芯宿主机的本地共享库的利用率,进一步减少对x86客户机相关共享库的函数代码的翻译,进而有利于进一步减少代码翻译量。
在本发明一些可能的实施方式中,龙芯宿主机在执行伪flash播放插件flashplayer_ls.so中的第一函数,以调用第一共享库bt.so中的翻译函数x86_exec对x86flash播放插件flashplayer_x86.so中的第二函数进行翻译以得到第三函数之前,龙芯宿主机可执行x86装载器(loader)或者第一共享库bt.so中的相关函数,以对上述x86flash播放插件flashplayer_x86.so和龙芯宿主机上的同名全局变量进行符号重定位。具体的,龙芯宿主机执行x86装载器完成初步符号重定位后,龙芯宿主机可执行第一共享库bt.so中的相关函数,以读取龙芯运行环境和x86运行环境中的全局变量列表,对两者共有全局变量,根据它们内存装载顺序(即浏览器、共享库和flash播放插件在同一运行环境里的装载顺序)重新进行符号重定位。经过这一过程,两个运行环境里的代码可正常访问同一个全局变量。
其中,对上述x86flash播放插件flashplayer_x86.so和龙芯宿主机的同名全局变量进行符号重定位的具体方式可能多种多样,下面进行举例说明。
举例来说,龙芯宿主机执行装载器(loader)或第一共享库bt.so中的相关函数以对上述x86flash播放插件flashplayer_x86.so和龙芯宿主机的同名全局变量进行符号重定位,可包括:若x86flash播放插件flashplayer_x86.so包含的第一全局变量和龙芯宿主机的N个全局变量同名,龙芯宿主机执行装载器或第一共享库bt.so的相关函数,以将上述第一全局变量和上述N个全局变量之中最先加载的全局变量的地址,设定为上述N个全局变量和上述第一全局变量的公共地址,上述N为正整数。
又例如,龙芯宿主机执行装载器或第一共享库bt.so中的相关函数以对上述x86flash播放插件flashplayer_x86.so和龙芯宿主机的同名全局变量进行符号重定位,可包括:在伪flash播放插件flashplayer_ls.so被加载之后,将上述x86flash播放插件flashplayer_x86.so的第一全局变量的地址,重定位为伪flash播放插件flashplayer_ls.so中的第二全局变量的地址。其中,上述第一全局变量和上述第二全局变量的声明相同。
可以理解,上述第一全局变量可为x86flash播放插件flashplayer_x86.so包含的任意一个全局变量。或者,上述第一全局变量也可为x86flash播放插件flashplayer_x86.so包含的某个特定的全局变量。其中,x86flash播放插件flashplayer_x86.so包含的每个全局变量的符号重定位方式,均可类似于第一全局变量的符号重定位方式。
此外,龙芯浏览器、龙芯共享库和x86flash播放插件flashplayer_x86.so之间可能会通过函数调用的传参和返回值方式来传递函数指针。例如x86flash播放插件flashplayer_x86.so中的函数A,有可能以函数指针x86_foo作为传入参数来调用龙芯图形共享库里的函数B;函数B将会使用该函数指针调用函数指针x86_foo所指向的函数。
例如,实际程序中的函数B可能是函数g_signal_connect,给控件(如按钮)注册点击事件,或gtk_timeout_add设定计时器等。
类似地,龙芯浏览器或龙芯共享库在调用x86flash播放插件flashplayer_x86.so中的函数时,也有可能会把龙芯函数指针(例如ls_bar)作为传入参数,传递给调用x86flash播放插件flashplayer_x86.so中的函数。
当x86客户机与龙芯宿主机的函数之间相互调用时,若传参涉及函数指针,则可对该函数指针进行一定的翻译处理,这样有利于保障函数运行的正确性。
第1类值转换:当上述第二函数包括以上述x86客户机支持的第十函数的函数指针(如x86函数指针x86_foo)作为传入参数,以调用龙芯宿主机支持的第八函数的调用指令,上述龙芯宿主机可执行第一共享库bt.so中的相关函数以生成第九函数(可看成是一种类伪库函数(如图3-f中的x86_foo”函数)),将上述以上述x86客户机支持的第十函数的函数指针作为传入参数,以调用上述龙芯宿主机支持的第八函数的调用指令,替换为,以上述龙芯宿主机支持的第九函数的函数指针作为传入参数,以调用上述龙芯宿主机支持的第八函数的调用指令。其中,当上述第九函数被调用时,上述龙芯宿主机执行上述第九函数以调用第一共享库bt.so中的翻译函数,对上述第十函数进行翻译,得到上述龙芯宿主机支持的第十一函数,龙芯宿主机执行上述第十一函数。可以理解,在存在函数指针的上述场景下,引入上述第九函数作为桥梁,有利于实现在较合适的时机对函数指针所指向的函数进行翻译,有利于尽量避免出现错误。其中替换的第二函数指针符合龙芯宿主机的应用程序二进制接口,能够被龙芯宿主机函数调用。
第2类值转换:若上述第二函数的传入参数包括第三函数指针,且上述第三函数指针为上述龙芯宿主机的函数指针(可根据函数指针的结构确定第三函数指针为上述龙芯宿主机的函数指针还是为上述x86客户机的函数指针),将上述第二函数对第三函数指针指向的第十一函数的调用,翻译成上述第三函数对上述第三函数指针指向的上述第十一函数的调用。
此外,同一结构体在x86客户机和龙芯宿主机上的定义可能不同,并且结构体为了满足其中各个域的数据对齐要求,可能在域和域之间增加空数据。这些情况都使得同一结构体在x86客户机和龙芯宿主机上的二进制格式不一定相同。当这些结构体作为传入参数传递给另一个运行环境来访问时,可能会访问到错误的结构体内位置,因此可能需要对传递的结构体进行翻译。
第3类值转换方式1:
在本发明的一些可能的实施方式中,当上述第二函数包括以第一结构体作为传入参数调用第十二函数的调用指令,上述龙芯宿主机可将上述以第一结构体作为传入参数调用第十二函数的调用指令,翻译为,以第二结构体作为传入参数调用第十二函数的调用指令,上述第一结构体包含的域为上述第二结构体包含的域的子集。其中,第一结构体为上述x86客户机支持的结构体,并且上述第二结构体为上述龙芯宿主机支持的结构体,且上述第十二函数为上述龙芯宿主机支持的函数;或者上述第一结构体为上述龙芯宿主机支持的结构体,并且上述第二结构体为上述x86客户机支持的结构体,并且上述第十二函数为上述上述x86客户机支持的函数。例如上述第一结构体包含的域与上述第二结构体包含的域可以相同。
第3类值转换方式2:
在本发明的一些可能的实施方式中,当上述第二函数包括以第一结构体指针作为传入参数调用第十三函数的调用指令,对上述第二函数进行翻译的步骤还可包括:上述龙芯宿主机将上述以第一结构体指针作为传入参数调用第十三函数的调用指令,翻译为,以第二结构体指针作为传入参数调用第十三函数的调用指令。其中,上述第一结构体指针指向第一结构体,第二结构体指针指向第二结构体,上述第一结构体包含的域为上述第二结构体包含的域的子集。其中,上述第一结构体为x86客户机支持的结构体,且上述第二结构体为龙芯宿主机支持的结构体,且上述第十三函数为上述龙芯宿主机支持的函数。或者上述第一结构体为龙芯宿主机支持的结构体,并且上述第二结构体为x86客户机支持的结构体,且上述第十三函数为上述x86客户机支持的函数。例如,上述第一结构体包含的域与上述第二结构体包含的域可以相同。
其中,如果第一结构体中的某域也是结构体,则可对该域也做第3类值转换方式1。如果第一结构体中的某域也是结构体指针,则可对该域也做第3类值转换方式2。其中,如果第一结构体中的某域为函数指针,则可对该域做第1类值转换。以此类推。
第4类值转换方式1:
当上述第二函数的传入参数包括第三结构体,上述龙芯宿主机可将作为上述第二函数的传入参数的第三结构体替换为第四结构体,上述第三结构体包含的域为上述第四结构体包含的域的子集;其中,上述第四结构体为x86客户机支持的结构体,且上述第三结构体为龙芯宿主机支持的结构体。例如,上述第三结构体包含的域与上述第四结构体包含的域可以相同。
第4类值转换方式2:
当上述第二函数的传入参数包括第三结构体指针,龙芯宿主机可将作为上述第二函数的传入参数的上述第三结构体指针替换为第四结构体指针,上述第四结构体指针指向第四结构体,上述第三结构体指针指向第三结构体,上述第三结构体包含的域为上述第四结构体包含的域的子集。其中,上述第四结构体为x86客户机支持的结构体,且上述第三结构体为龙芯宿主机支持的结构体。例如,上述第三结构体包含的域与上述第四结构体包含的域可以相同。。
其中,如果第三结构体中的某域也是结构体,则可对该域也做第4类值转换方式1。如果第三结构体中的某域也是结构体指针,则可对该域也做第4类值转换方式2。其中,如果第三结构体中的某域为函数指针,则可对该域做第2类值转换。以此类推。
可以看出,本实施例方案中,引入的龙芯宿主机支持的第二共享库(伪flash播放插件flashplayer_ls.so),可看成是x86客户机支持的第三共享库(x86flash播放插件)的一个伪共享库,因为,上述第二共享库中的第一函数和上述第三共享库中的第二函数的函数接口相同(就是说,第二共享库提供的函数接口与上述第三共享库提供的函数接口之间存在非空交集),上述第二共享库中的第一函数主要是用来触发调用第一共享库是来翻译第三共享库中的具有相同函数接口的函数,而这就可使得龙芯宿主机上的主程序或其他共享库,可以第二共享库为桥梁,通过调用第二共享库中的某函数,来间接的调用被第一共享库中的翻译函数所翻译的第三共享库中的具有相同函数接口的另一函数,由于第二共享库是龙芯宿主机支持的,因此,龙芯宿主机上的主程序或其他共享库能够识别和直接调用第二共享库中的函数,这样可实现即使不对x86客户机上依赖第三共享库的主程序或其他依赖的共享库进行翻译,也可对x86客户机上的第三共享库间接调用执行,这样就极大的降低了第三共享库与x86客户机的支持主程序(或其他相关共享库)之间的强依赖性,这有利于极大减少翻译代码量,从而可提高二进制翻译执行的效率,进而提升用户体验。。
进一步的,由于第一共享库是将二进制翻译器编译得到的,在需调用x86客户机支持的第三共享库中的函数时,第一共享库才对被调用的相关函数进行动态翻译,这样有利于提高翻译的针对性和有效性,进而有利于减少无效翻译工作量,进而有利于进一步减少翻译代码量,从而进一步提高二进制翻译的执行效率,进而进一步提升用户体验。
可以理解,上述举例中主要是以客户机支持x86指令集体系架构,支持龙芯指令集体系架构来举例说明的。而宿主机支持x86指令集体系架构或其他指令集体系架构,客户机支持龙芯指令集体系架构或其他指令集体系架构等场景下得实施方式可类似参考,此处不再赘述。
下面还提供用于实施上述方案的相关装置。
参见图4,本发明实施例提供一种宿主机400可包括:存储单元410、调用单元420、翻译单元430和执行单元440。
存储单元410,用于存储上述宿主机支持的第一共享库、上述宿主机支持的第二共享库和客户机支持的第三共享库,上述第一共享库包括翻译函数,上述宿主机和上述客户机支持不同的指令集体系架构。
调用单元420,用于当上述第二共享库中的第一函数被调用时,执行上述第一函数以调用上述第一共享库中的翻译函数。
翻译单元430,用于利用上述调用的第一共享库中的翻译函数,对上述第三共享库中的函数接口与上述第一函数的函数接口相同的第二函数进行翻译,以得到上述宿主机支持的第三函数;其中,上述第三函数的函数接口和上述第二函数的函数接口相同。
执行单元440,用于执行上述第三函数。
可选的,在本发明一些可能的实施方式中,上述存储单元410还用于存储上述宿主机支持的第五共享库;若上述第二函数包括调用上述客户机支持的第四共享库中的第四函数的指令。
上述翻译单元430还可用于:
将上述第二函数包括的调用上述第四共享库中的第四函数的指令,翻译成调用上述第五共享库中的第五函数的指令,其中,上述第四函数和上述第五函数的函数功能相同,或者,上述第四函数和上述第五函数的函数功能和函数接口均相同。
可选的,在本发明另一些可能的实施方式中,上述存储单元410还用于存储上述宿主机支持的第五共享库,当上述第三函数调用上述客户机支持的第四共享库中的第四函数时,上述翻译单元430还用于:
将上述第三函数包括的调用上述客户机支持的第四共享库中的第四函数的指令,翻译成上述第三函数调用上述第五共享库中第五函数的指令;上述第四函数和上述第五函数的函数功能相同,或者,上述第四函数和上述第五函数的函数功能和函数接口均相同。
可选的,在本发明一些可能的实施方式中,上述存储单元410还用于存储上述宿主机支持的第二主程序,若上述第二函数包括调用上述客户机支持的第一主程序中的第六函数的指令,上述翻译单元430还用于:
将上述第二函数包括的上述调用上述客户机支持的第一主程序中的第六函数的指令,翻译成调用上述第二主程序中的第七函数的指令,其中,上述第六函数和上述第七函数的函数功能相同,或者,上述第六函数和上述第七函数的函数功能和函数接口均相同。
可选的,在本发明另一些可能的实施方式中,上述存储单元410还用于存储上述宿主机支持的第二主程序,当上述第三函数调用上述客户机支持的第一主程序中的第六函数时,上述翻译单元430还用于:
将上述第三函数包括的调用上述客户机支持的第一主程序中的第六函数的指令,翻译成上述第三函数调用上述第二主程序中的第七函数的调用,上述第六函数和上述第七函数的函数功能相同,或者,上述第六函数和上述第七函数的函数功能和函数接口均相同。
可选的,在本发明一些可能的实施方式中,当上述第二函数包括以上述客户机支持的第十函数的函数指针作为传入参数,以调用上述宿主机支持的第八函数的调用指令,上述翻译单元430还可用于:
将上述以上述客户机支持的第十函数的函数指针作为传入参数,以调用上述宿主机支持的第八函数的调用指令,替换为以上述宿主机支持的第九函数的函数指针作为传入参数,以调用上述宿主机支持的第八函数的调用指令;当上述第九函数被调用时,执行上述第九函数以调用上述第一共享库中的翻译函数对上述第十函数进行翻译,得到上述宿主机支持的第十一函数。
可选的,在本发明一些可能的实施方式中,当上述第二函数包括以第一结构体作为传入参数调用第十二函数的调用指令,上述翻译单元430还用于将上述以第一结构体作为传入参数调用第十二函数的调用指令,翻译为,以第二结构体作为传入参数调用第十二函数的调用指令,其中,上述第一结构体包含的域为上述第二结构体包含的域的子集。其中,上述第一结构体为上述客户机支持的结构体,且上述第二结构体为上述宿主机支持的结构体,且上述第十二函数为上述宿主机支持的函数。或者,上述第一结构体可为上述宿主机支持的结构体,并且上述第二结构体为上述客户机支持的结构体,并且上述第十二函数为上述上述客户机支持的函数。
可选的,在本发明另一些可能的实施方式中,当上述第二函数包括以第一结构体指针作为传入参数调用第十三函数的调用指令,上述翻译单元430还用于:上述宿主机将上述以第一结构体指针作为传入参数调用第十三函数的调用指令,翻译为,以第二结构体指针作为传入参数调用第十三函数的调用指令;其中,上述第一结构体指针指向第一结构体,上述第二结构体指针指向第二结构体,其中,上述第一结构体包含的域为上述第二结构体包含的域的子集。其中,上述第一结构体为客户机支持的结构体,且上述第二结构体为宿主机支持的结构体,且上述第十三函数为上述宿主机支持的函数。或者上述第一结构体为宿主机支持的结构体,并且上述第二结构体为客户机支持的结构体,且上述第十三函数为上述客户机支持的函数。
可选的,在本发明一些可能的实施方式中,上述宿主机还包括:
重定位单元450,用于在对第三共享库中的第一函数进行翻译以得到第二函数之前,对上述第三共享库和上述宿主机的同名全局变量进行符号重定位。
例如,重定位单元450可具体用于,若上述第三共享库包含的第一全局变量和上述宿主机的N个全局变量同名,将上述第一全局变量和上述N个全局变量之中最先加载的全局变量的地址,设定为上述N个全局变量和上述第一全局变量的公共地址;
又例如,重定位单元450具体用于在上述第二共享库中被加载之后,将上述第三共享库中的第一全局变量的地址,重定位为上述第二共享库中的第二全局变量的地址,其中,上述第一全局变量和上述第二全局变量的声明相同。
可以理解的是,本实施例的宿主机400的各功能模块的功能可根据上述方法实施例中的方法具体实现,其具体实现过程可以参照上述方法实施例的相关描述,此处不再赘述。
可以看出,本实施例方案中,引入的宿主机400支持的第二共享库,可看成是客户机支持的第三共享库的一个伪共享库,因为,所述第二共享库中的第一函数和所述第三共享库中的第二函数的函数接口相同,所述第二共享库中的第一函数主要是用来触发调用第一共享库是来翻译第三共享库中的具有相同函数接口的函数,而这就可使得宿主机400上的主程序或其他共享库,可以第二共享库为桥梁,通过调用第二共享库中的某函数,来间接的调用被第一共享库中的翻译函数所翻译的第三共享库中的具有相同函数接口的另一函数,由于第二共享库是宿主机400支持的,因此,宿主机400上的主程序或其他共享库能够识别和直接调用第二共享库中的函数,这样可实现即使不对客户机上依赖第三共享库的主程序或其他依赖的共享库进行翻译,也可对客户机上的第三共享库间接调用执行,这样就极大的降低了第三共享库与客户机的支持主程序(或其他相关共享库)之间的强依赖性,这有利于极大减少翻译代码量,从而可提高二进制翻译执行的效率,进而提升用户体验。
参见图5,图5为本发明实施例提供的宿主机500的示意图,宿主机500可包括至少一个总线501、与总线501相连的至少一个处理器502以及与总线501相连的至少一个存储器503。
其中,上述宿主机和上述客户机支持不同的指令集体系架构。存储器503用于存储上述宿主机支持的第一共享库、上述宿主机支持的第二共享库和客户机支持的第三共享库。其中,上述第一共享库包括翻译函数。
其中,处理器502通过总线501,调用存储器503中存储的代码以用于当上述第二共享库中的第一函数被调用时,执行上述第一函数以调用上述第一共享库中的翻译函数;利用上述调用的第一共享库中的翻译函数,对上述第三共享库中的函数接口与上述第一函数的函数接口相同的第二函数进行翻译,以得到上述宿主机支持的第三函数;其中,上述第三函数的函数接口和上述第二函数的函数接口相同;执行上述第三函数。
可选的,在本发明一些可能的实施方式中,上述存储器503还用于存储上述宿主机支持的第五共享库;若上述第二函数包括调用上述客户机支持的第四共享库中的第四函数的指令;处理器502还可用于:将上述第二函数包括的调用上述第四共享库中的第四函数的指令,翻译成调用上述第五共享库中的第五函数的指令,其中,上述第四函数和上述第五函数的函数功能相同,或者,上述第四函数和上述第五函数的函数功能和函数接口均相同。
可选的,在本发明另一些可能的实施方式中,上述存储器503还用于存储上述宿主机支持的第五共享库,当上述第三函数调用上述客户机支持的第四共享库中的第四函数时,上述处理器502还用于:将上述第三函数包括的调用上述客户机支持的第四共享库中的第四函数的指令,翻译成上述第三函数调用上述第五共享库中第五函数的指令;上述第四函数和上述第五函数的函数功能相同,或者,上述第四函数和上述第五函数的函数功能和函数接口均相同。
可选的,在本发明一些可能的实施方式中,上述存储器503还用于存储上述宿主机支持的第二主程序,若上述第二函数包括调用上述客户机支持的第一主程序中的第六函数的指令,处理器502还用于:
将上述第二函数包括的上述调用上述客户机支持的第一主程序中的第六函数的指令,翻译成调用上述第二主程序中的第七函数的指令,其中,上述第六函数和上述第七函数的函数功能相同,或者,上述第六函数和上述第七函数的函数功能和函数接口均相同。
可选的,在本发明另一些可能的实施方式中,上述存储器503还用于存储上述宿主机支持的第二主程序,当上述第三函数调用上述客户机支持的第一主程序中的第六函数时,上述处理器502还用于:将上述第三函数包括的调用上述客户机支持的第一主程序中的第六函数的指令,翻译成上述第三函数调用上述第二主程序中的第七函数的调用,上述第六函数和上述第七函数的函数功能相同,或者,上述第六函数和上述第七函数的函数功能和函数接口均相同。
可选的,在本发明一些可能的实施方式中,当上述第二函数包括以上述客户机支持的第十函数的函数指针作为传入参数,以调用上述宿主机支持的第八函数的调用指令,上述处理器502还可用于:将上述以上述客户机支持的第十函数的函数指针作为传入参数,以调用上述宿主机支持的第八函数的调用指令,替换为以上述宿主机支持的第九函数的函数指针作为传入参数,以调用上述宿主机支持的第八函数的调用指令;当上述第九函数被调用时,执行上述第九函数以调用上述第一共享库中的翻译函数对上述第十函数进行翻译,得到上述宿主机支持的第十一函数。
可选的,在本发明一些可能的实施方式中,当上述第二函数包括以第一结构体作为传入参数调用第十二函数的调用指令,处理器502还用于将上述以第一结构体作为传入参数调用第十二函数的调用指令,翻译为,以第二结构体作为传入参数调用第十二函数的调用指令,其中,上述第一结构体包含的域为上述第二结构体包含的域的子集。其中,上述第一结构体为上述客户机支持的结构体,且上述第二结构体为上述宿主机支持的结构体,且上述第十二函数为上述宿主机支持的函数。或者,上述第一结构体可为上述宿主机支持的结构体,并且上述第二结构体为上述客户机支持的结构体,并且上述第十二函数为上述上述客户机支持的函数。
可选的,在本发明另一些可能的实施方式中,当上述第二函数包括以第一结构体指针作为传入参数调用第十三函数的调用指令,处理器502还用于上述宿主机将上述以第一结构体指针作为传入参数调用第十三函数的调用指令,翻译为,以第二结构体指针作为传入参数调用第十三函数的调用指令;其中,上述第一结构体指针指向第一结构体,上述第二结构体指针指向第二结构体,其中,上述第一结构体包含的域为上述第二结构体包含的域的子集。其中,上述第一结构体为客户机支持的结构体,且上述第二结构体为宿主机支持的结构体,且上述第十三函数为上述宿主机支持的函数。或者上述第一结构体为宿主机支持的结构体,并且上述第二结构体为客户机支持的结构体,且上述第十三函数为上述客户机支持的函数。
可选的,在本发明一些可能的实施方式中,处理器502还用于在对第三共享库中的第一函数进行翻译以得到第二函数之前,对上述第三共享库和上述宿主机的同名全局变量进行符号重定位。
例如,处理器502还用于,若上述第三共享库包含的第一全局变量和上述宿主机的N个全局变量同名,将上述第一全局变量和上述N个全局变量之中最先加载的全局变量的地址,设定为上述N个全局变量和上述第一全局变量的公共地址;
又例如,处理器502还用于在上述第二共享库中被加载之后,将上述第三共享库中的第一全局变量的地址,重定位为上述第二共享库中的第二全局变量的地址,其中,上述第一全局变量和上述第二全局变量的声明相同。
可以理解的是,本实施例的宿主机500的各功能模块的功能可根据上述方法实施例中的方法具体实现,其具体实现过程可以参照上述方法实施例的相关描述,此处不再赘述。
可以看出,本实施例方案中,引入的宿主机500支持的第二共享库,可看成是客户机支持的第三共享库的一个伪共享库,因为,所述第二共享库中的第一函数和所述第三共享库中的第二函数的函数接口相同,所述第二共享库中的第一函数主要是用来触发调用第一共享库是来翻译第三共享库中的具有相同函数接口的函数,而这就可使得宿主机500上的主程序或其他共享库,可以第二共享库为桥梁,通过调用第二共享库中的某函数,来间接的调用被第一共享库中的翻译函数所翻译的第三共享库中的具有相同函数接口的另一函数,由于第二共享库是宿主机500支持的,因此,宿主机500上的主程序或其他共享库能够识别和直接调用第二共享库中的函数,这样可实现即使不对客户机上依赖第三共享库的主程序或其他依赖的共享库进行翻译,也可对客户机上的第三共享库间接调用执行,这样就极大的降低了第三共享库与客户机的支持主程序(或其他相关共享库)之间的强依赖性,这有利于极大减少翻译代码量,从而可提高二进制翻译执行的效率,进而提升用户体验。
参见图6,图6是本发明的另一个实施例提供的宿主机600的结构框图。宿主机600可包括至少1个处理器601、至少1个网络接口604、存储器605和至少1个通信总线602。通信总线602用于实现这些组件之间的连接通信。其中,该宿主机600可选的包含用户接口603,包括显示器(例如触摸屏、液晶显示器、全息成像(holographic)或者投影(projector)等)、点击设备(例如鼠标、轨迹球(trackball)触感板或触摸屏等)、摄像头和/或拾音装置等。
其中,存储器602可以包括只读存储器和随机存取存储器,并向处理器601提供指令和数据。其中,存储器602中的一部分还可以包括非易失性随机存取存储器。
在一些实施方式中,存储器605存储了如下的元素,可执行模块或者数据结构,或者他们的子集,或者他们的扩展集:
操作系统6051,包含各种系统程序,用于实现各种基础业务以及处理基于硬件的任务。
应用程序模块6052,包含各种应用程序,用于实现各种应用业务。
应用程序模块6052中可包括但不限于存储单元410、调用单元420、翻译单元430、执行单元440和重定位单元450中的至少一个等。
在本发明实施例中,上述宿主机600和上述客户机支持不同的指令集体系架构。存储器605用于存储上述宿主机支持的第一共享库、上述宿主机支持的第二共享库和客户机支持的第三共享库。
其中,上述第一共享库包括翻译函数。
在本发明实施例中,通过调用存储器605存储的程序或指令,处理器601当上述第二共享库中的第一函数被调用时,执行上述第一函数以调用上述第一共享库中的翻译函数;利用上述调用的第一共享库中的翻译函数,对上述第三共享库中的函数接口与上述第一函数的函数接口相同的第二函数进行翻译,以得到上述宿主机支持的第三函数;其中,上述第三函数的函数接口和上述第二函数的函数接口相同;执行上述第三函数。
可选的,在本发明一些可能的实施方式中,上述存储器605还用于存储上述宿主机支持的第五共享库;若上述第二函数包括调用上述客户机支持的第四共享库中的第四函数的指令;处理器601还可用于:将上述第二函数包括的调用上述第四共享库中的第四函数的指令,翻译成调用上述第五共享库中的第五函数的指令,其中,上述第四函数和上述第五函数的函数功能相同,或者,上述第四函数和上述第五函数的函数功能和函数接口均相同。
可选的,在本发明另一些可能的实施方式中,上述存储器605还用于存储上述宿主机支持的第五共享库,当上述第三函数调用上述客户机支持的第四共享库中的第四函数时,上述处理器601还用于:将上述第三函数包括的调用上述客户机支持的第四共享库中的第四函数的指令,翻译成上述第三函数调用上述第五共享库中第五函数的指令;上述第四函数和上述第五函数的函数功能相同,或者,上述第四函数和上述第五函数的函数功能和函数接口均相同。
可选的,在本发明一些可能的实施方式中,上述存储器605还用于存储上述宿主机支持的第二主程序,若上述第二函数包括调用上述客户机支持的第一主程序中的第六函数的指令,处理器601还用于:
将上述第二函数包括的上述调用上述客户机支持的第一主程序中的第六函数的指令,翻译成调用上述第二主程序中的第七函数的指令,其中,上述第六函数和上述第七函数的函数功能相同,或者,上述第六函数和上述第七函数的函数功能和函数接口均相同。
可选的,在本发明另一些可能的实施方式中,上述存储器605还用于存储上述宿主机支持的第二主程序,当上述第三函数调用上述客户机支持的第一主程序中的第六函数时,上述处理器601还用于:将上述第三函数包括的调用上述客户机支持的第一主程序中的第六函数的指令,翻译成上述第三函数调用上述第二主程序中的第七函数的调用,上述第六函数和上述第七函数的函数功能相同,或者,上述第六函数和上述第七函数的函数功能和函数接口均相同。
可选的,在本发明一些可能的实施方式中,当上述第二函数包括以上述客户机支持的第十函数的函数指针作为传入参数,以调用上述宿主机支持的第八函数的调用指令,上述处理器601还可用于:将上述以上述客户机支持的第十函数的函数指针作为传入参数,以调用上述宿主机支持的第八函数的调用指令,替换为以上述宿主机支持的第九函数的函数指针作为传入参数,以调用上述宿主机支持的第八函数的调用指令;当上述第九函数被调用时,执行上述第九函数以调用上述第一共享库中的翻译函数对上述第十函数进行翻译,得到上述宿主机支持的第十一函数。
可选的,在本发明一些可能的实施方式中,当上述第二函数包括以第一结构体作为传入参数调用第十二函数的调用指令,处理器601还用于将上述以第一结构体作为传入参数调用第十二函数的调用指令,翻译为,以第二结构体作为传入参数调用第十二函数的调用指令,其中,上述第一结构体包含的域为上述第二结构体包含的域的子集。其中,上述第一结构体为上述客户机支持的结构体,且上述第二结构体为上述宿主机支持的结构体,且上述第十二函数为上述宿主机支持的函数。或者,上述第一结构体可为上述宿主机支持的结构体,并且上述第二结构体为上述客户机支持的结构体,并且上述第十二函数为上述上述客户机支持的函数。
可选的,在本发明另一些可能的实施方式中,当上述第二函数包括以第一结构体指针作为传入参数调用第十三函数的调用指令,处理器601还用于上述宿主机将上述以第一结构体指针作为传入参数调用第十三函数的调用指令,翻译为,以第二结构体指针作为传入参数调用第十三函数的调用指令;其中,上述第一结构体指针指向第一结构体,上述第二结构体指针指向第二结构体,其中,上述第一结构体包含的域为上述第二结构体包含的域的子集。其中,上述第一结构体为客户机支持的结构体,且上述第二结构体为宿主机支持的结构体,且上述第十三函数为上述宿主机支持的函数。或者上述第一结构体为宿主机支持的结构体,并且上述第二结构体为客户机支持的结构体,且上述第十三函数为上述客户机支持的函数。
可选的,在本发明一些可能的实施方式中,处理器601还用于在对第三共享库中的第一函数进行翻译以得到第二函数之前,对上述第三共享库和上述宿主机的同名全局变量进行符号重定位。
例如,处理器601还用于,若上述第三共享库包含的第一全局变量和上述宿主机的N个全局变量同名,将上述第一全局变量和上述N个全局变量之中最先加载的全局变量的地址,设定为上述N个全局变量和上述第一全局变量的公共地址。
又例如,处理器601还用于在上述第二共享库中被加载之后,将上述第三共享库中的第一全局变量的地址,重定位为上述第二共享库中的第二全局变量的地址,其中,上述第一全局变量和上述第二全局变量的声明相同。
可以理解的是,本实施例的宿主机600的各功能模块的功能可根据上述方法实施例中的方法具体实现,其具体实现过程可以参照上述方法实施例的相关描述,此处不再赘述。
可以看出,本实施例方案中,引入的宿主机600支持的第二共享库,可看成是客户机支持的第三共享库的一个伪共享库,因为,所述第二共享库中的第一函数和所述第三共享库中的第二函数的函数接口相同,所述第二共享库中的第一函数主要是用来触发调用第一共享库是来翻译第三共享库中的具有相同函数接口的函数,而这就可使得宿主机600上的主程序或其他共享库,可以第二共享库为桥梁,通过调用第二共享库中的某函数,来间接的调用被第一共享库中的翻译函数所翻译的第三共享库中的具有相同函数接口的另一函数,由于第二共享库是宿主机600支持的,因此,宿主机600上的主程序或其他共享库能够识别和直接调用第二共享库中的函数,这样可实现即使不对客户机上依赖第三共享库的主程序或其他依赖的共享库进行翻译,也可对客户机上的第三共享库间接调用执行,这样就极大的降低了第三共享库与客户机的支持主程序(或其他相关共享库)之间的强依赖性,这有利于极大减少翻译代码量,从而可提高二进制翻译执行的效率,进而提升用户体验。
参见图7,本发明实施例还提供一种通信系统,可包括:第一计算节点710和第二计算节点720。其中,第一计算节点710和第二计算节点720可通过互联网络互联。
其中,上述第二计算节点720和上述第一计算节点710支持不同的指令集体系架构。上述第二计算节点720包括上述第二计算节点720支持的第一共享库和上述第二计算节点720支持的第二共享库。其中,第一共享库包括翻译函数。
第一计算节点710,用于向第二计算节点720发送第一计算节点710支持的第三共享库。
第二计算节点720,用于接收来自第一计算节点710的第三共享库;当上述第二共享库中的第一函数被调用时,执行上述第一函数以调用上述第一共享库中的翻译函数;利用上述调用的上述第一共享库中的翻译函数,对上述第三共享库中的函数接口与上述第一函数的函数接口相同的第二函数进行翻译,以得到上述第二计算节点720支持的第三函数;上述第三函数的函数接口和上述第二函数的函数接口相同;执行上述第三函数。
可以理解,上述第二共享库中的上述第一函数例如可为第二共享库中的任意一个函数,或者,上述第二共享库中的上述第一函数也可为第二共享库中的某个特定的函数。
其中,对上述第二函数进行翻译可能涉及多方面,具体翻译方式也可能是多种多样,下面进行举例说明。
在本发明的一些可能的实施方式中,上述第二计算节点720中还包括上述第二计算节点720支持的第五共享库;若上述第二函数包括调用上述第一计算节点710支持的第四共享库中的第四函数的指令,上述第二计算节点720还用于将上述第二函数包括的调用上述第四共享库中的第四函数的指令,翻译成调用上述第五共享库中的第五函数的指令,其中,上述第四函数和上述第五函数的函数功能相同,或者,上述第四函数和上述第五函数的函数功能和函数接口均相同。可以理解,上述第二计算节点720将上述第二函数包括的调用上述第四共享库中的第四函数的指令,翻译成调用上述第五共享库中的第五函数的指令,本质上可看做是一种库函数包装技术,即将对第一计算节点710支持的某共享库中的某函数的调用,替换为对第二计算节点720支持的某共享库中的函数功能相同或函数功能和函数接口均相同的函数的调用,这样有利于提高对第二计算节点720的本地共享库的利用率,进一步减少对第一计算节点710相关共享库的函数代码的翻译,进而有利于进一步减少代码翻译量。
在本发明的另一些可能的实施方式中,上述第二计算节点720中还包括上述第二计算节点720支持的第五共享库,当上述第三函数调用上述第一计算节点710支持的第四共享库中的第四函数时,第二计算节点720还用于,将上述第三函数包括的调用上述第一计算节点710支持的第四共享库中的第四函数的指令,翻译成上述第三函数调用上述第五共享库中第五函数的指令;其中上述第四函数和上述第五函数的函数功能和函数接口均相同,或者上述第四函数和上述第五函数的函数功能相同。可以理解的是,上述第二计算节点720将上述第三函数包括的调用上述第四共享库中的第四函数的指令,翻译成调用上述第五共享库中的第五函数的指令,本质上可看做是一种库函数包装技术,即,可将对第一计算节点710支持的某共享库中的某函数的调用,替换为对第二计算节点720支持的某共享库中的函数功能相同或函数功能和函数接口均相同的函数的调用,这样有利于提高对第二计算节点720本地共享库的利用率,进一步减少对第一计算节点710相关共享库的函数代码的翻译,进而有利于进一步减少代码翻译量。
在本发明的一些可能的实施方式中,上述第二计算节点720中还包括上述第二计算节点720支持的第二主程序,若上述第二函数包括调用上述第一计算节点710支持的第一主程序中的第六函数的指令,上述第二计算节点720还用于将上述第二函数包括的上述调用上述第一计算节点710支持的第一主程序中的第六函数的指令,翻译成调用上述第二主程序中的第七函数的指令,其中,上述第六函数和上述第七函数的函数功能相同,或者,上述第六函数和上述第七函数的函数功能和函数接口均相同。可以理解,将上述第二函数包括的上述调用上述第一计算节点710支持的第一主程序中的第六函数的指令,翻译成调用上述第二主程序中的第七函数的指令,本质上可看做是一种库函数包装技术,即将对第一计算节点710支持的主程序中的某函数的调用,替换为对第二计算节点720支持的主程序中的函数功能相同或函数功能和函数接口均相同的函数的调用,这样有利于提高对第二计算节点720的本地共享库的利用率,进一步减少对第一计算节点710相关共享库的函数代码的翻译,进而有利于进一步减少代码翻译量。
在本发明的另一些可能的实施方式中,上述第二计算节点720中还包括上述第二计算节点720支持的第二主程序,当上述第三函数调用上述第一计算节点710支持的第一主程序中的第六函数时,上述第二计算节点720还用于将上述第三函数包括的调用上述第一计算节点710支持的第一主程序中的第六函数的指令,翻译成上述第三函数调用上述第二主程序中的第七函数的调用,上述第六函数和上述第七函数的函数功能相同,或者,上述第六函数和上述第七函数的函数功能和函数接口均相同。可以理解的是,将上述第三函数包括的上述调用上述第一计算节点710支持的第一主程序中的第六函数的指令,翻译成调用上述第二主程序中的第七函数的指令,本质上可看做是一种库函数包装技术,即,可以将对第一计算节点710支持的主程序中的某函数的调用,替换为对第二计算节点720支持的主程序中的函数功能相同或函数功能和函数接口均相同的函数的调用,这样有利于提高对第二计算节点720的本地共享库的利用率,进一步减少对第一计算节点710相关共享库的函数代码的翻译,进而有利于进一步减少代码翻译量。
在本发明的一些可能的实施方式中,当上述第二函数包括以上述第一计算节点710支持的第十函数的函数指针作为传入参数,以调用上述第二计算节点720支持的第八函数的调用指令,上述第二计算节点720还用于,将上述以上述第一计算节点710支持的第十函数的函数指针作为传入参数,以调用上述第二计算节点720支持的第八函数的调用指令,替换为,以上述第二计算节点720支持的第九函数的函数指针作为传入参数,以调用上述第二计算节点720支持的第八函数的调用指令。其中,当上述第九函数被调用时,上述第二计算节点720执行上述第九函数以调用上述第一共享库中的翻译函数对上述第十函数进行翻译,得到上述第二计算节点720支持的第十一函数,上述第二计算节点720执行上述第十一函数。可以理解,在上述存在函数指针的场景下,引入上述第九函数作为桥梁,有利于实现在较合适的时机对函数指针所指向的函数进行翻译,有利于尽量避免出现错误。
在本发明的一些可能的实施方式中,当上述第三年函数包括以上述第二计算节点720支持的函数S01的函数指针作为传入参数,以调用上述第二计算节点720支持的S02函数的调用指令,当上述函数S01被调用时,上述第二计算节点720执行上述函数S01,第二计算节点720不翻译上述函数S001。
在本发明一些可能的实施方式中,当上述第二函数包括以第一结构体作为传入参数调用第十二函数的调用指令,上述第二计算节点720还用于,将上述以第一结构体作为传入参数调用第十二函数的调用指令,翻译为,以第二结构体作为传入参数调用第十二函数的调用指令,上述第一结构体包含的域为上述第二结构体包含的域的子集。上述第一结构体为上述第一计算节点710支持的结构体,并且上述第二结构体为上述第二计算节点720支持的结构体,且上述第十二函数为上述第二计算节点720支持的函数;或者上述第一结构体为上述第二计算节点720支持的结构体,且上述第二结构体为上述第一计算节点710支持的结构体,且上述第十二函数为上述上述第一计算节点710支持的函数。例如,上述第一结构体包含的域与上述第二结构体包含的域可以相同。
在本发明一些可能的实施方式中,当上述第二函数包括以第一结构体指针作为传入参数调用第十三函数的调用指令,上述第二计算节点720还用于,将上述以第一结构体指针作为传入参数调用第十三函数的调用指令,翻译为,以第二结构体指针作为传入参数调用第十三函数的调用指令。其中,上述第一结构体指针指向第一结构体,上述第二结构体指针指向第二结构体,上述第一结构体包含的域为上述第二结构体包含的域的子集。其中,上述第一结构体为第一计算节点710支持的结构体,且上述第二结构体为第二计算节点720支持的结构体,且上述第十三函数为上述第二计算节点720支持的函数。或者上述第一结构体为第二计算节点720支持的结构体,并且上述第二结构体为第一计算节点710支持的结构体,且上述第十三函数为上述第一计算节点710支持的函数。例如,上述第一结构体包含的域与上述第二结构体包含的域可以相同。
在本发明的一些可能的实施方式中,当上述第二函数的传入参数包括第三结构体,所上述第二计算节点720还用于,将作为上述第二函数的传入参数的第三结构体替换为第四结构体,上述第三结构体包含的域为上述第四结构体包含的域的子集;其中,上述第四结构体为第一计算节点710支持的结构体,且上述第三结构体为第二计算节点720支持的结构体。例如,上述第三结构体包含的域与上述第四结构体包含的域可以相同。
在本发明的一些可能的实施方式中,当上述第二函数的传入参数包括第三结构体指针,第二计算节点720还用于,将作为上述第二函数的传入参数的上述第三结构体指针替换为第四结构体指针,上述第四结构体指针指向第四结构体,上述第三结构体指针指向第三结构体,上述第三结构体包含的域为上述第四结构体包含的域的子集。其中,上述第四结构体为第一计算节点710支持的结构体,且上述第三结构体为第二计算节点720支持的结构体。例如,上述第三结构体包含的域与上述第四结构体包含的域可以相同。
其中,上述举例了一些翻译第二函数可能实施方式,以及翻译翻译第二函数还可能涉及与翻译相关的一些其他操作,当然在实际应用,还可能涉及其他的翻译操作,当然上述的翻译操作之间也可能相互进行嵌套,具体方式此处不再赘述。
此外,在本发明的一些可能的实施方式中,上述对第三共享库中的第一函数进行翻译以得到第二函数之前,上述第二计算节点720还用于,对上述第三共享库和上述第二计算节点720的同名全局变量进行符号重定位。
例如,上述第二计算节点720对上述第三共享库和上述第二计算节点720的同名全局变量进行符号重定位包括:若上述第三共享库包含的第一全局变量和上述第二计算节点720的N个全局变量同名,上述第二计算节点720将上述第一全局变量和上述N个全局变量之中最先加载的全局变量的地址,设定为上述N个全局变量和上述第一全局变量的公共地址。
又例如,上述第二计算节点720对上述第三共享库和上述第二计算节点720的同名全局变量进行符号重定位包括:在上述第二共享库中被加载之后,上述第二计算节点720将上述第三共享库中的第一全局变量的地址,重定位为上述第二共享库中的第二全局变量的地址,其中,上述第一全局变量和上述第二全局变量的声明相同。
可以理解的是,上述第一全局变量可为上述第三共享库包含的任意一个全局变量。或者,上述第一全局变量也可为上述第三共享库包含的某个特定的全局变量。
其中,本发明实施例的第二计算节点720和第一计算节点710支持不同的指令集体系架构,例如第二计算节点720和第一计算节点710可分别支持如下指令集体系架构中的其中一种:POWER指令集体系架构、x86指令集体系架构、龙芯指令集体系架构和MIPS指令集体系架构。
可以理解的是,本实施例的宿主机400的各功能模块的功能可根据上述方法实施例中的方法具体实现,其具体实现过程可以参照上述方法实施例的相关描述,此处不再赘述。
可以看出,本实施例方案中,支持不同的指令集体系架构的第二计算节点720和上述第一计算节点710可互传各自支持的共享库,例如上述第一计算节点710向第二计算节点720传递第三共享库,其中,在第二计算节点720中引入的第二计算节点720支持的第二共享库,可看成是第一计算节点710支持的第三共享库的一个伪共享库,因为,第二共享库中的第一函数和所述第三共享库中的第二函数的函数接口相同,所述第二共享库中的第一函数主要是用来触发调用第一共享库是来翻译第三共享库中的具有相同函数接口的函数,而这就可使得第二计算节点720上的主程序或其他共享库,可以第二共享库为桥梁,通过调用第二共享库中的某函数,来间接的调用被第一共享库中的翻译函数所翻译的第三共享库中的具有相同函数接口的另一函数,由于第二共享库是第二计算节点720支持的,因此,第二计算节点720上的主程序或其他共享库能够识别和直接调用第二共享库中的函数,这样可实现即使不对第一计算节点710上依赖第三共享库的主程序或其他依赖的共享库进行翻译,也可对第一计算节点710上的第三共享库间接调用执行,这样就极大的降低了第三共享库与第一计算节点710的支持主程序(或其他相关共享库)之间的强依赖性,这有利于极大减少翻译代码量,从而可提高二进制翻译执行的效率,进而提升用户体验。
进一步的,由于第一共享库是包含翻译函数,即将二进制翻译器编译成第一共享库,在需调用第一计算节点710支持的第三共享库中的函数时,第一共享库才对被调用的相关函数进行动态翻译,这样有利于提高翻译的针对性和有效性,有利于减少无效翻译工作量,进而有利于进一步减少翻译代码量,从而进一步提高二进制翻译的执行效率,进而进一步提升用户体验。
本发明实施例还提供一种计算机存储介质,其中,该计算机存储介质可存储有程序,该程序执行时包括上述方法实施例中记载的任意一种共享库的二进制翻译执行方法的部分或全部步骤。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置,可通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
Claims (23)
1.一种共享库的二进制翻译执行方法,其特征在于,所述方法应用于宿主机,所述宿主机中包括所述宿主机支持的第一共享库、所述宿主机支持的第二共享库和客户机支持的第三共享库,所述第一共享库包括翻译函数,所述宿主机和所述客户机支持不同的指令集体系架构,
所述方法包括:
当所述第二共享库中的第一函数被调用时,所述宿主机执行所述第一函数以调用所述第一共享库中的翻译函数;
所述宿主机利用所述调用的所述第一共享库中的翻译函数,对所述第三共享库中的函数接口与所述第一函数的函数接口相同的第二函数进行翻译,以得到所述宿主机支持的第三函数;其中,所述第三函数的函数接口和所述第二函数的函数接口相同;
所述宿主机执行所述第三函数。
2.根据权利要求1所述的方法,其特征在于,所述宿主机中还包括所述宿主机支持的第五共享库;若所述第二函数包括调用所述客户机支持的第四共享库中的第四函数的指令,对所述第二函数进行翻译的步骤,还包括:
所述宿主机将所述第二函数包括的调用所述第四共享库中的第四函数的指令,翻译成调用所述第五共享库中的第五函数的指令,其中,所述第四函数和所述第五函数的函数功能相同,或者,所述第四函数和所述第五函数的函数功能和函数接口均相同。
3.根据权利要求1所述的方法,其特征在于,所述宿主机中还包括所述宿主机支持的第五共享库,当所述第三函数调用所述客户机支持的第四共享库中的第四函数时,所述方法还包括:
所述宿主机将所述第三函数包括的调用所述客户机支持的第四共享库中的第四函数的指令,翻译成所述第三函数调用所述第五共享库中第五函数的指令;其中,所述第四函数和所述第五函数的函数功能相同,或者,所述第四函数和所述第五函数的函数功能和函数接口均相同。
4.根据权利要求1所述的方法,其特征在于,所述宿主机中还包括所述宿主机支持的第二主程序,若所述第二函数包括调用所述客户机支持的第一主程序中的第六函数的指令,对所述第二函数进行翻译的步骤,还包括:
所述宿主机将所述第二函数包括的所述调用所述客户机支持的第一主程序中的第六函数的指令,翻译成调用所述第二主程序中的第七函数的指令,其中,所述第六函数和所述第七函数的函数功能相同,或者,所述第六函数和所述第七函数的函数功能和函数接口均相同。
5.根据权利要求1所述的方法,其特征在于,所述宿主机中还包括所述宿主机支持的第二主程序,当所述第三函数调用所述客户机支持的第一主程序中的第六函数时,所述方法还包括:
所述宿主机将所述第三函数包括的调用所述客户机支持的第一主程序中的第六函数的指令,翻译成所述第三函数调用所述第二主程序中的第七函数的调用,其中,所述第六函数和所述第七函数的函数功能相同,或者,所述第六函数和所述第七函数的函数功能和函数接口均相同。
6.根据权利要求1所述的方法,其特征在于,当所述第二函数包括以所述客户机支持的第十函数的函数指针作为传入参数,以调用所述宿主机支持的第八函数的调用指令,对所述第二函数进行翻译的步骤,还包括:所述宿主机将所述以所述客户机支持的第十函数的函数指针作为传入参数,以调用所述宿主机支持的第八函数的调用指令,替换为,以所述宿主机支持的第九函数的函数指针作为传入参数,以调用所述宿主机支持的第八函数的调用指令;
其中,当所述第九函数被调用时,所述宿主机执行所述第九函数以调用所述第一共享库中的翻译函数对所述第十函数进行翻译,得到所述宿主机支持的第十一函数,所述宿主机执行所述第十一函数。
7.根据权利要求1所述的方法,其特征在于,当所述第二函数包括以第一结构体作为传入参数调用第十二函数的调用指令,对所述第二函数进行翻译的步骤,还包括:
所述宿主机将所述以第一结构体作为传入参数调用第十二函数的调用指令翻译为,以第二结构体作为传入参数调用第十二函数的调用指令,所述第一结构体包含的域为所述第二结构体包含的域的子集;
其中,所述第一结构体为所述客户机支持的结构体,且所述第二结构体为所述宿主机支持的结构体,且所述第十二函数为所述宿主机支持的函数;
或者,所述第一结构体为所述宿主机支持的结构体,并且所述第二结构体为所述客户机支持的结构体,并且所述第十二函数为所述客户机支持的函数。
8.根据权利要求1所述的方法,其特征在于,
当所述第二函数包括以第一结构体指针作为传入参数调用第十三函数的调用指令,对所述第二函数进行翻译的步骤,还包括:所述宿主机将所述以第一结构体指针作为传入参数调用第十三函数的调用指令,翻译为,以第二结构体指针作为传入参数调用第十三函数的调用指令;
其中,所述第一结构体指针指向第一结构体,所述第二结构体指针指向第二结构体,所述第一结构体包含的域为所述第二结构体包含的域的子集;
其中,所述第一结构体为客户机支持的结构体,且所述第二结构体为宿主机支持的结构体,且所述第十三函数为所述宿主机支持的函数;或者所述第一结构体为宿主机支持的结构体,并且所述第二结构体为客户机支持的结构体,且所述第十三函数为所述客户机支持的函数。
9.根据权利要求1所述的方法,其特征在于,当所述第二函数的传入参数包括第三结构体,所述方法还包括:所述宿主机将作为所述第二函数的传入参数的第三结构体替换为第四结构体,所述第三结构体包含的域为所述第四结构体包含的域的子集;
其中,所述第四结构体为客户机支持的结构体,且所述第三结构体为宿主机支持的结构体。
10.根据权利要求1所述的方法,其特征在于,当所述第二函数的传入参数包括第三结构体指针,所述方法还包括:所述宿主机将作为所述第二函数的传入参数的所述第三结构体指针替换为第四结构体指针,所述第四结构体指针指向第四结构体,所述第三结构体指针指向第三结构体,所述第三结构体包含的域为所述第四结构体包含的域的子集;
其中,所述第四结构体为客户机支持的结构体,且所述第三结构体为宿主机支持的结构体。
11.根据权利要求1至10任意一项所述的方法,其特征在于,
所述对所述第三共享库中的函数接口与所述第一函数的函数接口相同的第二函数进行翻译之前,所述方法还包括:所述宿主机对所述第三共享库和所述宿主机的同名全局变量进行符号重定位。
12.根据权利要求11的方法,其特征在于,所述宿主机对所述第三共享库和所述宿主机的同名全局变量进行符号重定位包括:若所述第三共享库包含的第一全局变量和所述宿主机的N个全局变量同名,所述宿主机将所述第一全局变量和所述N个全局变量之中最先加载的全局变量的地址,设定为所述N个全局变量和所述第一全局变量的公共地址。
13.根据权利要求11的方法,其特征在于,所述宿主机对所述第三共享库和所述宿主机的同名全局变量进行符号重定位包括:在所述第二共享库中被加载之后,所述宿主机将所述第三共享库中的第一全局变量的地址,重定位为所述第二共享库中的第二全局变量的地址,其中,所述第一全局变量和所述第二全局变量的声明相同。
14.一种宿主机,其特征在于,所述宿主机包括:
存储单元,用于存储所述宿主机支持的第一共享库、所述宿主机支持的第二共享库和客户机支持的第三共享库,所述第一共享库包括翻译函数,所述宿主机和所述客户机支持不同的指令集体系架构;
调用单元,用于当所述第二共享库中的第一函数被调用时,执行所述第一函数以调用所述第一共享库中的翻译函数;
翻译单元,用于利用所述调用的第一共享库中的翻译函数,对所述第三共享库中的函数接口与所述第一函数的函数接口相同的第二函数进行翻译,以得到所述宿主机支持的第三函数;其中,所述第三函数的函数接口和所述第二函数的函数接口相同;
执行单元,用于执行所述第三函数。
15.根据权利要求14所述的宿主机,其特征在于,所述存储单元还用于存储所述宿主机支持的第五共享库;其中,若所述第二函数包括调用所述客户机支持的第四共享库中的第四函数的指令;
所述翻译单元还用于:
将所述第二函数包括的调用所述第四共享库中的第四函数的指令,翻译成调用所述第五共享库中的第五函数的指令,其中,所述第四函数和所述第五函数的函数功能相同,或者,所述第四函数和所述第五函数的函数功能和函数接口均相同。
16.根据权利要求14所述的宿主机,其特征在于,所述存储单元还用于存储所述宿主机支持的第五共享库,当所述第三函数调用所述客户机支持的第四共享库中的第四函数时,所述翻译单元还用于:
将所述第三函数包括的调用所述客户机支持的第四共享库中的第四函数的指令,翻译成所述第三函数调用所述第五共享库中第五函数的指令;所述第四函数和所述第五函数的函数功能相同,或者,所述第四函数和所述第五函数的函数功能和函数接口均相同。
17.根据权利要求14所述的宿主机,其特征在于,所述存储单元还用于存储所述宿主机支持的第二主程序,若所述第二函数包括调用所述客户机支持的第一主程序中的第六函数的指令,所述翻译单元还用于:
将所述第二函数包括的所述调用所述客户机支持的第一主程序中的第六函数的指令,翻译成调用所述第二主程序中的第七函数的指令,其中,所述第六函数和所述第七函数的函数功能相同,或者,所述第六函数和所述第七函数的函数功能和函数接口均相同。
18.根据权利要求14所述的宿主机,其特征在于,所述存储单元还用于存储所述宿主机支持的第二主程序,当所述第三函数调用所述客户机支持的第一主程序中的第六函数时,所述翻译单元还用于:
将所述第三函数包括的调用所述客户机支持的第一主程序中的第六函数的指令,翻译成所述第三函数调用所述第二主程序中的第七函数的调用,所述第六函数和所述第七函数的函数功能相同,或者,所述第六函数和所述第七函数的函数功能和函数接口均相同。
19.根据权利要求14所述的宿主机,其特征在于,当所述第二函数包括以所述客户机支持的第十函数的函数指针作为传入参数,以调用所述宿主机支持的第八函数的调用指令,所述翻译单元还用于:
将所述以所述客户机支持的第十函数的函数指针作为传入参数,以调用所述宿主机支持的第八函数的调用指令,替换为以所述宿主机支持的第九函数的函数指针作为传入参数,以调用所述宿主机支持的第八函数的调用指令;当所述第九函数被调用时,执行所述第九函数以调用所述第一共享库中的翻译函数对所述第十函数进行翻译,得到所述宿主机支持的第十一函数。
20.根据权利要求14所述的宿主机,其特征在于,当所述第二函数包括以第一结构体作为传入参数调用第十二函数的调用指令,所述翻译单元还用于将所述以第一结构体作为传入参数调用第十二函数的调用指令,翻译为,以第二结构体作为传入参数调用第十二函数的调用指令,其中,所述第一结构体包含的域为所述第二结构体包含的域的子集;
其中,所述第一结构体为所述客户机支持的结构体,且所述第二结构体为所述宿主机支持的结构体,且所述第十二函数为所述宿主机支持的函数;
或者,所述第一结构体为所述宿主机支持的结构体,并且所述第二结构体为所述客户机支持的结构体,并且所述第十二函数为所述所述客户机支持的函数。
21.根据权利要求14所述的宿主机,其特征在于,当所述第二函数包括以第一结构体指针作为传入参数调用第十三函数的调用指令,
所述翻译单元还用于:所述宿主机将所述以第一结构体指针作为传入参数调用第十三函数的调用指令,翻译为,以第二结构体指针作为传入参数调用第十三函数的调用指令;其中,所述第一结构体指针指向第一结构体,所述第二结构体指针指向第二结构体,其中,所述第一结构体包含的域为所述第二结构体包含的域的子集;
其中,所述第一结构体为客户机支持的结构体,且所述第二结构体为宿主机支持的结构体,且所述第十三函数为所述宿主机支持的函数;
或者所述第一结构体为宿主机支持的结构体,并且所述第二结构体为客户机支持的结构体,且所述第十三函数为所述客户机支持的函数。
22.根据权利要求14至21任意一项所述的宿主机,其特征在于,
所述宿主机还包括:重定位单元,用于在对所述第三共享库中的函数接口与所述第一函数的函数接口相同的第二函数进行翻译之前,对所述第三共享库和所述宿主机的同名全局变量进行符号重定位。
23.根据权利要求22的宿主机,其特征在于,
所述重定位单元具体用于,若所述第三共享库包含的第一全局变量和所述宿主机的N个全局变量同名,将所述第一全局变量和所述N个全局变量之中最先加载的全局变量的地址,设定为所述N个全局变量和所述第一全局变量的公共地址;
或者,
所述重定位单元具体用于,在所述第二共享库中被加载之后,将所述第三共享库中的第一全局变量的地址,重定位为所述第二共享库中的第二全局变量的地址,其中,所述第一全局变量和所述第二全局变量的声明相同。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410306773.2A CN105335203B (zh) | 2014-06-30 | 2014-06-30 | 共享库的二进制翻译执行方法和装置 |
PCT/CN2015/082127 WO2016000550A1 (zh) | 2014-06-30 | 2015-06-23 | 共享库的二进制翻译执行方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410306773.2A CN105335203B (zh) | 2014-06-30 | 2014-06-30 | 共享库的二进制翻译执行方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105335203A CN105335203A (zh) | 2016-02-17 |
CN105335203B true CN105335203B (zh) | 2018-10-19 |
Family
ID=55018434
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410306773.2A Active CN105335203B (zh) | 2014-06-30 | 2014-06-30 | 共享库的二进制翻译执行方法和装置 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN105335203B (zh) |
WO (1) | WO2016000550A1 (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107085514B (zh) * | 2017-03-06 | 2021-02-19 | 北京安博通科技股份有限公司 | 共享库升级方法及装置 |
US10235178B2 (en) | 2017-06-02 | 2019-03-19 | Microsoft Technology Licensing, Llc | Performance scaling for binary translation |
CN107704236B (zh) * | 2017-09-30 | 2021-03-19 | 苏州浪潮智能科技有限公司 | 软件开发系统中管理公用函数的方法和装置 |
US10152313B1 (en) | 2017-12-19 | 2018-12-11 | International Business Machines Corporation | Shared library transformation on the same architecture |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1892602A (zh) * | 2005-07-01 | 2007-01-10 | 中国科学院计算技术研究所 | 一种二进制翻译中库函数调用的处理方法 |
CN101452395A (zh) * | 2007-11-28 | 2009-06-10 | 无锡江南计算技术研究所 | 函数调用和返回的处理方法、二进制翻译方法和系统 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090271172A1 (en) * | 2008-04-24 | 2009-10-29 | International Business Machines Corporation | Emulating A Computer Run Time Environment |
US20130326489A1 (en) * | 2012-05-30 | 2013-12-05 | Vector Fabrics B.V. | Method and system for translating non-native instructions |
-
2014
- 2014-06-30 CN CN201410306773.2A patent/CN105335203B/zh active Active
-
2015
- 2015-06-23 WO PCT/CN2015/082127 patent/WO2016000550A1/zh active Application Filing
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1892602A (zh) * | 2005-07-01 | 2007-01-10 | 中国科学院计算技术研究所 | 一种二进制翻译中库函数调用的处理方法 |
CN101452395A (zh) * | 2007-11-28 | 2009-06-10 | 无锡江南计算技术研究所 | 函数调用和返回的处理方法、二进制翻译方法和系统 |
Also Published As
Publication number | Publication date |
---|---|
CN105335203A (zh) | 2016-02-17 |
WO2016000550A1 (zh) | 2016-01-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103843302B (zh) | 有状态环境中的网络适配器硬件状态迁移发现 | |
CN105335203B (zh) | 共享库的二进制翻译执行方法和装置 | |
CN102681850B (zh) | 一种基于Webkit内核提供网页浏览的方法及装置 | |
CN106445508A (zh) | 一种游戏引擎 | |
CN103443763B (zh) | 包含对重写虚拟函数的调用的支持的isa桥接 | |
CN104317578B (zh) | 基于引擎Lua脚本应用和引擎与Lua脚本相互调用方法及装置 | |
US9588791B2 (en) | Flexible physical function and virtual function mapping | |
CN112287569B (zh) | 用于仿真逻辑系统设计的方法、电子设备及存储介质 | |
CN110325978A (zh) | 回旋镖联接:网络高效、后期物化、分布式联接技术 | |
CN109445841A (zh) | 接口文档管理方法、装置、服务器及存储介质 | |
CN103870335B (zh) | 用于信号流编程的数字信号处理器代码的高效资源管理的系统和方法 | |
US9229980B2 (en) | Composition model for cloud-hosted serving applications | |
US7636911B2 (en) | System and methods for capturing structure of data models using entity patterns | |
CN113778897B (zh) | 接口的自动测试方法、装置、设备及存储介质 | |
CN103631645A (zh) | 一种基于数字医疗的数字家庭中间件系统 | |
CN104731598A (zh) | 一种基于Webkit内核提供网页浏览的方法及装置 | |
US9335987B2 (en) | Data object with common statement series | |
CN116521181B (zh) | 基于游戏系统的脚本数据处理方法、装置、设备及介质 | |
CN112905332A (zh) | 一种基于LVS负载均衡Django架构实现英文PDF在线快速翻译方法 | |
US9092335B2 (en) | Representing a tree structure on a flat structure | |
US20140095718A1 (en) | Maximizing resources in a multi-application processing environment | |
CN111324395A (zh) | 调用方法、装置和计算机可读存储介质 | |
CN115311399A (zh) | 图像渲染方法、装置、电子设备以及存储介质 | |
CN105550046A (zh) | 虚拟操控的方法、装置及系统 | |
CN105979021B (zh) | 一种信息处理方法及用户终端 |
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 |