GAS分析及其移植的實(shí)現(xiàn)
- 期刊名字:小型微型計(jì)算機(jī)系統(tǒng)
- 文件大?。?93kb
- 論文作者:蘇宏謀,董淵,王生原,田金蘭,張素琴
- 作者單位:清華大學(xué)
- 更新時(shí)間:2020-09-15
- 下載次數(shù):次
第25卷第7期小型微型計(jì)箅機(jī)系統(tǒng)Vol. 25004年7月MINI- MICRO SYSTEMSJuly 2004GAS分析及其移植的實(shí)現(xiàn)蘇宏謀,董淵,王生原,田金蘭,張素琴(清華大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)系軟件研究所,北京100084)摘要:GAS( GNU AsSembler)是自由軟件基金會(huì)的GNU工程的一個(gè)開放源代碼的匯編器,它目前支持多種目標(biāo)處理器和多種目標(biāo)文件格式.本文通過對(duì)GAS進(jìn)行分析,重點(diǎn)研究對(duì)其進(jìn)行移植需要進(jìn)行的工作.然后根據(jù)我們面對(duì)的目標(biāo)處理器的特點(diǎn)和要求,對(duì)GAS進(jìn)行了具體的移植工作,說明了移植的步驟和難點(diǎn)等.該工作成果已經(jīng)成功地應(yīng)用到該處理器的研制工作中關(guān)鍵詞:GAS;匯編器;分析;移植中圖分類號(hào):TP314文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):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是一個(gè)可配置、支持多目標(biāo)機(jī)、多目標(biāo)文件格式的交叉匯編器是處理器研制過程中不可缺少的系統(tǒng)軟件之開放源代碼的匯編并且在初期階段就需要它提供各種支持.一方面,要為處配置程序 configure多目標(biāo)文什格式理器設(shè)計(jì)的傷真及邏輯驗(yàn)證階段提供可靠的支持,能夠方便共源程序如主程序as地產(chǎn)生各種測(cè)試目的的機(jī)器指令序列;另一方面,還要在軟、硬件同時(shí)設(shè)計(jì)中起到關(guān)鍵的橋梁作用.因此,快速實(shí)現(xiàn)一個(gè)可代碼段管理 subseg.c等用的匯編器對(duì)處理器的研制工作順利進(jìn)行是很有幫助的多目標(biāo)處理器、多目標(biāo)義<多日標(biāo)處理器支持Linux系統(tǒng)上廣泛地使用GNU的各種開發(fā)工具,例如用件格式支持目錄cong于語言編譯的GCC、用于匯編和鏈接的 Binutils( Binary多國語言支持目錄po文檔目錄docUtilities)等等,這為我們?cè)谘芯空n題中迅速配置或改造生成測(cè)試數(shù)據(jù)和程序 testsuite所需要的系統(tǒng)軟件提供了許多方便.GAS( GNU AsSembler)各種CPU的指令(包括宏指令定義目錄. /opcodes/)定義,如X86MIPs等utils的一部分,它是一個(gè)支持多目標(biāo)處理器、多種目標(biāo)文件格式的匯編器(或交叉匯編器)圖1GAS目錄結(jié)構(gòu)和內(nèi)容本文通過對(duì)GAS的分析,重點(diǎn)研究了對(duì)其進(jìn)行移植需要Fig 1 Directory structure of GAS行的工作.主要貢獻(xiàn)包括:(1)GAS的組成、結(jié)構(gòu)分析及移它的目錄結(jié)構(gòu)和內(nèi)容如圖1所示,指令定義放在其上植的步驟和關(guān)鍵技術(shù)等;(2)針對(duì)我們面對(duì)的目標(biāo)處理器(清級(jí)目錄上,因?yàn)樵摱x還被 Binutils的反匯編工具和調(diào)試器華大學(xué)研制)特殊需求的GAS移植工作;(3)解決了非對(duì)齊指等使用.通過運(yùn)行 configure配置程序,GAS自動(dòng)在 config/目令仿真等技術(shù)難點(diǎn).實(shí)踐證明,這些工作成果已經(jīng)成功地應(yīng)用錄下找到對(duì)應(yīng)的文件格式程序和目標(biāo)處理器程序,然后生成到清華大學(xué)處理器的研制工作中所需中國煤化工2.22GAS分析CNMHGGAS是一個(gè)單趟掃描的匯編器.由于匯編語言源程序的2.1GAS的組成語句比較簡(jiǎn)單,因此,它沒有獨(dú)立的詞法、語法分析器.它的結(jié)收稿日期方數(shù)據(jù)9基金項(xiàng)目國家自然科學(xué)基金項(xiàng)目(6000資助:清華大學(xué)骨干人才支持計(jì)劃資助作者簡(jiǎn)介蘇宏謀碩土研11862004年構(gòu)如圖2所示類似的處理器的后端源程序,從而可以更快的完成移植工作公共部分專川部分2.5GAS的格式后端GAS已經(jīng)支持a.out、 coff ecoff、elf等格式的目標(biāo)文件弋碼數(shù)據(jù)段定義表初始化格式.通過編寫所需的源程序,可以定義新的格式后端,使L指令定義GAS生成需要的目標(biāo)文件格式.格式后端包括兩個(gè)源程序偽指令定義及處理?xiàng)椉僭O(shè)我們自己的格式命名為fmt,那么格式后端就是: config/源匯編程序上趟匯編匯編后翊obj-fmt.h, config/obj-fmt.c.程序的編寫和要求可以參考GAS的 config/ obj-ecoff.h, config/ obj-ecoff.c等源程序標(biāo)代碼/數(shù)據(jù)段般來說,編寫的代碼量不是很大.例如,GAS對(duì)a.out、coff符號(hào)/標(biāo)號(hào)褻格式后端ecoff elf幾個(gè)格式的支持源程序的代碼約分別為1000、5500表400、2600行目標(biāo)文件3GAS的移植工作圖2GAS結(jié)構(gòu)Fig 2 GASs architecture我們面對(duì)的目標(biāo)處理器,是和MIPS4kc類似的RISC片,指令系統(tǒng)基本是它的子集.但是該芯片也有一些特殊之出于移植的目的,GAS的公共部分例如符號(hào)標(biāo)號(hào)表管處.例如分析的對(duì)象GAS的專用部分包括指令定義、匯編后端和格sWf)不支持非對(duì)齊存取數(shù)指令,如LwL、sWWP理、表達(dá)式分析、代碼/數(shù)據(jù)段管理、重定位表管理等不是本文式后端,是和目標(biāo)處理器和目標(biāo)文件格式有關(guān)的,是移植工作(2)延時(shí)槽數(shù)不同,例如其 Branch/Jump的延時(shí)槽數(shù)是需要涉及的內(nèi)容;它也就是本文分析的內(nèi)容2,而MIPS芯片都是1或0;2.3GAS的指令定義(3)不同的指令相關(guān),例如不能連續(xù)發(fā)射兩條 Store類型令定義描述了目標(biāo)處理器的指令和宏指令定義文件指令,而MIPS芯片沒有這個(gè)限制放在,/ opcodes/目錄下,例如對(duì)于MIPS處理器,需要提由于該芯片的指令是MIPS處理器的子集,因此,我們進(jìn)供../ opcodes/ mips-opc.c源程序行的GAS的移植工作是在MIPS的指令定義、編譯后端基礎(chǔ)我們以MPS的的非對(duì)齊取數(shù)指令LWL( Load word上進(jìn)行的同時(shí),由于GAS支持足夠用的目標(biāo)文件格式,所以Left)為例說明指令定義的內(nèi)容免去了編寫格式后端的工作根據(jù)MIPS處理器手冊(cè),LWL指令的格式為3.1指令定義格式:LWL.rt, offset(base)/*rt:目標(biāo)寄存器, offset:指令定義主要是完成未支持指令的仿真、去掉不必要的16位偏移量,base:基址寄存器興/未支持的指令、增加新指令等描述:rt<- rt MERGE memory[base+ofet以仿真LWL指令為例,需要進(jìn)行的工作是:其在., opcodes/mips-opc,c里的指令定義為將LWL定義為宏指令.源程序的"lwl","t,o(b)”,0x8800000,0xfc00000,LDD對(duì)應(yīng)具體內(nèi)容如下RDb WRt,11 yIwI","t,o(b)",0,(int)LwL Ab, INsN/×助記符操作數(shù) match,mask, pinfo, membership/ MACRO,l1}各數(shù)據(jù)項(xiàng)的具體意義這里不加以詳述/興助記符操作數(shù)宏名稱宏指令標(biāo)志興/另外,對(duì)于不同的處理器,其指令定義的數(shù)據(jù)結(jié)構(gòu)要根據(jù)3.2延時(shí)槽和指令相關(guān)處理具體情況設(shè)計(jì),不必相同3.2.1延時(shí)槽的處理雖然新處理器的 Branch/Jump有兩4GAS的匯編后端個(gè)延時(shí)槽,但是它要求第一個(gè)槽只能放nop指令,第二個(gè)槽可匯編后端處理與目標(biāo)處理器有關(guān)的工作.它主要包括以以放入其他沒有相關(guān)的指令,因此,通過修改 tc-cpu.c的下幾項(xiàng)內(nèi)容append-insn()函數(shù)對(duì)于 Branch/Jump的處理部分即可達(dá)到與目標(biāo)處理器有關(guān)的初始化工作這個(gè)要求.而其他的指令調(diào)度部分不需要變動(dòng)匯編指令和展開宏指令3.2中國煤化工關(guān)有兩類,一類是指令互鎖處理偽指令(Instard.發(fā)生·優(yōu)化:如指令調(diào)度等CNMH中于一些特權(quán)指令,例如其他,如指令數(shù)據(jù)相關(guān)處理等和TLB、 Cache等有關(guān)的指令,這些指令主要是由操作系統(tǒng)假設(shè)目標(biāo)處理器名為cpu,則匯編后端包括兩個(gè)源程序OS)使用的,使用匯編語言編寫.由于匯編器不能在匯編的g/tc-cpu. h, config/tc-cpuc時(shí)候得到足夠的信息進(jìn)行判斷,所以只能手動(dòng)修改OS的代GAS弓多的目標(biāo)處理器,例如X86、MI碼.匯編器可以處理的是指令互鎖的情形ARM、m68k、 Spare等.因此,編寫自己的匯編后端時(shí),可參考這部分的修改內(nèi)容相對(duì)較多,主要都集中在 tc-cpu.c的7期蘇宏謀等:GAS分析及其移植的實(shí)現(xiàn)1187append-insn()部分.我們以對(duì)于不能連續(xù)發(fā)射兩條 Store類為例.LWL定義為宏指令以后,需要在匯編器里面進(jìn)行展指令為例,需要進(jìn)行的修改如下所示開.這需要完成的工作包括:(1)使用新的目標(biāo)處理器支持的if (cpu fix &8/*cpu修正標(biāo)志*/指令編寫LWL指令的仿真匯編程序,如表1所示;(2)匯編((pinfo 8. INSN-STORE-MEMORY)該仿真程序,得到實(shí)際的指令和跳轉(zhuǎn)指令的相對(duì)跳轉(zhuǎn)距離;和*本條指令是存數(shù)指令*(3)修改 config/ tc-cpu.c源程序的mcro(函數(shù),在M&8.(prev- pinfo & INSN- STORE-MEMORY))/*上一條也是存數(shù)指令*/ L AB宏處寫上我們的仿真程序,如表2所示表2MLWL_AB宏處理的C源代碼(部分{/*兩條連續(xù)的 Store類指令之間需要插入一個(gè)nop/Table 2 C Source code segments for the processingof the macro M-L wi7 macro的 MLWL-AB宏(部分)*7于新的處理器不支持而又必需的指令,就需要進(jìn)行仿macro build((char )NULL,&icnt, &offset-exp表1LWL仿真(以對(duì)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;/*跳轉(zhuǎn)偏移samll量需要調(diào)整*/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需要注意的是,編寫宏指令的時(shí)候,只能使用唯一一個(gè)保LIt S tempreg S basesub s at, 1fist留給匯編器使用的寄存器$at作為臨時(shí)單元(這個(gè)會(huì)因處理beg s at, S zerorl s at, 2器的不同而不同,和高級(jí)語言編譯器如GCC的實(shí)現(xiàn)有關(guān)系)LL.1#01Sat2這在一定程度上加長(zhǎng)了仿真代碼,并增加了編寫的難度.另Iw s at, o(S at)外,步驟(2)所使用的匯編器必須是在完成3.2的工作以后生$LL2#02sll$4,24成的,以保證生處理器的要求.由此我們也可b at. 1srI $,24以看出,移植工作也是需段進(jìn)行的,不可能一下子完成b SL.13SILO全部的工作ddiu s at, S3.3S LL3s base4,0($3)4總結(jié)offsetresult=[S base +offsetrl s at. 2SLL9對(duì)GAS進(jìn)行的移植已經(jīng)應(yīng)用到處理器的研制工作中.應(yīng)S LL9:用表明,這是一個(gè)快速可行的獲得支持自行研制的處理器的匯編器的一個(gè)方案.這對(duì)于處理器研制工作的順利進(jìn)行和圓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級(jí)進(jìn)行,也可以在匯編器級(jí)進(jìn)行.匯編器中國煤化工 ogles reference級(jí)仿真的方法就是把該指令當(dāng)作宏指令,在匯編的時(shí)候使用CNMHGPSpro tm assembly languageber:007-2418-002特定處理器支持的指令進(jìn)行展開.使用對(duì)應(yīng)的編譯器和提供Silicon Graphics, Inc., 1996了指令仿真功能的匯編器對(duì)OS源代碼進(jìn)行編譯后生成的附中文參考文獻(xiàn)OS在硬件的支持下也就具有了仿真該指令的功能3夏仁霖等,RISC技術(shù)參考大全[M].北京:電子工業(yè)出版社仍以非芳數(shù)據(jù)數(shù)為例,由于我們面對(duì)的目標(biāo)處理器不199提供有關(guān)的指令,因此需要進(jìn)行仿真.作為例子,僅以LWL
-
C4烯烴制丙烯催化劑 2020-09-15
-
煤基聚乙醇酸技術(shù)進(jìn)展 2020-09-15
-
生物質(zhì)能的應(yīng)用工程 2020-09-15
-
我國甲醇工業(yè)現(xiàn)狀 2020-09-15
-
石油化工設(shè)備腐蝕與防護(hù)參考書十本免費(fèi)下載,絕版珍藏 2020-09-15
-
四噴嘴水煤漿氣化爐工業(yè)應(yīng)用情況簡(jiǎn)介 2020-09-15
-
Lurgi和ICI低壓甲醇合成工藝比較 2020-09-15
-
甲醇制芳烴研究進(jìn)展 2020-09-15
-
精甲醇及MTO級(jí)甲醇精餾工藝技術(shù)進(jìn)展 2020-09-15



