CN100377088C - 二进制翻译中局部变量识别和提升的处理方法 - Google Patents

二进制翻译中局部变量识别和提升的处理方法 Download PDF

Info

Publication number
CN100377088C
CN100377088C CNB2005100514487A CN200510051448A CN100377088C CN 100377088 C CN100377088 C CN 100377088C CN B2005100514487 A CNB2005100514487 A CN B2005100514487A CN 200510051448 A CN200510051448 A CN 200510051448A CN 100377088 C CN100377088 C CN 100377088C
Authority
CN
China
Prior art keywords
local variable
local
translation
instruction
lifting
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
Application number
CNB2005100514487A
Other languages
English (en)
Other versions
CN1828539A (zh
Inventor
崔慧敏
武成岗
谢海斌
张兆庆
冯晓兵
唐锋
杨浩
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Institute of Computing Technology of CAS
Original Assignee
Institute of Computing Technology of CAS
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Institute of Computing Technology of CAS filed Critical Institute of Computing Technology of CAS
Priority to CNB2005100514487A priority Critical patent/CN100377088C/zh
Publication of CN1828539A publication Critical patent/CN1828539A/zh
Application granted granted Critical
Publication of CN100377088C publication Critical patent/CN100377088C/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

本发明公开了一种二进制翻译中对局部变量识别和提升的方法包括以下步骤:a、对翻译单元进行条件判别,判断在此翻译单元内能否进行局部变量的提升;b、依次对可处理翻译单元的每个基本块进行处理,对每条指令的局部变量进行识别;c、将b步骤中识别出来的局部变量进行提升,将识别出来的信息传播到整个翻译单元,并在必要的时候进行同步;本发明克服现有二进制翻译技术中局部变量不能和其他内存操作数区别对待的缺陷,通过对局部变量识别和提升,提高翻译质量和效果,从而提高二进制翻译的性能。

Description

二进制翻译中局部变量识别和提升的处理方法
技术领域
本发明涉及计算机领域的二进制翻译技术,尤其涉及对X86处理器中属于局部变量的内存操作数的处理方法。
背景技术
编译是计算机自身领域的关键技术,二进制翻译则是编译的一个重要研究方向。早在1987年HP公司就开发了第一个商用二进制翻译系统Bergh et al。接下来,许多公司和研究机构也相继展开了这方面的研究,其中最具有代表性的有HP、IBM、Digital、AT&T、APPLE、Transmeta、澳大利亚Queensland大学、奥地利维也纳技术大学等,目前,Intel设立在中国的软件中心也加入了这个行列。
二进制翻译目前正在成为解决软件移植问题的一个研究热点。众所周知,新开发的处理器如果其指令级体系结构(ISA)不向前兼容,则会失去现有软件的支持,影响其推广和应用。这就迫使设计者使用宝贵的芯片空间来兼容老处理器,这样既增加新处理器的复杂度和功耗,影响其主频的提高,又阻碍了处理器的发展。二进制翻译技术为新旧处理器架起了一座桥梁,将现有的软件移植到新开发处理器上执行,使得新处理器摆脱向前兼容的约束。
二进制翻译技术对促进国产处理器的发展也很有意义。近十多年来,中国的信息产业得以飞速发展,并正在逐步走向成熟。随着知识和经验的积累,业界精英们开始向计算机领域中最为核心的技术挑战。以“龙芯”、“星光”、“方舟”、“汉芯”、“神威”、“万通”、“北大众志”等为代表的国产通用或嵌入式微处理器不断涌现,打破了中国无“芯”的局面。但由于Intel在X86系列微处理器上各种专利的限制,使得国内的许多微处理器设计者不得不采用与X86系列微处理器不兼容的ISA。众所周知,X86系列机器作为当前的主流机型,已经拥有极其丰富的应用软件。ISA的不兼容导致国产微处理器的应用软件与X86微处理器相比显得有些匮乏,从某种程度上影响了其推广和应用的步伐。因此开展二进制翻译的研究,同样可以丰富国产处理器的应用软件,为这些民族产业扩大市场提供支持。
在实现以X86为源机器的二进制翻译的过程中,一个较为棘手的问题是如何翻译X86中内存操作数的使用。在X86处理器中,由于寄存器数量很少,所以很多操作都支持内存操作数,这样很多局部变量都不需要取到寄存器中,而可以作为内存操作数直接使用。但是在很多RISC机器上都不支持内存操作数直接参与运算,需要先将其取到寄存器中。因此,如果处理不好,会导致在目标机上对内存进行频繁的存取,而RISC上的寄存器则得不到充分的利用,直接使二进制翻译系统的性能急剧下降。
局部变量是一个针对高级语言而言的概念,局部变量的作用范围仅限于一个函数或一个过程。高级语言的程序经过编译器编译生成目标代码,每个函数或过程对应目标代码中的一个栈帧。也就是说,在目标代码中,局部变量的生存周期仅限于一个栈帧,当函数(或过程)退出时,整个栈帧的内容都将被抛弃,它的局部变量的生存周期结束。
在X86的目标代码中,局部变量的表现形式通常是内存操作数,即通过EBP(中文)加上一个偏移来访问的内存地址(少数情况下也以ESP为基址)。对大多数编译器编译生成的目标代码而言,一个子函数(或子过程)内部,EBP是固定不变的。因此,通常以EBP为基址且偏移相同的内存操作数可以认为是同一个变量。对于以ESP为基址的内存操作数,如果其偏移相同,并且能够确定ESP的值相同,那么也可以认为是同一个变量。
在目前的以X86为源的二进制翻译系统中,是将X86的内存操作数统一对待,并不对局部变量进行识别,然后经过内存分析来尽可能的减少内存操作。FX!32采用的就是这种方法。
上述方法带来的弊端有两个:1)局部变量不能和其他内存操作数区别对待,这样就无法充分利用局部变量的特点,从而无法消除某些访存操作。2)在二进制代码上进行内存分析得到的结果过于粗略。
发明内容
本发明所要解决的技术问题是提供一种二进制翻译中局部变量识别和提升的处理方法,以克服现有二进制翻译技术中局部变量不能和其他内存操作数区别对待的缺陷,提高翻译质量和效果,从而提高了二进制翻译的性能。
为了解决上述技术问题,本发明提供的一种二进制翻译中对局部变量识别和提升的方法,包括以下步骤:
a、对翻译单元进行条件判别,判断在此翻译单元内能否进行局部变量的提升;
b、依次对可处理翻译单元的每个基本块进行处理,对每条指令的局部变量进行识别;将识别出来的局部变量进行记录,需要设置一个符号表,来记录局部变量的信息;
c、将b步骤中识别出来的局部变量进行提升,将识别出来的信息传播到整个翻译单元,并在符号表中的内容和内存中的不一致时进行同步。
在上述方案中,步骤b)包括以下步骤:
B1)判断当前指令中是否有EBP+offset或ESP+offset类型的操作数,如果有,则实施步骤B2),否则转步骤B6);
B2)判断符号表中是否有此地址对应的符号表项,如果有,则转步骤B4);
B3)将此符号加入符号表;
B4)用符号替换内存操作数;
B5)对指令进行必要的修改,例如leasymbol,reg指令需要替换为mov&symbol,reg指令;
B6)如果当前指令的下一条指令为空,则结束;
B7)对下一条指令进行处理。
在上述方案中,步骤c中,采用同步的方法来保证翻译的假设,步骤c包含4个子步骤:
C1)对符号表中所有的符号及其地址进行复写传播;
C2)在控制流图上,为每条指令计算如下四个集合:一定使用的局部变量;可能使用的局部变量;一定修改的局部变量;可能修改的局部变量;
C3)为了实时的保持符号表中内容和内存中的一致性,进行同步;
C4)删除冗余的访存操作。
在上述方案中,采用同步的方法来保证符号表内容和内存的一致性。
在上述方案中,同步方式分为实时同步和延迟同步两种同步方式,同步可以采用延迟同步的方式进行,延迟同步减少冗余的访存操作。
本发明的优点在于:
本发明提供的二进制翻译中局部变量识别和提升的处理方法具有如下两个特点:一。将局部变量和其他内存操作数区分开来,充分利用局部变量生存周期短的特点,来尽可能的减少访存操作的出现。二。采用同步的方法,确保在必要的时候,符号表中的信息和内存中的信息保持一致,并可以采用延迟同步的方法,来尽可能的减少不必要的操作。
本发明能够很好地识别X86可执行程序中的局部变量,并对其进行提升,及在后续阶段尽可能的为其分配寄存器,从而提高二进制翻译系统的性能。
附图说明
图1是本发明的二进制翻译中的局部变量识别和提升流程图;
图2是本发明的局部变量识别的处理方法流程图;
图3是本发明的局部变量提升的处理方法流程图。
具体实施方式
为了便于对本方法的介绍。我们先要明确两个概念:翻译器和翻译单元。
本方法所提到的二进制翻译系统由两个部分组成:翻译器和翻译单元。翻译器的作用是对源二进制代码进行翻译,将源二进制代码翻译成目标机器上可以执行的代码,即本地码。翻译单元是二进制翻译进行翻译的基本单元,在划分时总是尽可能的使翻译单元接近一个函数体(或过程体)。
翻译器既可以在静态也可以动态执行,静态进行翻译不会占用系统总的执行时间,即使在动态运行时进行翻译,也只需进行一次翻译,翻译的所产生的本地码则可以供多次执行。
本发明建立在如下两个基本地原则上:一是尽可能的利用目标机器上的通用寄存器;二是尽可能的减少访存操作。从而以达到提高本地码执行的效率的目的。
下面参照附图详细说明本发明的技术方案。
本发明提出了一个可以对局部变量进行识别和提升的方法。局部变量提升在整个二进制翻译过程中的位置如图1所示。
步骤10:需要判断当前的翻译单元是否满足局部变量提升的条件。
直观上来讲,要确认一个以EBP或ESP(基址寄存器或栈顶寄存器)为基址的内存操作数是局部变量,那么必须满足从函数入口沿各个路径到达此操作数的时候,其基址应该是相同的。否则,如果有两条路径到达此操作数时,基址值不相同,那就意味着此操作数对应两个内存地址,因此就不可能是局部变量。
归纳来讲,局部变量能够进行提升的条件是:在一个翻译单元的控制流图中,从入口开始沿任何一条路经到达任何一个结点时,EBP(ESP)的值都相同。如果此条件成立,则进行下面的步骤;如果不成立,则不能执行。
步骤20:依次对源二进制程序中的每个基本块进行处理,对每个基本块中的每条指令进行局部变量的识别,如图2所示。
为了对已经识别出来的局部变量进行记录,需要设置一个符号表,来记录局部变量的信息。
步骤21判断当前指令中是否有EBP+offset或ESP+offset类型的操作数,如果有,则实施步骤2.2,否则转步骤26。
步骤22判断符号表中是否有此地址对应的符号表项,如果有,则转步骤2.4。
步骤23将此符号加入符号表。
步骤24用符号替换内存操作数。
步骤25对指令进行必要的修改,例如lea symbol,reg指令需要替换为mow&symbol,reg指令。
步骤26如果当前指令的下一条指令为空,则结束。
步骤27对下一条指令进行处理。
步骤30:对识别出来的局部变量进行提升,如图3所示。
此步骤的作用是将识别出来的局部变量传播到整个翻译单元。
步骤31,对符号表中所有的符号及其地址进行复写传播(之所以对符号的地址进行传播,是因为它们也可以作为操作数出现在指令中)。
步骤32,在控制流图上,为每条指令计算如下四个集合:一定使用的局部变量;可能使用的局部变量;一定修改的局部变量;可能修改的局部变量。
步骤33,为了实时的保持符号表中内容和内存中的一致性,我们应该在每条指令之前,将其可能使用的符号值写回堆栈;在指令之后,将其可能定义的符号从堆栈中取出放在符号表中,以继续后面的提升过程。我们将这个过程称为实时同步,但是实时同步带来的开销很大,而且会带来很多不必要的同步操作。因此可以实施延迟同步。
步骤34进行数据流分析,消除冗余的访存操作。
以上为本发明的具体方法。本发明所提供的二进制翻译中局部变量提升方法具有如下两个特点:一、将局部变量和其他内存操作数区分开来,充分利用局部变量生存周期短的特点,来尽可能的减少访存操作的出现。二、采用同步的方法,确保在必要的时候,符号表中的信息和内存中的信息保持一致,并可以采用延迟同步的方法,来尽可能的减少不必要的同步操作。
本发明根据局部变量能够进行提升的条件,将X86的翻译单元分为两类。对于那些不能进行局部变量提升的翻译单元,所产生的完全是用于实现X86翻译单元的本地代码,不会由于此功能的加入而影响到这部分程序的效率。对于那些能够进行局部变量提升的翻译单元,对其进行识别和提升,使得局部变量能够参与后续的寄存器分配,从而减少访存操作。与FX!32中将所有内存操作数统一对待的方法相比,本发明能够更有效的减少访存操作,提高翻译后代码的性能。
最后应说明的是:以上实施例仅用以说明而非限制本发明的技术方案,尽管参照上述实施例对本发明进行了详细说明,本领域的普通技术人员应当理解:依然可以对本发明进行修改或者等同替换,而不脱离本发明的精神和范围的任何修改或局部替换,其均应涵盖在本发明的权利要求范围当中。

