GAS分析及其移植的实现
- 期刊名字:小型微型计算机系统
- 文件大小:793kb
- 论文作者:苏宏谋,董渊,王生原,田金兰,张素琴
- 作者单位:清华大学
- 更新时间:2020-09-15
- 下载次数:次
第25卷第7期小型微型计箅机系统Vol. 25004年7月MINI- MICRO SYSTEMSJuly 2004GAS分析及其移植的实现苏宏谋,董渊,王生原,田金兰,张素琴(清华大学计算机科学与技术系软件研究所,北京100084)摘要:GAS( GNU AsSembler)是自由软件基金会的GNU工程的一个开放源代码的汇编器,它目前支持多种目标处理器和多种目标文件格式.本文通过对GAS进行分析,重点研究对其进行移植需要进行的工作.然后根据我们面对的目标处理器的特点和要求,对GAS进行了具体的移植工作,说明了移植的步骤和难点等.该工作成果已经成功地应用到该处理器的研制工作中关键词:GAS;汇编器;分析;移植中图分类号:TP314文献标识码:A文章编号:1000-1220(2004)07-1185-03Analysis on GAs and Porting it to Support a New processorSU Hong-mou, DONG Yuan, WANG Sheng-yuan, tian Jin-lan, ZHANG Su-qin(Software Lab, Department of Computer Science and Technology, Tsinghua University, Beijing 100084, China)Abstract: GAS(GNU Assembler) is an open source assembler supporting multi-target, multi object file formats, and issponsored by Free Software Foundation(FSF ). This paper analyses the structure of gas and points out what need todo when porting it to support a new processor. It then gives a real porting process in order to support a specificprocessor and shows the hints which should be helpful to other portings. The finished cross assembler now is workingwell and plays an important role in the processor design project of Tsinghua University.Key words: GAS; assembler: analysis; porting1引言GAS是一个可配置、支持多目标机、多目标文件格式的交叉汇编器是处理器研制过程中不可缺少的系统软件之开放源代码的汇编并且在初期阶段就需要它提供各种支持.一方面,要为处配置程序 configure多目标文什格式理器设计的伤真及逻辑验证阶段提供可靠的支持,能够方便共源程序如主程序as地产生各种测试目的的机器指令序列;另一方面,还要在软、硬件同时设计中起到关键的桥梁作用.因此,快速实现一个可代码段管理 subseg.c等用的汇编器对处理器的研制工作顺利进行是很有帮助的多目标处理器、多目标义<多日标处理器支持Linux系统上广泛地使用GNU的各种开发工具,例如用件格式支持目录cong于语言编译的GCC、用于汇编和链接的 Binutils( Binary多国语言支持目录po文档目录docUtilities)等等,这为我们在研究课题中迅速配置或改造生成测试数据和程序 testsuite所需要的系统软件提供了许多方便.GAS( GNU AsSembler)各种CPU的指令(包括宏指令定义目录. /opcodes/)定义,如X86MIPs等utils的一部分,它是一个支持多目标处理器、多种目标文件格式的汇编器(或交叉汇编器)图1GAS目录结构和内容本文通过对GAS的分析,重点研究了对其进行移植需要Fig 1 Directory structure of GAS行的工作.主要贡献包括:(1)GAS的组成、结构分析及移它的目录结构和内容如图1所示,指令定义放在其上植的步骤和关键技术等;(2)针对我们面对的目标处理器(清级目录上,因为该定义还被 Binutils的反汇编工具和调试器华大学研制)特殊需求的GAS移植工作;(3)解决了非对齐指等使用.通过运行 configure配置程序,GAS自动在 config/目令仿真等技术难点.实践证明,这些工作成果已经成功地应用录下找到对应的文件格式程序和目标处理器程序,然后生成到清华大学处理器的研制工作中所需中国煤化工2.22GAS分析CNMHGGAS是一个单趟扫描的汇编器.由于汇编语言源程序的2.1GAS的组成语句比较简单,因此,它没有独立的词法、语法分析器.它的结收稿日期方数据9基金项目国家自然科学基金项目(6000资助:清华大学骨干人才支持计划资助作者简介苏宏谋硕土研11862004年构如图2所示类似的处理器的后端源程序,从而可以更快的完成移植工作公共部分专川部分2.5GAS的格式后端GAS已经支持a.out、 coff ecoff、elf等格式的目标文件弋码数据段定义表初始化格式.通过编写所需的源程序,可以定义新的格式后端,使L指令定义GAS生成需要的目标文件格式.格式后端包括两个源程序伪指令定义及处理枣假设我们自己的格式命名为fmt,那么格式后端就是: config/源汇编程序上趟汇编汇编后翊obj-fmt.h, config/obj-fmt.c.程序的编写和要求可以参考GAS的 config/ obj-ecoff.h, config/ obj-ecoff.c等源程序标代码/数据段般来说,编写的代码量不是很大.例如,GAS对a.out、coff符号/标号亵格式后端ecoff elf几个格式的支持源程序的代码约分别为1000、5500表400、2600行目标文件3GAS的移植工作图2GAS结构Fig 2 GASs architecture我们面对的目标处理器,是和MIPS4kc类似的RISC片,指令系统基本是它的子集.但是该芯片也有一些特殊之出于移植的目的,GAS的公共部分例如符号标号表管处.例如分析的对象GAS的专用部分包括指令定义、汇编后端和格sWf)不支持非对齐存取数指令,如LwL、sWWP理、表达式分析、代码/数据段管理、重定位表管理等不是本文式后端,是和目标处理器和目标文件格式有关的,是移植工作(2)延时槽数不同,例如其 Branch/Jump的延时槽数是需要涉及的内容;它也就是本文分析的内容2,而MIPS芯片都是1或0;2.3GAS的指令定义(3)不同的指令相关,例如不能连续发射两条 Store类型令定义描述了目标处理器的指令和宏指令定义文件指令,而MIPS芯片没有这个限制放在,/ opcodes/目录下,例如对于MIPS处理器,需要提由于该芯片的指令是MIPS处理器的子集,因此,我们进供../ opcodes/ mips-opc.c源程序行的GAS的移植工作是在MIPS的指令定义、编译后端基础我们以MPS的的非对齐取数指令LWL( Load word上进行的同时,由于GAS支持足够用的目标文件格式,所以Left)为例说明指令定义的内容免去了编写格式后端的工作根据MIPS处理器手册,LWL指令的格式为3.1指令定义格式:LWL.rt, offset(base)/*rt:目标寄存器, offset:指令定义主要是完成未支持指令的仿真、去掉不必要的16位偏移量,base:基址寄存器兴/未支持的指令、增加新指令等描述:rt<- rt MERGE memory[base+ofet以仿真LWL指令为例,需要进行的工作是:其在., opcodes/mips-opc,c里的指令定义为将LWL定义为宏指令.源程序的"lwl","t,o(b)”,0x8800000,0xfc00000,LDD对应具体内容如下RDb WRt,11 yIwI","t,o(b)",0,(int)LwL Ab, INsN/×助记符操作数 match,mask, pinfo, membership/ MACRO,l1}各数据项的具体意义这里不加以详述/兴助记符操作数宏名称宏指令标志兴/另外,对于不同的处理器,其指令定义的数据结构要根据3.2延时槽和指令相关处理具体情况设计,不必相同3.2.1延时槽的处理虽然新处理器的 Branch/Jump有两4GAS的汇编后端个延时槽,但是它要求第一个槽只能放nop指令,第二个槽可汇编后端处理与目标处理器有关的工作.它主要包括以以放入其他没有相关的指令,因此,通过修改 tc-cpu.c的下几项内容append-insn()函数对于 Branch/Jump的处理部分即可达到与目标处理器有关的初始化工作这个要求.而其他的指令调度部分不需要变动汇编指令和展开宏指令3.2中国煤化工关有两类,一类是指令互锁处理伪指令(Instard.发生·优化:如指令调度等CNMH中于一些特权指令,例如其他,如指令数据相关处理等和TLB、 Cache等有关的指令,这些指令主要是由操作系统假设目标处理器名为cpu,则汇编后端包括两个源程序OS)使用的,使用汇编语言编写.由于汇编器不能在汇编的g/tc-cpu. h, config/tc-cpuc时候得到足够的信息进行判断,所以只能手动修改OS的代GAS弓多的目标处理器,例如X86、MI码.汇编器可以处理的是指令互锁的情形ARM、m68k、 Spare等.因此,编写自己的汇编后端时,可参考这部分的修改内容相对较多,主要都集中在 tc-cpu.c的7期苏宏谋等:GAS分析及其移植的实现1187append-insn()部分.我们以对于不能连续发射两条 Store类为例.LWL定义为宏指令以后,需要在汇编器里面进行展指令为例,需要进行的修改如下所示开.这需要完成的工作包括:(1)使用新的目标处理器支持的if (cpu fix &8/*cpu修正标志*/指令编写LWL指令的仿真汇编程序,如表1所示;(2)汇编((pinfo 8. INSN-STORE-MEMORY)该仿真程序,得到实际的指令和跳转指令的相对跳转距离;和*本条指令是存数指令*(3)修改 config/ tc-cpu.c源程序的mcro(函数,在M&8.(prev- pinfo & INSN- STORE-MEMORY))/*上一条也是存数指令*/ L AB宏处写上我们的仿真程序,如表2所示表2MLWL_AB宏处理的C源代码(部分{/*两条连续的 Store类指令之间需要插入一个nop/Table 2 C Source code segments for the processingof the macro M-L wi7 macro的 MLWL-AB宏(部分)*7于新的处理器不支持而又必需的指令,就需要进行仿macro build((char )NULL,&icnt, &offset-exp表1LWL仿真(以对LWL$4,3($3)的仿真为例)Table 1 L WL emulation (taking LWL 4.3($3empreg, sreg,(int )BFD-RELOC-LO16)as the examplelimm.x addnumber= 3:s tempreg- s basemacro build((char ) NULL, &icnt, &immtextoffsetalign 21$empreg. tempreg, (int )BFD-RELOC-LO16):global simlwllinm.Ⅹadd_ number=0x40-0x8-4;/*跳转偏移samll量需要调整*/sll$4,16macro build ((char *)NULL, &icnt, &limm,t S tempreg s base+offsetb $L9d s at, 3SLL. 2:#02beq S at, saddiu S at, $,3需要注意的是,编写宏指令的时候,只能使用唯一一个保LIt S tempreg S basesub s at, 1fist留给汇编器使用的寄存器$at作为临时单元(这个会因处理beg s at, S zerorl s at, 2器的不同而不同,和高级语言编译器如GCC的实现有关系)LL.1#01Sat2这在一定程度上加长了仿真代码,并增加了编写的难度.另Iw s at, o(S at)外,步骤(2)所使用的汇编器必须是在完成3.2的工作以后生$LL2#02sll$4,24成的,以保证生处理器的要求.由此我们也可b at. 1srI $,24以看出,移植工作也是需段进行的,不可能一下子完成b SL.13SILO全部的工作ddiu s at, S3.3S LL3s base4,0($3)4总结offsetresult=[S base +offsetrl s at. 2SLL9对GAS进行的移植已经应用到处理器的研制工作中.应S LL9:用表明,这是一个快速可行的获得支持自行研制的处理器的汇编器的一个方案.这对于处理器研制工作的顺利进行和圆sll Sat,24end simlwl满完成是很重要的rl$4,8References$4,$1FreesoFtwareFoundation(fsf)[eb/ol].http://www.gnu.b SLLSS LLI2 MIPS Teches, MIPS32 4re familyaddiu S at. S3, 3,,.pEtware user's manual[Z]. Document Number: MDo0016nanual[MI仿真可以在OS级进行,也可以在汇编器级进行.汇编器中国煤化工 ogles reference级仿真的方法就是把该指令当作宏指令,在汇编的时候使用CNMHGPSpro tm assembly languageber:007-2418-002特定处理器支持的指令进行展开.使用对应的编译器和提供Silicon Graphics, Inc., 1996了指令仿真功能的汇编器对OS源代码进行编译后生成的附中文参考文献OS在硬件的支持下也就具有了仿真该指令的功能3夏仁霖等,RISC技术参考大全[M].北京:电子工业出版社仍以非芳数据数为例,由于我们面对的目标处理器不199提供有关的指令,因此需要进行仿真.作为例子,仅以LWL
-
C4烯烃制丙烯催化剂 2020-09-15
-
煤基聚乙醇酸技术进展 2020-09-15
-
生物质能的应用工程 2020-09-15
-
我国甲醇工业现状 2020-09-15
-
JB/T 11699-2013 高处作业吊篮安装、拆卸、使用技术规程 2020-09-15
-
石油化工设备腐蚀与防护参考书十本免费下载,绝版珍藏 2020-09-15
-
四喷嘴水煤浆气化炉工业应用情况简介 2020-09-15
-
Lurgi和ICI低压甲醇合成工艺比较 2020-09-15
-
甲醇制芳烃研究进展 2020-09-15
-
精甲醇及MTO级甲醇精馏工艺技术进展 2020-09-15