本發(fā)明專利技術(shù)提供了一種用于處理應(yīng)用程序中的內(nèi)容表(TOC)訪問溢出的方法和系統(tǒng)。其中,該方法在對編譯產(chǎn)生的目標文件進行鏈接時,確定該目標文件中的TOC訪問是否存在溢出。如果在目標文件中的TOC訪問存在溢出,則對該目標文件所對應(yīng)的源文件進行再次編譯,以產(chǎn)生沒有TOC溢出的目標文件,并對目標文件進行再次鏈接,從而產(chǎn)生應(yīng)用程序的可執(zhí)行文件。本發(fā)明專利技術(shù)通過采用兩輪編譯,僅對確實存在TOC溢出的TOC表項才產(chǎn)生兩條指令形式的雙指令TOC訪問。因此,該方案具有很好的易用性,并且降低了性能損失。
【技術(shù)實現(xiàn)步驟摘要】
本專利技術(shù)涉及應(yīng)用程序的處理,尤其涉及一種用于處理應(yīng)用程序中的內(nèi)容表(TOC)訪問溢出的方法和系統(tǒng)。
技術(shù)介紹
用于AIX和Linux的POWER系統(tǒng)是IBM服務(wù)器系列的主要產(chǎn)品,其中,工具鏈的易用性(tools chain usability)和性能是在POWER系統(tǒng)上進行開發(fā)的一個很重要的基礎(chǔ)。對于POWER系統(tǒng)來說,在對應(yīng)用程序進行構(gòu)建的過程中,存在一個被稱為“T0C溢出(overflow) ”的問題,該TOC溢出會限制全局數(shù)據(jù)/代碼的使用,常常為POWER系統(tǒng)開發(fā)人員帶來很大的不便。
技術(shù)實現(xiàn)思路
本專利技術(shù)希望提供一種新的方案來處理應(yīng)用程序構(gòu)建中出現(xiàn)的TOC溢出問題。依據(jù)本專利技術(shù)的一個實施例,提供了一種用于處理應(yīng)用程序的方法,包括對應(yīng)用程序的源文件進行編譯,以產(chǎn)生與源文件對應(yīng)的目標文件;對編譯產(chǎn)生的目標文件進行鏈接,以確定目標文件中的TOC訪問是否存在溢出;響應(yīng)于目標文件中的TOC訪問存在溢出,對所述TOC訪問存在溢出的目標文件所對應(yīng)的源文件進行再次編譯,以產(chǎn)生沒有TOC溢出的目標文件;以及,用再次編譯產(chǎn)生的沒有TOC溢出的目標文件替換所述TOC訪問存在溢出的目標文件,并對目標文件進行再次鏈接。依據(jù)本專利技術(shù)的另一個實施例,提供了一種用于處理應(yīng)用程序的系統(tǒng),包括編譯器,被配置為對應(yīng)用程序的源文件進行編譯,以產(chǎn)生與源文件對應(yīng)的目標文件;鏈接器,被配置為對編譯產(chǎn)生的目標文件進行鏈接,其中,所述鏈接器進一步被配置為確定所述目標文件中的TOC訪問是否存在溢出;所述編譯器進一步被配置為響應(yīng)于目標文件中的TOC訪問存在溢出,對TOC訪問存在溢出的目標文件所對應(yīng)的源文件進行再次編譯,以產(chǎn)生沒有TOC溢出的目標文件;以及,所述鏈接器進一步被配置為用再次編譯產(chǎn)生的沒有TOC溢出的目標文件替換TOC訪問存在溢出的目標文件,并對目標文件進行再次鏈接。本專利技術(shù)通過采用兩輪編譯,僅對確實存在TOC溢出的TOC表項才產(chǎn)生兩條指令形式的雙指令TOC訪問。因此,該方案具有很好的易用性,并且降低了性能損失。附圖說明通過對附圖中本專利技術(shù)示例實施例方式的更詳細描述,本專利技術(shù)的上述、以及其它目的、特征和優(yōu)勢將變得更加明顯。圖I示出了適于用來實現(xiàn)本專利技術(shù)實施方式的示例性計算系統(tǒng)100的框圖。圖2示出了一個TOC訪問的示意圖。圖3示出了一個TOC溢出的示意圖。圖4示出了依據(jù)本專利技術(shù)的一個實施例的用于處理TOC溢出的方法的流程圖。圖5示出了依據(jù)本專利技術(shù)的另一個實施例的用于處理TOC溢出的過程的示意圖。圖6不出了一個溢出符號列表的不意圖。圖7示出了依據(jù)本專利技術(shù)的一個實施例的用于處理TOC溢出的系統(tǒng)700的方框圖。具體實施例方式以下參照按照本專利技術(shù)實施例的方法、系統(tǒng)描述本專利技術(shù)。其中,流程圖和/或框圖的每個方框以及流程圖和/或框圖中各方框的組合,都可以由計算機程序指令實現(xiàn)。這些計算機程序指令可以提供給通用計算機、專用計算機或其它可編程數(shù)據(jù)處理裝置的處理器,從而生產(chǎn)出一種機器,使得通過計算機或其它可編程數(shù)據(jù)處理裝置執(zhí)行的這些指令,產(chǎn)生實現(xiàn)流程圖和/或框圖中的方框中規(guī)定的功能/操作的裝置(means)。也可以把這些計算機程序指令存儲在能指令計算機或其它可編程數(shù)據(jù)處理裝置以特定方式工作的計算機可讀介質(zhì)中,這樣,存儲在計算機可讀介質(zhì)中的指令產(chǎn)生一個包括實現(xiàn)流程圖和/或框圖中的方框中規(guī)定的功能/操作的指令裝置(instruction means) 的制造品。還可以把計算機程序指令加載到計算機或其它可編程數(shù)據(jù)處理裝置上,使得在計算機或其它可編程數(shù)據(jù)處理裝置上執(zhí)行一系列操作步驟,以產(chǎn)生計算機實現(xiàn)的過程,從而在計算機或其它可編程裝置上執(zhí)行的指令就提供實現(xiàn)流程圖和/或框圖中的方框中規(guī)定的功能/操作的過程。圖I示出了適于用來實現(xiàn)本專利技術(shù)實施方式的示例性計算系統(tǒng)100的框圖。如所示,計算機系統(tǒng)100可以包括CPU(中央處理單元)101、RAM(隨機存取存儲器)102、R0M(只讀存儲器)103、系統(tǒng)總線104、硬盤控制器105、鍵盤控制器106、串行接口控制器107、并行接口控制器108、顯示控制器109、硬盤110、鍵盤111、串行外部設(shè)備112、并行外部設(shè)備113和顯示器114。在這些設(shè)備中,與系統(tǒng)總線104耦合的有CPU10URAM 102,ROM 103、硬盤控制器105、鍵盤控制器106、串行控制器107、并行控制器108和顯示控制器109。硬盤110與硬盤控制器105耦合,鍵盤111與鍵盤控制器106耦合,串行外部設(shè)備112與串行接口控制器107耦合,并行外部設(shè)備113與并行接口控制器108耦合,以及顯示器114與顯示控制器109耦合。應(yīng)當理解,圖I所述的結(jié)構(gòu)框圖僅僅為了示例的目的而示出的,而不是對本專利技術(shù)范圍的限制。在某些情況下,可以根據(jù)具體情況而增加或者減少某些設(shè)備。在參考附圖具體描述依據(jù)本專利技術(shù)的實施例之前,下面先對本專利技術(shù)所涉及的一些術(shù)語進行如下介紹。IBM POWER的硬件指令I(lǐng)BM POWER硬件支持用偏移指令加載/存儲。例如,“L RT, offet (RA) ”表示從地址“offset+RA”加載到寄存器RT。“offset”是介于_2~ 15和2~ 15之間的一個立即數(shù)。TOC (內(nèi)容表)AIX 的 ABI (Application Binary Interface 應(yīng)用程序二進制接口)和 64 位的Linux限定了 T0C,該內(nèi)容表實際上是存儲器中分配的一個部分。所有的全局變量和函數(shù)指針的地址被放入該TOC中,必須通過地址來訪問。TOC 訪問通常,使用一條加載指令來進行TOC地址訪問。TOC表存有數(shù)據(jù)和函數(shù)的地址,圖2示出了一個TOC訪問的示意圖,其中,基址寄存器R2指向TOC表的中心位置。對數(shù)據(jù)的訪問必須通過TOC表得到數(shù)據(jù)地址,然后根據(jù)地址完成數(shù)據(jù)訪問。例如,當使用全局變量A2時,編譯器必須首先通過訪問TOC :“L R3,offset_of_A2 (R2) ”來加載A的地址。R2是TOC的基地址,offset_of_A2 (R2)是TOC中的TOC表項A2的偏移。這里需要注意的是,TOC表項存儲的是A2的地址,而不是A2的值。然后,編譯器使用另一條加載指令來獲得值A(chǔ)2 :“L R4,R3”。需要注意的是,寄存器R3僅在最近一次TOC訪問時獲得A2的地址。以圖2所示的TOC表為例,如果要訪問數(shù)據(jù)A2,首先通過符號A2在TOC表中的偏移位置(+800)和基址寄存器R2 (T0C表基地址),計算出A2 在TOC表中的位置,并讀取A2的地址,可以通過指令L0ADR3,800(R2)完成這步操作。運行該指令后在寄存器R3存放A2的地址。之后,使用該地址再次訪問存儲器中的數(shù)據(jù)空間,得到所需要的數(shù)據(jù)。 如圖2所示,TOC表除了可以用于A1,A2等數(shù)據(jù)之外,也可以存放f00l,f002等函數(shù)的地址。并且,同樣,如果要調(diào)用函數(shù)fool,則需要通過fool在TOC表中的偏移位置和基址寄存器R2,計算出fool在TOC表中的位置,并讀取fool的地址,之后,使用該地址訪問存儲器中的代碼空間,從而調(diào)用該函數(shù)。鏈接器的重定位(LinkerRelocation)在編譯時,并不創(chuàng)建T0C,編譯器并不知曉TOC表項的偏移。例如,在上面的例子中,“0ffset_0f_A”是未知的,編譯器必須本文檔來自技高網(wǎng)...
【技術(shù)保護點】
一種用于處理應(yīng)用程序的方法,包括:對應(yīng)用程序的源文件進行編譯,以產(chǎn)生與源文件對應(yīng)的目標文件;對編譯產(chǎn)生的目標文件進行鏈接,以確定目標文件中的TOC訪問是否存在溢出;響應(yīng)于目標文件中的TOC訪問存在溢出,對所述TOC訪問存在溢出的目標文件所對應(yīng)的源文件進行再次編譯,以產(chǎn)生沒有TOC溢出的目標文件;以及用再次編譯產(chǎn)生的沒有TOC溢出的目標文件替換所述TOC訪問存在溢出的目標文件,并對目標文件進行再次鏈接。
【技術(shù)特征摘要】
1.一種用于處理應(yīng)用程序的方法,包括 對應(yīng)用程序的源文件進行編譯,以產(chǎn)生與源文件對應(yīng)的目標文件; 對編譯產(chǎn)生的目標文件進行鏈接,以確定目標文件中的TOC訪問是否存在溢出; 響應(yīng)于目標文件中的TOC訪問存在溢出,對所述TOC訪問存在溢出的目標文件所對應(yīng)的源文件進行再次編譯,以產(chǎn)生沒有TOC溢出的目標文件;以及 用再次編譯產(chǎn)生的沒有TOC溢出的目標文件替換所述TOC訪問存在溢出的目標文件,并對目標文件進行再次鏈接。2.如權(quán)利要求I所述的方法,其中,對應(yīng)用程序的源文件進行編譯,以產(chǎn)生與源文件對應(yīng)的目標文件進一步包括,對源文件產(chǎn)生單指令TOC訪問,以及, 響應(yīng)于目標文件中的TOC訪問存在溢出,對所述TOC訪問存在溢出的目標文件所對應(yīng)的源文件進行再次編譯,以產(chǎn)生沒有TOC溢出的目標文件進一步包括,對于TOC訪問存在溢出的目標文件所對應(yīng)的源文件,產(chǎn)生多指令TOC訪問。3.如權(quán)利要求2所述的方法,其中,所述多指令TOC訪問是采用二條指令形式的雙指令TOC訪問。4.如權(quán)利要求I所述的方法,其中,對應(yīng)用程序的源文件進行編譯,以產(chǎn)生與源文件對應(yīng)的目標文件進一步包括,記錄所述編譯的編譯命令。5.如權(quán)利要求I所述的方法,其中,對編譯產(chǎn)生的目標文件進行鏈接,以確定目標文件中的TOC訪問是否存在溢出進一步包括,將所述溢出的溢出信息記錄在溢出符號列表中,以及, 響應(yīng)于所述目標文件中的TOC訪問存在溢出,對所述TOC訪問存在溢出的目標文件所對應(yīng)的源文件進行再次編譯,以產(chǎn)生沒有TOC溢出的目標文件進一步包括,根據(jù)所述溢出符號列表,確定TOC訪問存在溢出的目標文件。6.如權(quán)利要求5所述的方法,其中,所述溢出信息包括TOC訪問溢出的溢出符號以及包含所述溢出符號的目標文件的目標文件名。7.如權(quán)利要求I所述的方法,其中,對應(yīng)用程序的源文件進行編譯,以產(chǎn)生與源文件對應(yīng)的目標文件進一步包括,獲得TOC符號的頻率信息, 對編譯產(chǎn)生的目標文件進行鏈接,以確定目標文件中的TOC訪問是否存...
【專利技術(shù)屬性】
技術(shù)研發(fā)人員:蔣健,張嗣元,紀金松,
申請(專利權(quán))人:國際商業(yè)機器公司,
類型:發(fā)明
國別省市:
還沒有人留言評論。發(fā)表了對其他瀏覽者有用的留言會獲得科技券。