Claims (5)

1.一种二进制翻译中对局部变量识别和提升的方法,其特征在于,包括以下步骤:
a、对翻译单元进行条件判别,判断在此翻译单元内能否进行局部变量的提升;
b、依次对可处理翻译单元的每个基本块进行处理,对每条指令的局部变量进行识别;将识别出来的局部变量进行记录,设置一个符号表,来记录局部变量的信息;
c、将b步骤中识别出来的局部变量进行提升,将识别出来的信息传播到整个翻译单元,并在符号表中的内容和内存中的内容不一致时进行同步。
2.如权利要求1所述的二进制翻译中对局部变量识别和提升的方法,其特征在于,所述的步骤b中,包括以下步骤:
B1)判断当前指令中是否有EBP+offset或ESP+offset类型的操作数,如果有,则实施步骤B2,否则转步骤B6;
B2)判断符号表中是否有地址EBP+offset或ESP+offset对应的符号表项,如果有,则转步骤B4;
B3)将此符号加入符号表;
B4)用符号替换内存操作数;
B5)将“lea symbol,reg”指令替换为“mov &symbol,reg”指令;
B6)如果当前指令的下一条指令为空,则结束;
B7)对下一条指令进行处理。
3.如权利要求1所述的二进制翻译中对局部变量识别和提升的方法,其特征在于,所述的步骤C包含以下4个子步骤:
C1)对符号表中所有的符号及其地址进行复写传播;
C2)在控制流图上,为每条指令计算如下四个集合:一定使用的局部变量;可能使用的局部变量;一定修改的局部变量;可能修改的局部变量;
C3)为了实时的保持符号表中内容和内存中的一致性,进行同步;
C4)删除冗余的访存操作。
4.如权利要求3所述的二进制翻译中对局部变量识别和提升的方法,其特征是采用同步的方法来保证符号表内容和内存的一致性。
5.如权利要求3所述的二进制翻译中对局部变量识别和提升的方法,其特征是同步方式分为实时同步和延迟同步两种同步方式,采用延迟同步的方式进行同步,减少冗余的访存操作。
CNB2005100514487A 2005-03-04 2005-03-04 二进制翻译中局部变量识别和提升的处理方法 Active CN100377088C (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CNB2005100514487A CN100377088C (zh) 2005-03-04 2005-03-04 二进制翻译中局部变量识别和提升的处理方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CNB2005100514487A CN100377088C (zh) 2005-03-04 2005-03-04 二进制翻译中局部变量识别和提升的处理方法

Publications (2)

Publication Number Publication Date
CN1828539A CN1828539A (zh) 2006-09-06
CN100377088C true CN100377088C (zh) 2008-03-26

Family

ID=36946950

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB2005100514487A Active CN100377088C (zh) 2005-03-04 2005-03-04 二进制翻译中局部变量识别和提升的处理方法

Country Status (1)

Country Link
CN (1) CN100377088C (zh)

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030066056A1 (en) * 2001-09-28 2003-04-03 Petersen Paul M. Method and apparatus for accessing thread-privatized global storage objects
US20030126587A1 (en) * 2002-01-02 2003-07-03 Roni Rosner Controlling compatibility levels of binary translations between instruction set architectures
CN1529229A (zh) * 2003-10-21 2004-09-15 中国科学院计算技术研究所 二进制翻译中标志位的优化处理方法
CN1570870A (zh) * 2003-03-13 2005-01-26 诺斯罗普-格鲁曼公司 终极管道和最优重排技术
US20050050389A1 (en) * 2003-08-25 2005-03-03 Chaurasia Rajesh Kumar Method of and apparatus for cross-platform core dumping during dynamic binary translation

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030066056A1 (en) * 2001-09-28 2003-04-03 Petersen Paul M. Method and apparatus for accessing thread-privatized global storage objects
US20030126587A1 (en) * 2002-01-02 2003-07-03 Roni Rosner Controlling compatibility levels of binary translations between instruction set architectures
CN1570870A (zh) * 2003-03-13 2005-01-26 诺斯罗普-格鲁曼公司 终极管道和最优重排技术
US20050050389A1 (en) * 2003-08-25 2005-03-03 Chaurasia Rajesh Kumar Method of and apparatus for cross-platform core dumping during dynamic binary translation
CN1529229A (zh) * 2003-10-21 2004-09-15 中国科学院计算技术研究所 二进制翻译中标志位的优化处理方法

Also Published As

Publication number Publication date
CN1828539A (zh) 2006-09-06

Similar Documents

Publication Publication Date Title
CN100465895C (zh) 编译器、编译方法
CN103250131B (zh) 包括用于早期远分支预测的影子缓存的单周期多分支预测
US7475202B2 (en) Memory controller and method for optimized read/modify/write performance
CN104487941B (zh) 在向量处理过程中控制处理数据元素的顺序
US7340574B2 (en) Method and apparatus for synchronizing an industrial controller with a redundant controller
CN101523344B (zh) 用于解析同时所预测分支指令的方法及系统
CN101221541B (zh) 用于soc的可编程通信控制器
CN100401258C (zh) 用于在执行被转换指令时维持环境的方法
US20170249144A1 (en) Combining loads or stores in computer processing
CN101535951A (zh) 用于辨识子例程调用的方法及设备
CN103488464B (zh) 微处理器以及微处理器操作方法
CN105051680A (zh) 使用硬件指针的simd核心中的发散分支解决方案
WO2012099625A1 (en) Architecture optimizer
CN103955354B (zh) 重定位方法和装置
CN109145534A (zh) 针对软件虚拟机保护的反混淆系统及方法
CN102707933A (zh) 用于管理返回堆栈的方法和设备
CN101495960A (zh) 有效的中断返回地址保存机制
CN105447285A (zh) 一种提高OpenCL硬件执行效率的方法
CN100377088C (zh) 二进制翻译中局部变量识别和提升的处理方法
TW201218008A (en) Intelligent architecture creator
CN103106097A (zh) 一种即时编译系统中的栈运算优化方法
CN103019865B (zh) 虚拟机监控方法和系统
CN106874072A (zh) 一种基于PowerPC处理器的嵌入式操作系统分区虚拟中断的处理方法
Wolf et al. Data flow based cache prediction using local simulation
CN100409180C (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
C14 Grant of patent or utility model
GR01 Patent grant