GAS分析及其移植的實(shí)現 GAS分析及其移植的實(shí)現

GAS分析及其移植的實(shí)現

  • 期刊名字:小型微型計算機系統
  • 文件大?。?93kb
  • 論文作者:蘇宏謀,董淵,王生原,田金蘭,張素琴
  • 作者單位:清華大學(xué)
  • 更新時(shí)間:2020-09-15
  • 下載次數:次
論文簡(jiǎn)介

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

論文截圖
版權:如無(wú)特殊注明,文章轉載自網(wǎng)絡(luò ),侵權請聯(lián)系cnmhg168#163.com刪除!文件均為網(wǎng)友上傳,僅供研究和學(xué)習使用,務(wù)必24小時(shí)內刪除。
欧美AAAAAA级午夜福利_国产福利写真片视频在线_91香蕉国产观看免费人人_莉莉精品国产免费手机影院