亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

采用解碼時間指令優(yōu)化連接用于增強應用二進制接口(abi)的代碼的制作方法

文檔序號:6496731閱讀:269來源:國知局
采用解碼時間指令優(yōu)化連接用于增強應用二進制接口(abi)的代碼的制作方法【專利摘要】在目標文件中識別代碼序列,該代碼序列由多個指令組成并且指定了相對基址的偏移量。所述相對基址的偏移量對應于在被配置為存儲變量或數據的地址的存儲器內的偏移位置。所識別的代碼序列被配置為執(zhí)行存儲器引用函數或存儲器地址計算函數。確定偏移位置在基址的指定距離內并且確定采用替換代碼序列替換所識別代碼序列不會改變程序語義。所述目標文件中所識別代碼序列采用所述替換代碼序列所替換,所述替換代碼序列包括空操作(NOP)指令或者具有比所識別代碼序列少的指令?;谒瞿繕宋募伤B接可執(zhí)行代碼,并且發(fā)出所連接的可執(zhí)行代碼?!緦@f明】采用解碼時間指令優(yōu)化連接用于增強應用二進制接口(ABI)的代碼【
技術領域
】[0001]本發(fā)明涉及計算機系統(tǒng),并且尤其涉及采用解碼時間指令優(yōu)化連接用于增強應用二進制接口(ABI)的被編譯代碼。【
背景技術
】[0002]在計算機軟件中,應用二進制接口(ABI)描述應用程序和操作系統(tǒng)之間或應用程序和另一應用之間的低級接口。ABI涉及諸如數據類型、大小以及對齊(alignment)的明細(details);控制如何傳遞函數變量以及如何搜索返回值的調用規(guī)則;系統(tǒng)調用號以及應用應如何使得系統(tǒng)調用操作系統(tǒng);以及在完整操作系統(tǒng)ABI的情況下涉及目標文件的二進制格式、程序庫等等。如果存在必要的共享庫以及滿足相似的前提,幾種ABI(例如,容許在用于Intelx86架構的各種Unix和Linux變化形式上運行的廣泛程序的交互式UnixABI)容許來自支持該ABI的一個操作系統(tǒng)的應用程序在不修改的情況下運行在任意其他這種系統(tǒng)上。[0003]通常應用程序的程序開發(fā)周期包括寫源代碼、將源代碼編譯成目標文件、構建共享庫以及將目標文件鏈接到主可執(zhí)行程序。在特定硬件平臺上執(zhí)行該應用之前,還要進行額外準備,包括加載主可執(zhí)行程序以及加載用于應用啟動的共享庫。[0004]編譯器在某時對單一源文件(編譯單位)進行工作以便生成目標文件。編譯器生成目標代碼而不知道該代碼/數據的最終地址或位移。具體而言,編譯器生成在不知道TOC的最終大小或各種數據段的偏移/地址的情況下將為了變量值訪問TOC的目標代碼。用于這種信息的占位符被留在該目標代碼中并由連接器更新。TOC是變量地址參考表,其例如在AIX環(huán)境中被利用來以支持共享庫和數據位置獨立的方式存取程序變量。被稱之為全局偏移量表(GOT)的類似結構在LINUX環(huán)境中執(zhí)行類似功能(例如,對變量的間接和動態(tài)可再定位存取)。TOC和GOT之間的差別在于TOC可以包含實際數據,而GOT僅僅包含數據的地址(指針)。在PowerPc64-比特環(huán)境中,TOC含有GOT部分加小數據變量。[0005]連接器將目標文件匯集(collect)成可執(zhí)行程序/共享對象并為代碼/數據賦予偏移。連接器在程序開發(fā)期間解析內部引用并且外部引用在加載時間被解析。連接器匯集來自目標文件的TOC輸入項(entry)、賦予TOC偏移以及生成TOC段。連接器知曉TOC的最終尺寸但是不對編譯器生成的TOC存取代碼序列執(zhí)行主編輯(majoredit)。連接器知曉具體內部引用TOC輸入項的偏移但是不知曉用于大部分外部引用TOC輸入項的最終解析值。該外部引用TOC輸入項由加載器/動態(tài)連接器解析。[0006]IBM?于2010年7月23日發(fā)布的并且通過引用被整體包含在本說明書中的“PowerISA?Version2.06RevisionB”教導了一種示例性精簡指令集計算機(RISC)指令集架構(ISA)ο在此將使用所述PowerISA來解釋例示實施例,不過,本發(fā)明并不限于PowerISA或RISC架構。本領域技術人員將容易理解到本發(fā)明能用于各種架構。[0007]1111@的并且通過引用被整體包含在本說明書中的“z/ArchitecturePrinciplesofOperation”SA22-7832-08,第9版(2010年8月)教導了一種示例CISC(復雜指令集計算機)指令集架構。[0008]IBM的并且通過引用被整體包含在本說明書中的“64-bitPowerPCELFApplicationBinaryInterfaceSupplementl.9”(2004)描述了PowerPC?可連接執(zhí)行格式(ELF)ABI的64-比特補碼(supplement)。[0009]power,org的并且通過引用被整體包含在本說明書中的“PowerArchitecture?32-bitApplicationBinaryInterfaceSupplementl.0Linux(g),,(2011年4月19日)以及“PowerArchitecture(R)32-bitApplicationBinaryInterfaceSupplementl.0-Embedded”(2011年4月19曰)描述了32-比特ABI?!?br/>發(fā)明內容】[0010]根據示例性實施例,一種計算機程序產品、系統(tǒng)以及方法包括:一種方法包括讀取目標文件,該目標文件包括多個代碼序列。識別所述目標文件中的代碼序列,該代碼序列指定相對基址的偏移量。所述相對基址的偏移量對應于在被配置為存儲變量的地址或數據的存儲器內的偏移位置。所識別的代碼序列包括多個指令并且被配置為執(zhí)行存儲器引用函數或存儲器地址計算函數。確定所述偏移位置在所述基址的指定距離內。此外,驗證采用替換代碼序列替換所識別代碼序列不會改變程序語義。采用所述替換代碼序列替換所述目標文件中所識別代碼序列。所述替換代碼序列包括空操作(NOP)指令或者具有比所識別代碼序列少的指令。響應于所述目標文件生成連接的可執(zhí)行代碼以及發(fā)出所連接的可執(zhí)行代碼。[0011]根據另一個示例性實施例,一種計算機程序產品、系統(tǒng)和方法包括讀取目標文件,該目標文件包括多個代碼序列,所述多個代碼序列包括作為用于參考表中的偏移位置的占位符的符號。每個偏移位置被配置用于存儲變量的地址或數據。接收與所述代碼序列相關聯(lián)的存取頻率信息。所述多個代碼序列按照存取頻率排序。接收與所述偏移位置相關聯(lián)的成本信息。對于所述代碼序列中的每個符號,從具有最高存取頻率的代碼序列開始,在可變參考表中的偏移位置被分派給所述符號,并且該符號被所述目標文件中的所述偏移位置所替代。所分派的偏移位置具有先前還沒有被分派給另一個符號的偏移位置中的最低成本。發(fā)出所連接的可執(zhí)行代碼。[0012]通過本發(fā)明的技術可以實現額外的特征和優(yōu)點。本發(fā)明的其它實施例和方面在此被詳細描述并被認為是要求保護的發(fā)明的一部分。為了更好理解具有這些優(yōu)點和特征的本發(fā)明,請參見本說明書以及附圖。【專利附圖】【附圖說明】[0013]在本說明書的結尾處的權利要求書中特別指出并清楚要求保護關于本發(fā)明的主題。根據下面結合附圖給出的詳細描述,本發(fā)明的前述以及其他特征以及優(yōu)點將更清楚。[0014]圖1表示根據本發(fā)明一實施例的云計算節(jié)點;[0015]圖2表示根據本發(fā)明一實施例的云計算環(huán)境;[0016]圖3表示根據本發(fā)明一實施例的抽象模型層;[0017]圖4表示根據本發(fā)明一實施例的內容表(TOC)以及數據元;[0018]圖5表示根據本發(fā)明一實施例的由編譯器執(zhí)行的用于生成TOC引用的處理的流程圖;[0019]圖6表示根據本發(fā)明一實施例的由編譯器執(zhí)行的用于生成TOC引用的處理的流程圖;[0020]圖7表示根據本發(fā)明一實施例的由連接器執(zhí)行的用于創(chuàng)建連接目標文件的處理的流程圖;[0021]圖8表示根據本發(fā)明一實施例的由連接器執(zhí)行的用于執(zhí)行存儲器引用序列修剪優(yōu)化的參考代碼優(yōu)化處理的流程圖;[0022]圖9表示根據本發(fā)明一實施例的TOC尋址方案的方塊示意圖;[0023]圖10表示根據本發(fā)明一實施例的由連接器執(zhí)行的用于執(zhí)行基于基頻的TOC引用包裝的參考代碼優(yōu)化處理的流程圖;以及[0024]圖11表示根據本發(fā)明一實施例的由連接器執(zhí)行的用于對TOC計算擴展執(zhí)行GOT加載的參考代碼優(yōu)化處理的流程圖。【具體實施方式】[0025]本發(fā)明的實施例涉及使得內容表(TOC)溢出對計算系統(tǒng)中的性能和吞吐量的影響最小化。一個實施例包括編譯器,該編譯器被設計成生成目標代碼以便包括被指定的指令序列(例如已經被插入該代碼中以便補償TOC溢出的序列)。該指令序列適于被硬件辨識,以便微處理器能夠優(yōu)化該序列用于內部執(zhí)行。在定位了所指定指令序列之一時,微處理器采用可以更有效執(zhí)行的內部指令替換該序列中的指令,或者采用單一內部指令替換該序列中的指令。由微處理器執(zhí)行的這種處理在此被稱之為解碼時間指令優(yōu)化(DTIO)。[0026]DTIO處理是一種硬件處理。此處描述的編譯器和連接器準備代碼序列用于由硬件進行優(yōu)化。這些代碼序列由編譯器和/或連接器以一種可被能進行DTIO的硬件檢測的方式編碼,諸如彼此相鄰的特定指令、在位移范圍受到限制時具有適當位移范圍的特定指令、在處理器要求破壞性指令形式能夠進行DTIO時具有諸如破壞性的適當特性的特定指令、以及在處理器要求指令對齊以便能進行DTIO時可以適當對齊的特定指令,以及具有任何其他能夠由能進行DTIO的硬件所需的特性的特定指令。能進行DTIO的硬件在2011年10月03日提交的申請?zhí)枮?3/251,409、標題為“ScalableDecodeTimeInstructionSequenceOptimizationofDependentInstructions”的美國專利申請中有進一步描述。[0027]—些實施例還包括編譯器,該編譯器被設計成改善在所有處理器上的TOC引用的性能,既有那些能進行DTIO的處理器也有那些不能進行DTIO的的處理器。該連接器基于諸如基頻和位移值的特征執(zhí)行幾種TOC參考代碼優(yōu)化。被優(yōu)化代碼執(zhí)行與原始TOC參考代碼相同的函數。TOC和GOT是參考表的實例。TOC和GOT都可以是存儲變量的地址的變量地址(variableaddress)參考表。此外,TOC還可以存儲數據。除非專門指出,術語TOC和GOT在此都可以被互換地用來指代被存取以便定位程序變量的表。[0028]DTIO處理可以在云計算環(huán)境中被執(zhí)行。首先應當理解,盡管本公開包括關于云計算的詳細描述,但其中記載的技術方案的實現卻不限于云計算環(huán)境.相反,本發(fā)明的實施例能夠結合現在已知或以后開發(fā)的任何其它類型的計算環(huán)境而實現。[0029]云計算是一種服務交付模式,用于對共享的可配置計算資源池進行方便、按需的網絡訪問。可配置計算資源是能夠以最小的管理成本或與服務提供者進行最少的交互就能快速部署和釋放的資源,例如可以是網絡、網絡帶寬、服務器、處理、內存、存儲、應用、虛擬機和服務。這種云模式可以包括至少五個特征、至少三個服務模型和至少四個部署模型。[0030]特征包括:[0031]按需自助式服務:云的消費者在無需與服務提供者進行人為交互的情況下能夠單方面自動地按需部署諸如服務器時間和網絡存儲等的計算能力。[0032]廣泛的網絡接入:計算能力可以通過標準機制在網絡上獲取,這種標準機制促進了通過不同種類的瘦客戶機平臺或厚客戶機平臺(例如移動電話、膝上型電腦、個人數字助理PDA)對云的使用。[0033]資源池:提供者的計算資源被歸入資源池并通過多租戶(mult1-tenant)模式服務于多重消費者,其中按需將不同的實體資源和虛擬資源動態(tài)地分配和再分配。一般情況下,消費者不能控制或甚至并不知曉所提供的資源的確切位置,但可以在較高抽象程度上指定位置(例如國家、州或數據中心),因此具有位置無關性。[0034]迅速彈性:能夠迅速、有彈性地(有時是自動地)部署計算能力,以實現快速擴展,并且能迅速釋放來快速縮小。在消費者看來,用于部署的可用計算能力往往顯得是無限的,并能在任意時候都能獲取任意數量的計算能力。[0035]可測量的服務:云系統(tǒng)通過利用適于服務類型(例如存儲、處理、帶寬和活躍用戶帳號)的某種抽象程度的計量能力,自動地控制和優(yōu)化資源效用。可以監(jiān)測、控制和報告資源使用情況,為服務提供者和消費者雙方提供透明度。[0036]服務模型如下:[0037]軟件即服務(SaaS):向消費者提供的能力是使用提供者在云基礎架構上運行的應用??梢酝ㄟ^諸如網絡瀏覽器的瘦客戶機接口(例如基于網絡的電子郵件)從各種客戶機設備訪問應用。除了有限的特定于用戶的應用配置設置外,消費者既不管理也不控制包括網絡、服務器、操作系統(tǒng)、存儲、乃至單個應用能力等的底層云基礎架構。[0038]平臺即服務(PaaS):向消費者提供的能力是在云基礎架構上部署消費者創(chuàng)建或獲得的應用,這些應用利用提供者支持的程序設計語言和工具創(chuàng)建。消費者既不管理也不控制包括網絡、服務器、操作系統(tǒng)或存儲的底層云基礎架構,但對其部署的應用具有控制權,對應用托管環(huán)境配置可能也具有控制權。[0039]基礎架構即服務(IaaS):向消費者提供的能力是消費者能夠在其中部署并運行包括操作系統(tǒng)和應用的任意軟件的處理、存儲、網絡和其他基礎計算資源。消費者既不管理也不控制底層的云基礎架構,但是對操作系統(tǒng)、存儲和其部署的應用具有控制權,對選擇的網絡組件(例如主機防火墻)可能具有有限的控制權。[0040]部署模型如下:[0041]私有云:云基礎架構單獨為某個組織運行。云基礎架構可以由該組織或第三方管理并且可以存在于該組織內部或外部。[0042]共同體云:云基礎架構被若干組織共享并支持有共同利害關系(例如任務使命、安全要求、政策和合規(guī)考慮)的特定共同體。共同體云可以由共同體內的多個組織或第三方管理并且可以存在于該共同體內部或外部。[0043]公共云:云基礎架構向公眾或大型產業(yè)群提供并由出售云服務的組織擁有。[0044]混合云:云基礎架構由兩個或更多部署模型的云(私有云、共同體云或公共云)組成,這些云依然是獨特的實體,但是通過使數據和應用能夠移植的標準化技術或私有技術(例如用于云之間的負載平衡的云突發(fā)流量分擔技術)綁定在一起。[0045]云計算環(huán)境是面向服務的,特點集中在無狀態(tài)性、低耦合性、模塊性和語意的互操作性。云計算的核心是包含互連節(jié)點網絡的基礎架構。[0046]現在參考圖1,其中顯示了云計算節(jié)點的一個例子。圖1顯示的云計算節(jié)點10僅僅是適合的云計算節(jié)點的一個示例,不應對本發(fā)明實施例的功能和使用范圍帶來任何限制??傊?,云計算節(jié)點10能夠被用來實現和/或執(zhí)行以上所述的任何功能。[0047]云計算節(jié)點10具有計算機系統(tǒng)/服務器12,其可與眾多其它通用或專用計算系統(tǒng)環(huán)境或配置一起操作。眾所周知,適于與計算機系統(tǒng)/服務器12—起操作的計算系統(tǒng)、環(huán)境和/或配置的例子包括但不限于:個人計算機系統(tǒng)、服務器計算機系統(tǒng)、瘦客戶機、厚客戶機、手持或膝上設備、基于微處理器的系統(tǒng)、機頂盒、可編程消費電子產品、網絡個人電腦、小型計算機系統(tǒng)、大型計算機系統(tǒng)和包括上述任意系統(tǒng)的分布式云計算技術環(huán)境,等坐寸ο[0048]計算機系統(tǒng)/服務器12可以在由計算機系統(tǒng)執(zhí)行的計算機系統(tǒng)可執(zhí)行指令(諸如程序模塊)的一般語境下描述。通常,程序模塊可以包括執(zhí)行特定的任務或者實現特定的抽象數據類型的例程、程序、目標程序、組件、邏輯、數據結構等。計算機系統(tǒng)/服務器12可以在通過通信網絡鏈接的遠程處理設備執(zhí)行任務的分布式云計算環(huán)境中實施。在分布式云計算環(huán)境中,程序模塊可以位于包括存儲設備的本地或遠程計算系統(tǒng)存儲介質上。[0049]如圖1所示,云計算節(jié)點10中的計算機系統(tǒng)/服務器12以通用計算設備的形式表現。計算機系統(tǒng)/服務器12的組件可以包括但不限于:一個或者多個處理器或者處理單元16,系統(tǒng)存儲器28,連接不同系統(tǒng)組件(包括系統(tǒng)存儲器28和處理單元16)的總線18。[0050]總線18表示幾類總線結構中的一種或多種,包括存儲器總線或者存儲器控制器,外圍總線,圖形加速端口,處理器或者使用多種總線結構中的任意總線結構的局域總線。舉例來說,這些體系結構包括但不限于工業(yè)標準體系結構(ISA)總線,微通道體系結構(MAC)總線,增強型ISA總線、視頻電子標準協(xié)會(VESA)局域總線以及外圍組件互連(PCI)總線。[0051]計算機系統(tǒng)/服務器12典型地包括多種計算機系統(tǒng)可讀介質。這些介質可以是能夠被計算機系統(tǒng)/服務器12訪問的任意可獲得的介質,包括易失性和非易失性介質,可移動的和不可移動的介質。[0052]系統(tǒng)存儲器28可以包括易失性存儲器形式的計算機系統(tǒng)可讀介質,例如隨機存取存儲器(RAM)30和/或高速緩存存儲器32。計算機系統(tǒng)/服務器12可以進一步包括其它可移動/不可移動的、易失性/非易失性計算機系統(tǒng)存儲介質。僅作為舉例,存儲系統(tǒng)34可以用于讀寫不可移動的、非易失性磁介質(圖1未顯示,通常稱為“硬盤驅動器”)。盡管圖1中未示出,可以提供用于對可移動非易失性磁盤(例如“軟盤”)讀寫的磁盤驅動器,以及對可移動非易失性光盤(例如⑶-ROM,DVD-ROM或者其它光介質)讀寫的光盤驅動器。在這些情況下,每個驅動器可以通過一個或者多個數據介質接口與總線18相連。存儲器28可以包括至少一個程序產品,該程序產品具有一組(例如至少一個)程序模塊,這些程序模塊被配置以執(zhí)行本發(fā)明各實施例的功能。[0053]具有一組(至少一個)程序模塊42的程序/實用工具40,可以存儲在存儲器28中,這樣的程序模塊42包括但不限于操作系統(tǒng)、一個或者多個應用程序、其它程序模塊以及程序數據,這些示例中的每一個或某種組合中可能包括網絡環(huán)境的實現。程序模塊42通常執(zhí)行本發(fā)明所描述的實施例中的功能和/或方法。[0054]計算機系統(tǒng)/服務器12也可以與一個或多個外部設備14(例如鍵盤、指向設備、顯示器24等)通信,還可與一個或者多個使得用戶能與該計算機系統(tǒng)/服務器12交互的設備通信,和/或與使得該計算機系統(tǒng)/服務器12能與一個或多個其它計算設備進行通信的任何設備(例如網卡,調制解調器等等)通信。這種通信可以通過輸入/輸出(I/O)接口22進行。并且,計算機系統(tǒng)/服務器12還可以通過網絡適配器20與一個或者多個網絡(例如局域網(LAN),廣域網(WAN)和/或公共網絡,例如因特網)通信。如圖所示,網絡適配器20通過總線18與計算機系統(tǒng)/服務器12的其它模塊通信。應當明白,盡管圖中未示出,其它硬件和/或軟件模塊可以與計算機系統(tǒng)/服務器12—起操作,包括但不限于:微代碼、設備驅動器、冗余處理單元、外部磁盤驅動陣列、RAID系統(tǒng)、磁帶驅動器以及數據備份存儲系統(tǒng)坐寸ο[0055]現在參考圖2,其中顯示了示例性的云計算環(huán)境50。如圖所示,云計算環(huán)境50包括云計算消費者使用的本地計算設備可以與其相通信的一個或者多個云計算節(jié)點10,本地計算設備例如可以是個人數字助理(PDA)或移動電話54A,臺式電腦54B、筆記本電腦54C和/或汽車計算機系統(tǒng)54N。云計算節(jié)點10之間可以相互通信??梢栽诎ǖ幌抻谌缟纤龅乃接性?、共同體云、公共云或混合云或者它們的組合的一個或者多個網絡中將云計算節(jié)點10進行物理或虛擬分組(圖中未顯示)。這樣,云的消費者無需在本地計算設備上維護資源就能請求云計算環(huán)境50提供的基礎架構即服務(IaaS)、平臺即服務(PaaS)和/或軟件即服務(SaaS)。應當理解,圖2顯示的各類計算設備54A-N僅僅是示意性的,云計算節(jié)點10以及云計算環(huán)境50可以與任意類型網絡上和/或網絡可尋址連接的任意類型的計算設備(例如使用網絡瀏覽器)通信。[0056]現在參考圖3,其中顯示了云計算環(huán)境50(圖2)提供的一組功能抽象層。首先應當理解,圖3所示的組件、層以及功能都僅僅是示意性的,本發(fā)明的實施例不限于此。如圖3所示,提供下列層和對應功能:[0057]硬件和軟件層60包括硬件和軟件組件。硬件組件的例子包括:主機,例如IBM?zSeries?系統(tǒng);基于RISC(精簡指令集計算機)體系結構的服務器,例如IBMpSeries?系統(tǒng);IBMxSeries?系統(tǒng);IBMBladeCenter?系統(tǒng);存儲設備;網絡和網絡組件。軟件組件的例子包括:網絡應用服務器軟件,例如IBMWebSphere⑧應用服務器軟件;數據庫軟件,例如IBMDB2?數據庫軟件。(IBM,zSeries,pSeries,xSeries,BladeCenter,WebSphere以及DB2是國際商業(yè)機器公司在全世界各地的注冊商標)。[0058]虛擬層62提供一個抽象層,該層可以提供下列虛擬實體的例子:虛擬服務器、虛擬存儲、虛擬網絡(包括虛擬私有網絡)、虛擬應用和操作系統(tǒng),以及虛擬客戶端。[0059]在一個示例中,管理層64可以提供下述功能:資源供應功能:提供用于在云計算環(huán)境中執(zhí)行任務的計算資源和其它資源的動態(tài)獲取;計量和定價功能:在云計算環(huán)境內對資源的使用進行成本跟蹤,并為此提供帳單和發(fā)票。在一個例子中,該資源可以包括應用軟件許可。安全功能:為云的消費者和任務提供身份認證,為數據和其它資源提供保護。用戶門戶功能:為消費者和系統(tǒng)管理員提供對云計算環(huán)境的訪問。服務水平管理功能:提供云計算資源的分配和管理,以滿足必需的服務水平。服務水平協(xié)議(SLA)計劃和履行功能:為根據SLA預測的對云計算資源未來需求提供預先安排和供應。[0060]工作負載層66提供云計算環(huán)境可能實現的功能的示例。在該層中,可提供的工作負載或功能的示例包括:地圖繪制與導航;軟件開發(fā)及生命周期管理;虛擬教室的教學提供;數據分析處理;交易處理;以及數據集成工作流處理。[0061]在示例性實施例中,工作負載層66中的DTIO增強編譯器70生成此處所描述的DTIO序列,不過,需要理解的是,增強編譯器70可以實現在任何層中并且可以用于生成要在硬件和軟件層60中的各種硬件平臺上執(zhí)行的代碼。[0062]在示例性實施例中,工作負載層66中的DTIO增強連接器80生成DTIO序列并優(yōu)化此處描述TOC引用;不過,需要理解的是,增強連接器80可以實現在任何層中并且可以用于生成要在硬件和軟件層60中的各種硬件平臺上執(zhí)行的代碼。[0063]在一個實施例中,被優(yōu)化用來生成DTIO序列的增強編譯器70執(zhí)行在計算機系統(tǒng)/服務器12的在云環(huán)境50中執(zhí)行的處理單兀16上,或者執(zhí)行在適于開發(fā)用于云環(huán)境50的應用的系統(tǒng)54A、54B或54C上。在一個實施例中,被優(yōu)化連接和優(yōu)化應用中的表引用(tablereference)的增強連接器80運行在云環(huán)境50的相同服務器12的處理單元16中或系統(tǒng)54A、54B或54C之一中。在另一個實施例中,增強編譯器70以及增強連接器80運行在與云環(huán)境50對應的至少一個服務器或計算機系統(tǒng)或者系統(tǒng)54A、54B或54C的不同處理單元16上。[0064]增強編譯器70以及增強連接器80—起生成被指向運行在處理單元16上的應用,當該被生成的應用在云環(huán)境50或在系統(tǒng)54A、54B、54C以及54N的至少之一中的服務器12中被執(zhí)行時,該處理單元16實施DT10。所生成的應用存儲在存儲介質中,該存儲介質諸如虛擬存儲器62、外部設備14或諸如內部安裝的系統(tǒng)閃存的另一種方案。[0065]現在參照圖4,一般地顯示了根據實施例的T0C402和數據對象404(標記為數據“A”)。通過提供一種用于應用代碼的位置獨立方式來存取數據,T0C402被利用來存取變量并支持共享庫。TOC被用于為共享數據解析外部引用,其中TOC中的每個地址輸入項含有變量的地址。TOC容許相同的應用代碼指向(referto)不同數據,因為該應用代碼和該數據彼此并不固定。圖4中所示的T0C402起始于寄存器“R2”中包含的地址,并且具有多個輸入項(每個包含有變量的地址),所述多個輸入項包括在偏移“D1”處的輸入項。所述在偏移“D1”處的輸入項中的地址為數據對象404的起始地址。圖4中所示的數據對象404具有存儲在與數據對象404的起始地址相距偏移“D2”處的數據。[0066]下面的目標代碼序列將存儲在數據對象404中的偏移“D2”處的數據加載到寄存器“R4”。[0067]IdR3=R2+D1[0068]IdR4=R3+D2[0069]第一加載指令將在偏移“D1”處的數據對象404的地址從T0C402加載到寄存器“R3”,并且第二加載指令加載來自數據對象404的在偏移“D2”處的數據。[0070]如前所述,在其他應用二進制接口(ABI)定義中,與TOC類似的表被稱之為GOT。此處針對T0C402的描述也可類似地應用到GOT。[0071]諸如增強編譯器70的編譯器,以及諸如增強連接器80的連接器,一起工作以便生成經由TOC引用(reference)變量的代碼。該編譯器生成目標代碼并創(chuàng)建在TOC加載指令和符號表輸入項(例如全局變量)之間的連接。所述連接器解析符號定義和引用、映射所有的數據(構建T0C),并隨后在由編譯器生成的TOC加載指令上的位移字段中輸入值。[0072]在編譯器不知道對象數據404的地址的T0C402中的偏移位置時,由編譯器生成將存儲在數據對象404中的偏移“D2”處的數據加載到寄存器“R4”中的下述目標代碼序列。[0073]IdR3=R2+0[Ref:Symbol“A”][0074]IdR4=R3+D2[0075]Symbol=“A”[0076]Length=24[0077]Alignment=8[0078]etc.[0079]連接器在將應用連接在一起時將偏移插入TOC。上面代碼的符號、長度以及對齊方式(alignment)部分告知連接器數據對象并將其約束(tie)到第一加載語句(statement)。該連接器解析符號“A”、映射數據、在Dl處分配TOC輸入項以及隨后在相關聯(lián)TOC加載指令中覆寫位移字段。[0080]存儲器存取指令中的立即(immediate)位移字段的尋址范圍受限于計算機架構支持什么。例如,在IBMPowerArchitecture⑧中,該位移限于16比特,這提供可以從基址寄存器開始尋址64千字節(jié)(KB)內的數據的能力。其他ABI限于32比特或64比特。這些限制在變量的數量大于TOC所支持的輸入項的數量時會產生問題。[0081]用于生成TOC引用的指令集(例如D-form,DS-form)和協(xié)定(convention)實際上限制了TOC的尺寸。D-form指令是一種owerPC?處理器上的主存儲器存取指令形式之一,并且其通常用于執(zhí)行加載、存儲以及立即數模式(immediatemode)計算,并且限于16比特的地址字段。D-form指令的格式為:0-5的操作碼、6-10比特的源/目標寄存器、11_16比特的地址/變址寄存器/操作數以及16-31的數字地址/偏移/立即數模式值。因此地址字段只有16比特,可轉換成64KB的地址范圍。通過采用寄存器(例如指向TOC的中間寄存器“R2”),連接器使用有正負的16比特位移(+/-32KB)映射TOC。DS-form指令具有與D-form指令相同的地址范圍,不過DS-form指令限于32比特對齊存儲器。[0082]當TOC用完空間(例如,有多于64000或64K個的變量)時,連接器會出錯并給出出錯消息?;蛘哌B接器可以創(chuàng)建多個TOC并使用“框架(trampoline)”代碼來在多個TOC之間切換。因此,如果所請求的變量沒有在當前TOC中,加載備用TOC的地址以便存取所請求的變量。例如,下面顯示了目標代碼,其中參考符號“A”的偏移不適合該指令的位移偏移。[0083]IdR3=R2+0[Ref:Symbol“A”][0084]IdR4=R3+D2[0085]是否由連接器轉換為目標代碼:[0086]bLI[0087]L2:ldR4=R3+D2[0088]........[0089]L1:addisR3=R2,I[0090]IdR3=R3+D1[0091]bL2[0092]如上所示,分支(branch)指令由連接器添加。在該實例中,在存儲器中彼此相鄰地放置有兩個64KBTOC0第一TOC的基址(base)位于包含在寄存器“R2”中的地址處。而第二TOC的基址位于包含在寄存器“R2”中的地址+64KB處。第二TOC的基址按照如上所示采用“addis”指令計算,該“addis”指令將寄存器“R2”的內容向左移動16個位置,從而到達第二TOC的位置。隨后針對第二TOC的基址計算偏移“D1”并且該代碼分支回到“L2”以便繼續(xù)處理。[0093]因此,如上所示,為了適應大量的變量,連接器為目標代碼引入附加指令,導致了代碼擴展和較慢的執(zhí)行。如上所示,TOC溢出框架的使用導致了由于附加框架代碼而產生的過度代碼擴展以及每個引用引入兩個附加控制流。這會由于引用失去本地性而導致較差的高速緩存性能,以及由于通過分支到所述框架而引入的非順序代碼而導致較差的指令取出(fetch)性能。[0094]TOC的尺寸大致與可執(zhí)行或共享庫的尺寸成正比。通常會有好幾百個源文件和幾十萬行代碼。每個唯一的被引用的外部符號(數據或代碼)都具有TOC輸入項。如上所述,在32-比特模式中,TOC的容量為16K個輸入項,而在64-比特的模式中TOC的容量為8K個輸入項。當數據存儲在TOC中時(例如通過移除間接層級而縮短路徑長度)會消耗附加TOC空間。[0095]解決TOC溢出問題的另一個流行(contemporary)方法是引入具有較大位移的新指令。該方法對支持較大位移值的計算機平臺有效,不過利用新指令的代碼將不能在較老的計算機系統(tǒng)或者不支持所述較大位移值的其他計算機平臺系統(tǒng)(例如IBMRISC架構)上執(zhí)行。在很多情況下,人們期望應用代碼可在盡可能多的環(huán)境下執(zhí)行,而開發(fā)者則會在使用那種會限制在較舊的平臺上執(zhí)行該代碼的能力的新指令格式方面有所猶豫。[0096]與在指令集中通過直接指定位移確定的TOC尺寸相比,在此描述的實施例減少了在通過TOC溢出而特征化的環(huán)境中存取全局數據時必須由處理器(例如微處理器)執(zhí)行的內部操作的數量。用于優(yōu)化和組合多個指令使得第二指令被內部操作(內部指令)替代的硬件處理在此被稱之為解碼時間指令優(yōu)化(DT10),該內部操作能夠在指令序列中獨立于第一指令執(zhí)行。第一指令可以在不需要執(zhí)行第二指令之前執(zhí)行第一指令的情況下被執(zhí)行,或者從內部執(zhí)行中消除。DTIO是一種容許處理器基于被優(yōu)化的指令序列生成改進指令序列的技術。根據此處所述的實施例,編譯器生成適于在處理器中開發(fā)DTIO能力的ABI序列。為了支持有效執(zhí)行具有較大T0C/G0T的程序,處理器適于對關鍵序列執(zhí)行DT10。[0097]DTIO被應用于由編輯器生成的下述代碼數據,以便將該代碼序列組合成兩個更有效運行的指令。下面所示的目標代碼將該偏移值的(在連接處理器將由連接器輸入的)16個高階比特添加到TOC的起始地址(地址存儲在寄存器“R2”)中,并將結果存儲在寄存器“R5”(R2+0xl2340000)。第二指令將存儲器內容加載到作為存儲在寄存器“R5”中的地址與所述偏移值的16個低階比特的和(R2+0xl2340000+0x00005678)的地址處。因此,寄存器“R3”包含該數據對象的地址。第二指令依賴于第一指令,因為其直到確定了用于寄存器“R5”的值才能被執(zhí)行。[0098]addisR5,R2,0x1234[0099]IdR3=R5+0x5678[0100]在示例性實施例中,能夠執(zhí)行DTIO的處理器單元16識別上述代碼方案并采用不依賴彼此的隨后兩個內部指令(或內部操作)替代它。[0101]在另一個代碼指令使用存儲在寄存器“R5”的情況下計算第一指令結果。由DTIO生成的第二內部指令,即加載指令,在一次計算中執(zhí)行由上述兩個相鄰指令的序列先前執(zhí)行的計算。該內部加載指令(能夠處理比PowerISA所支持的偏移值更寬的偏移值的加載指令)將來自上述指令的組合偏移的值添加到存儲在寄存器“R2”中的地址中。[0102]addisR5,R2,0x1234[0103]IdR3=R2+0xl2345678[0104]上述代碼序列被稱為非破壞性操作數序列,因為寄存器“R5”中的中間結果需要保存以備后面的指令讀取寄存器“R5”中的值。有利的是,第二指令能夠相對于第一指令無序地執(zhí)行,由此加速了加載指令的完成。[0105]以上所示的第一代碼序列可以寫成為如下GOT存取序列:[0106]addisR5,R2,Iabeligotih[0107]Idreg,labeligotil(R5)[0108]該代碼序列被處理器單元16使用DTIO優(yōu)化成與下面的序列對應的內部操作(IOP)序列。[0109]addisR5,R2,Iabeligotih[0110]Idreg,IabelOgot(R2)[0111]第一指令是相加移位立即Ι0Ρ,而第二指令是加載Ι0Ρ。在該非破壞性代碼序列中,第一指令不能被消除,因為在DTIO序列完成執(zhí)行后寄存器“R5”是構造(architected)狀態(tài)的一部分。有利的是,第二指令能夠相對于第一指令不按順序地執(zhí)行,這加速了加載指令的完成。本領域普通技術人員將理解到,在一個實施例中,Oh可能上下文敏感,并且被用于指稱(referto)在與addis指令結合使用時對應于定義addis指令所計算的高階比特,以及被用于指稱在結合現有技術與oris指令結合使用時對應于定義oris指令所計算的高階比特。本領域普通技術人員將理解到,在另一個實施例中,兩個不同的說明符(specifier)iha和Oh將以上下文不敏感的方式被使用,并且Oha將被用于指稱在與addis指令結合使用時對應于定義addis指令所計算的高階比特,以及Oh將被用于指稱在結合現有技術與oris指令結合使用時對應于定義oris指令所計算的高階比特。[0112]下面是第二代碼序列,在至少一個實施例中其將被實現DTIO的微處理器16修改。該代碼序列可以被稱為破壞性操作數序列,因為寄存器“R3”被第二指令覆寫。[0113]addisR3,R2,0x1234[0114]IdR3=R3+0x5678[0115]這兩個指令被合并成如下單一加載Ι0Ρ。[0116]IdR3=R2+0xl2345678[0117]有利的是,僅有一個IOP必須被執(zhí)行以替代兩個相關操作的序列。[0118]以上所示的第二破壞性操作數代碼序列可以被寫成如下GOT存取序列:[0119]addisreg,R2,Iabeligotih[0120]Idreg,labeligotil(reg)[0121]該代碼序列由實現DTIO的處理器單元16優(yōu)化成與含有單一加載指令的下面序列對應的單一IOP:[0122]Idreg,IabelOgot(R2)[0123]此處描述的實施例涉及含有適于存取較大TOC(即相對于由指明指令位移所提供的可尋址性的溢出T0C)的程序的指令序列。用于存取TOC的指令序列包括可以通過DTIO處理進一步優(yōu)化的計算指令的序列。該優(yōu)化導致用于存取TOC的關鍵依賴鏈中的內部操作的數量減少。在使用經受DTIO的TOC尋址的破壞性形式的優(yōu)化環(huán)境中,用于對TOC尋址的內部操作的實際數量得到減少。[0124]使用DTIO優(yōu)化的優(yōu)勢在于,該代碼序列在具有支持DTIO的硬件的處理器和老舊(legacy)處理器(或不支持DTIO的處理器)之間可完全移植(portable)。在一個實施例中,通過DTIO優(yōu)化的序列對應于基于預先存在的ISA的指令序列。編譯器和連接器合作以便在支持DTIO的微處理器中以有助于DTIO優(yōu)化的方式匯編(assemble)序列。在不支持DTIO的微處理器中,與基于預先存在的ISA的任何其他指令序列一樣,將直接并兼容性執(zhí)行由現有技術指令構成的序列。[0125]圖5表示根據本發(fā)明實施例的由編譯器執(zhí)行的用于生成TOC引用的處理的流程圖。在一個實施例中,該處理由圖3所示的增強編譯器70來執(zhí)行。在塊502處,生成與用于TOC引用的多個指令對應的內部表征。這些指令是將采用如前所述的DTIO處理優(yōu)化的指令。[0126]在塊504處,編譯器中的調度程序成本函數以確保多個指令以有助于DTIO的方式被發(fā)出的方式被修改。如在此所使用的,術語“調度程序”指的是編譯器的負責生成“指令進度”的部分,即分派指令在程序中出現的順序的部分。調度程序中的目標之一通常是移動相關的指令使其彼此盡可能遠離,以便給予第一指令一些時間以便在第二相關指令消費其結果之前完成。在許多情況下,這會與可能對將被進行DTIO處理的指令有具體要求的實施DTIO的處理器有沖突,所述將被進行DTIO處理的指令諸如彼此在一定范圍內的指令,或者彼此相鄰的指令。因此,通常的調度程序不會以在能進行DTIO的處理器中支持DTIO的方式對指令進行排序??梢孕薷木幾g器中的成本函數的一種途徑是當成本函數生成為TOC存取序列的一部分時將用于第一指令(例如addis)的成本函數設置為零。當addis指令與TOC序列相關聯(lián)時,這可以通過為addis指令分配新的指令寄存器(IR)來實現。隨后調度程序將趨向于一個挨一個地調度第一addis指令和第二指令。還可以修改該調度程序以確保具有零成本度量的指令緊接于消費者(consumer)后被調度。確保多個指令以有助于DTIO的方式被發(fā)出的另一種途徑是修改調度程序,從而緊接于TOC序列的第二指令之后調度TOC序列的第一指令(即,第一指令和第二指令是有順序的)。這可以通過為與TOC序列相關聯(lián)的addis分配新的指令寄存器(IR)來實現,并且在第一指令被調度給TOC引用時,第二指令被調度。還有一種確保多個指令以有助于DTIO的方式被發(fā)出的途徑是修改調度程序以便辨識可以被應用DTIO的成對消失的(pairingsoff)addis指令和相關指令,并且隨后使得調度程序一個挨一個地調度它們。[0127]參見圖5,在塊506處,編譯器例如以再定位信息的形式為連接器生成指令,以便指出TOC(或GOT)引用中的需要成為G0T/T0C的部分的任何輸入項,以及指出哪個指令需要具有與完整TOC內的被插入該指令中的偏移對應的偏移的至少一部分。根據一個實施例,生成指示多個指令序列的再定位信息。根據另一個實施例,根據現有技術生成分離關系信息,用于指示用于引用的偏移的第一部分以及指示用于引用的偏移的第二部分。[0128]圖6表示根據本發(fā)明另一個實施例的通過編譯器執(zhí)行的用于生成TOC引用的流程圖。圖6中所示的實施例可以在編譯器具有TOC引用IR小程序(facility)時使用。這使得編譯器能夠使用將被作為序列發(fā)出到該代碼中的用于TOC引用的單一內部表征,以及針對指令調度更精確地對該序列的執(zhí)行進行模型化,并且不需要修改來在IR中提供(allow)“零成本”addis-型指令。根據作為單一IR引用的TOC引用的IR表征,需要知曉指令計數的部分被修改為知曉這樣的事實,即所述TOC引用IR小程序將被作為多個ISA指令發(fā)出,諸如用于跟蹤TOC相關分支的位移、用于對指令格式進行模型化、用于將分支目標對齊到理想的邊界等等。[0129]在塊602處,生成對應于TOC引用的IR表達以便向處理器發(fā)出該IR表達是TOC引用的信號。在塊604,編譯器中的調度程序和代碼生成器被修改為理解對應于TOC引用的IR表達將被擴展為多個指令(例如,用于關于代碼偏移以及指令分組的決策),而且對應于被進行DTIO處理的IOP序列的減少的等待時間。因此,為了格式化指令,TOCIR引用序列在被編譯器發(fā)送到目標文件時被作為多個指令,不過,為了使得IR引用的定時特性模型化,由硬件中的DTIO函數在運行時生成的內部操作序列被用來作出調度決定。[0130]在塊606處,通過將TOCIR擴展為多個機器指令而生成代碼。在塊608處,發(fā)出目標文件用于由連接編輯器連接。在圖6所示的實施例中,編譯器被擴充以便支持用于TOC引用的新IR代碼,該新IR代碼反映TOC載荷將使用更多二進制的單一加載指令,并且能夠以與被進行過DTIO處理的序列對應的精簡數量的周期被執(zhí)行。[0131]在另一個實施例中,編程器生成匯編碼,匯編碼含有能夠被進行DTIO處理的TOC引用,并且該匯編器生成目標文件。編程器可以負責生成與被進行DTIO處理的序列對應的多個匯編指令??商娲兀峁﹨R編器固有的被擴展的記憶碼或宏指令,其將生成含有多個DTIO指令的TOC加載序列。[0132]例如,增強匯編器可接受增強的句法@got32并生成破壞性形式的兩個指令序列addis/ld。在該實施例中,單一匯編器操作如下:[0133]Idreg,lableigot32(R2)[0134]生成二進制指令和再定位,等同于:[0135]addisreg,lableigotiha(R2)[0136]Idreg,lableigotil(reg)[0137]這與當前PowerISA相同,并且將在沒有DTIO特征的PowerISA處理器上正確執(zhí)行,但是反映了編程器的意圖,該意圖為該操作優(yōu)選地在能夠進行DTIO的處理器上執(zhí)行。[0138]硬件限制會對DTIO處理造成影響。例如,許多硬件系統(tǒng)只能支持破壞性DTIO序列。在其他硬件系統(tǒng)中,對能夠經受DTIO處理的位移尺寸有限制(例如,限于21比特或更少的偏移)。這些限制可以發(fā)送到編譯器和/或編程器,使得它們獲知哪個序列將被映射到目標硬件DTIO性能。[0139]在有些實施例中,例如,在對Linux系統(tǒng)進行編譯時,當主要模塊通過將位移加到TOC基址上而計算該地址(而不是從GOT上加載它)時,編譯器被優(yōu)化以便通過推導TOC內的數據地而生成數據地址。實例代碼序列如下:[0140]addisreg,R2,Iabeligotih[0141]Idreg,labeligotil(reg)[0142]根據本發(fā)明的一個方面,該代碼可以在代碼生成期間通過編譯器由下面的代碼序列替換,或者可以在連接期間通過連接器由下面的代碼序列替換。[0143]addisreg,R2,label@toc@ha[0144]addireg,reg,label@toc@l[0145]根據通過在編譯器中的代碼生成而能夠進行基于硬件的DTIO的方面,實現DTIO的微處理器16隨后將替換代碼序列優(yōu)化到下面的代碼序列。[0146]addireg,reg,Iabelitoc[0147]也可以采用目標為使用addis/addi生成TOC引用的優(yōu)化。這可以包括根據圖6所示的處理分派除了T0C/G0T-加載引用IR指針之外的TOC-計算IR,以及根據圖5所示的處理修改用于addis/addi組合的度量。[0148]編譯器還可以改善TOC數據引用之后GOT加載的性能。實例代碼序列如下:[0149]addisreg,R2,Iabeligotih[0150]Idreg,labeligotil(reg)[0151]Idreg,structure_offset(reg)[0152]該代碼序列可以有下面的代碼序列替代:[0153]addisreg,R2,(label+structure_offset)itocih[0154]Idreg,reg,(label+structure_offset)itocil[0155]隨后DTIO將把該替換代碼序列優(yōu)化為如下單一IOP:[0156]Idreg,reg,(label+structure_offset)itoc//iop[0157]注意,所述structure_offset通常為零。該方法還可以被用于非整數加載,以便加載非整數數據,不過,所述形式不會是破壞性的并且因此需要對非破壞性DTIO的支持。[0158]下面參照圖7-11描述連接器的實施例,諸如DTIO增強連接器80。此處描述的連接器優(yōu)化與用于提供DTIO小程序的處理器和不提供DTIO小程序的處理器的TOC和/或GOT引用有關的、編譯器生成的代碼的性能。本領域普通技術人員將理解到,當整個程序編譯包括生成全部被連接目標代碼時,這些優(yōu)化還可以作為編譯的一部分被執(zhí)行。[0159]圖7表示根據本發(fā)明實施例的由連接器執(zhí)行的用于創(chuàng)建被連接目標文件的流程圖。在實施例中,該連接器的處理由增強連接器80實施。在塊702處,連接器讀取目標文件,并定位如下說明符的一個或多個:@toc@l、@toc@h、@got@l以及OgotOh。在其構建了TOC和/或GOT之后,連接器采用TOC和/或GOT中所指定的數據和/或數據引用的實際的高和低地址偏移替代這些說明符。通常,由增強編譯器7產生的代碼可以就以下一個或多個方面被連接器進一步優(yōu)化:T0C和/或GOT中的數據格式(layout)以及被進行DTIO處理的代碼(即正被DTIO硬件小程序優(yōu)化的代碼)中的尋址范圍的使用、如果可行的話使用TOC地址計算替代GOT載荷、以及為了改善不具有DTIO硬件支持的處理器中的執(zhí)行而消除不必要的addis指令。[0160]在塊704處,連接器動態(tài)確定TOC的中點。因為TOC使用有正負的位移,所以找至IJTOC的中點給出了在數據結構上的低成本尋址的最佳有效區(qū)域(coverage)。由于性能原因,理想的是取中點之上的大約一半的地址以及在中點之下的大約一半的地址。在流行的連接器中,因為在該步驟之前TOC的尺寸是固定的,因此靜態(tài)地確定中點(例如,在16個輸入項處)。在此處描述的實施例中,TOC不是固定尺寸的,其可以基于被連接器連接的目標代碼分段中的變量的數量而擴展。因為TOC的尺寸不固定,因此,作為連接處理的一部分,需要基于總的GOT和數據尺寸來確定TOC的中點。盡管針對TOC描述了塊704,但是對于GOT而言也可以由連接器來執(zhí)行相同的處理。[0161]在塊706處,執(zhí)行的引用代碼優(yōu)化,包括但不限于:引用序列修剪、基于基頻的TOC和/或GOT包裝以及GOT加載到TOC計算的擴展。在此描述這些引用代碼優(yōu)化的每一個的實施例。在塊708處,連接器執(zhí)行連接步驟(例如采用實際值替換在連接時被解釋的符號的所有引用、將被連接的多個目標文件組合成單一目標文件、選擇性地添加諸如glink的調用存根或PLT存根),并且根據@1和@h的定義生成連接的可執(zhí)行文件,其中符號值的高和低部分被插入該被連接的可執(zhí)行文件中。在塊710處,為了程序加載和執(zhí)行發(fā)出所連接的目標文件。[0162]在實施例中,諸如增強連接器80的連接器被用于執(zhí)行存儲器引用代碼優(yōu)化處理,諸如存儲器引用序列修剪(pruning)。在一個實施例中,存儲器引用序列修剪包括識別目標文件中的代碼序列,該目標文件包含有多個指令并且指定了始于基址的偏移。始于基址的偏移對應于被配置為存儲變量的地址和數據之一存儲器中的偏移位置。所識別的代碼序列被配置為執(zhí)行存儲器引用函數和存儲器地址計算函數之一。為了安全地應用存儲器引用序列修剪,偏移位置必須在所述基址的指定距離內,并且采用位移代碼序列替代被識別的代碼序列不能改變程序語義(即,將不會改變程序的動作)。如果修剪時“安全的”,被識別的代碼序列在目標文件中被替換為所述位移代碼序列,其中所述位移代碼序列包括空操作(NOP)指令或比被識別代碼序列少的指令。在此使用的術語“存儲器引用函數”指的是計算地址和采用讀操作或寫操作存取由所計算的地址標識的存儲器位置的動作。諸如Id、Iwzstd或stw、以及Ifdstfd的指令為PowerPC指令的實例,這些指令執(zhí)行存儲器引用函數。存儲器引用函數的實例為TOC引用函數。如此處所使用的,術語“存儲器地址計算函數”指的是計算存儲器地址的動作(例如,通過將位移量加到基址上)。存儲器地址計算的實例是為了計算元素的地址。例如,考慮到數據項的基址將在寄存器R5中,并且編譯器需要推導在R7中的處的結構域(structurefield)的地址。該編譯器可以發(fā)出下述序列來計算結構域的存儲器地址:addisR7,R5,struc_offsetiha;addiR7,R7,struc_offset@l。[0163]圖8表示根據實施例由連接器執(zhí)行的用于執(zhí)行存儲器引用序列修剪的流程圖。在一個實施例中,圖8所示的處理由增強連接器80來實施。如之前所述,增強編譯器70可以生成多指令序列,而不是用于需要較大位移量的存儲器引用的單一指令。一個實例為TOC引用存取。根據本發(fā)明的另一個方面,采用例如C數組(array)引用中的較大位移量來存取數據引用:[0164]charx[BIG_SIZE],y;[0165]y=x[BIG_0FFSET][0166]當數組基址X被分派到寄存器R5并且值y應該被加載到寄存器R20時,以上序列可以轉換成如下序列:[0167]addisR20,R5(arraybase),(LARGE_0FFSET*4)Oha[0168]IdR20,R20,(LARGE_0FFSET*4)@1[0169]在具有支持DTIO硬件的微處理器中,多指令序列通過硬件被如下(在所述依賴鏈中的)單一IOP操作所替代:[0170]IdR20,R5,(LARGE_0FFSET*4)[0171]該替代不會出現在不具有支持DTIO硬件的處理器中,并且圖8中的處理在連接器中提供了被用于識別可以被修剪的多指令序列的處理。[0172]與多指令存儲器引用序列相關聯(lián)的指令在塊802處被識別。可以通過尋找與多指令存儲器引用序列的格式匹配的相關指令識別多指令TOC引用序列??商娲?,可以通過具有目標代碼格式來識別這些序列,該格式可清晰識別這種序列。在塊804處,確定所識別的引用是否對應于具有偏移的序列,該偏移能夠被加載修剪的序列,并且在塊806處,確定是否可以對代碼序列執(zhí)行修剪(修剪是否“安全”)。如果確定所述偏移能夠加載被修剪序列以及修剪是安全的,則處理從塊808流向塊810。在塊810處,全部代碼序列由被修剪序列替代,并且在塊812處,該代碼序列中被消除的指令采用NOP替代。將NOP添加到該代碼序列的替代方式是在可以獲得全部再定位信息時消除不必要的代碼空間。如果確定所識別的引用不對應于其偏移能被加載被修剪序列的引用和/或修剪是安全的,則處理從塊808流向塊814。塊814處,全部多指令引用被留在該代碼序列中。[0173]例如,在塊802處,連接器將識別作為多指令GOT引用的下述指令引用。[0174]addisreg,R5,Iabeliha[0175]Idreg,reg,Iabelil[0176]在該實例中,與正被存取的數據相關聯(lián)的位移值在存儲在R5中的地址的32KB內。圖8的塊804將確定該代碼序列具有能被加載修改的序列的偏移,因為不需要該位移量的高階比特。因為該位移值在R5中的基址的32KB內并由此可以由締結比特單獨制定,因此不需要高階比特。[0177]假設在塊806處確定修剪是安全的,則處理從塊808流向塊810和812,其中連接器采用下面的代碼序列替換上述代碼序列。[0178]NOP[0179]Idreg,R2,labeligotil[0180]由于去除了對寄存器的依賴并且處理器優(yōu)化了NOP情況,導致只有一個指令,因此替換代碼序列比原來的代碼序列更有效。[0181]可以識別為用于修剪的候選者的另一個代碼序列如下:[0182]addisreg,R5,offsetiha[0183]addireg,reg,offsetil[0184]在上面的代碼序列中,如果所述位移值在基址寄存器內的地址的32KB內,則不需要該位移的高級別比特。[0185]如果所述位移值在其正被加載了偏移的基址的32KB內,則連接器采用下述代碼序列替換上述代碼序列。[0186]NOP[0187]addireg,R5,offsetil[0188]下面是編碼序列實例由于為多指令存儲器引用序列的一部分可以在圖8的塊802中被識別并且因為不需要位移的高階比特而具有能夠采用被修剪序列被加載的偏移而在塊804處被識別。在下面的代碼序列中,連接器將在塊806處確定修剪是不安全的。[0189]addisreg,R5,offsetiha[0190]Lir5,0[0191]Idreg,reg,offsetil[0192]這不等同于下面被修剪的代碼序列。[0193]NOP[0194]LiR5,O[0195]Idreg,R5,offsetil[0196]修剪上述代碼序列是不安全的,因為被修剪的代碼序列不等同于原始代碼序列。[0197]連接器可以具有一組規(guī)則來確定是否可以執(zhí)行修剪。例如,一條規(guī)則是多指令存儲器引用中的指令必須彼此相鄰。另一個規(guī)則可以是在序列的第一指令和該序列的最后一個指令之間執(zhí)行指令分析,并確保不出現對在第一addis中使用的并被用作隨后指令中的新基址寄存器的基址寄存器的寫入,其中被修剪的addis的結果被該addis指令的基址替換??商鎿Q地,或此外,編譯器能夠指示其中能夠安全執(zhí)行修剪的代碼序列。[0198]有利的是,結合安全檢查的存儲器引用識別方為連接器提供了使用在確定它們能適應16比特位移的編譯時未被解析的偏移來改善序列的機會。在現有技術中,為了避免引入語義改變優(yōu)化的問題,僅僅有使用已知為函數內的常數,諸如TOC基址,的寄存器的引用被使用。根據本發(fā)明,另一個規(guī)則可以是必須出現使用TOC基址寄存器的引用,該TOC基址寄存器被ABI定義成不被應用程序所改變以便除了在此根據本發(fā)明所教導的優(yōu)化機會之外獲取增強方法中的額外的現有技術代碼改進機會。[0199]可以通過連接器執(zhí)行的另一種引用代碼優(yōu)化是基于基頻TOC引用包裝。依賴于處理器,相對于TOC(或GOT)基址的不同距離可以具有不同成本?,F在參見圖9??傮w顯示了根據本發(fā)明實施例的TOC尋址方案的方塊示意圖。圖9描繪了具有存儲器地址的范圍的T0C904以及指向T0C904基址的TOC地址寄存器912(例如上述實例中的寄存器“R2”)。如圖9所示,TOC地址寄存器912指向T0C904的由連接器所動態(tài)計算出的中點。[0200]圖9描繪了與沒有DTIO硬件支持的微處理器(MP)相關聯(lián)但是其中由連接器執(zhí)行引用序列修剪的存取成本906。圖9中所示的存取成本906是用于與TOC地址寄存器912中的值相距超過+/-32KB的所有引用的兩個指令以及用于與TOC地址寄存器912中的值相距在+/-32KB內的所有引用的一個指令(當如上參照圖8所描述的TOC序列修剪優(yōu)化由連接器執(zhí)行時)。[0201]圖9還顯示了與有DTIO硬件支持的微處理器(MP)相關聯(lián)的存取成本908以及用于指定位移值的21比特。圖9中所示的存取成本908是用于與TOC地址寄存器912中的值相距超過+/-1MB的所有引用的兩個指令以及用于與TOC地址寄存器912中的值相距在+/-1MB內的所有引用的一個指令。因此,如果位移在21比特的范圍內,則將發(fā)生由該硬件中的DTIO進行的指令合并,并且在沒有DTIO改進序列的情況下具有超過21比特的位移的指令將繼續(xù)執(zhí)行。[0202]圖9還顯示了與有DTIO硬件支持的微處理器(MP)相關聯(lián)的存取成本910以及用于指定位移值的26比特。圖9中所示的存取成本910是用于與TOC地址寄存器912中的值相距超過+/-32MB的所有引用的兩個指令以及用于與TOC地址寄存器912中的值相距在+/-32MB內的所有引用的一個指令。因此,如果位移在26比特的范圍內,則將發(fā)生由該硬件中的DTIO進行的指令合并,并且在沒有DTIO改進序列的情況下具有超過26比特的位移的指令將繼續(xù)執(zhí)行。[0203]與圖9中所示的不同位移值相關的存取成本是一些實例,并且可以依賴于系統(tǒng)環(huán)境使用其他存取成本。例如,用于沿著正方向位于所指定范圍之外的位移值的存取成本可以小于用于沿著負方向位于所指定范圍之外的位移值的存取成本。此外,隨著位移值與TOC地址寄存器912中的值相距越遠,存取成本可以增加(例如,從I個指令到2個指令到3個指令等等的階躍函數)。而且圖9所示的實例假設使用有正負的位移。還可能依賴于諸如與TOC基址的接近程度的因素采用不同的存取成本使用沒有正負的位移。[0204]圖10表示根據本發(fā)明實施例的由連接器執(zhí)行的用于執(zhí)行基于基頻TOC(或GOT)引用包裝的引用代碼優(yōu)化處理的流程圖。在一個實施例中,圖10所示的處理由增強連接器80實施。如圖10所示,連接器使用與項目(例如地址或數據)相關聯(lián)的基頻信息將使用最頻繁的引用置于具有最低成本(例如最靠近TOC地址寄存器912中的值)的區(qū)域。在塊1002處,連接器讀取存取頻率信息。所述讀取頻率信息可以基于簡檔(profile)信息或其可以是基于例如循環(huán)嵌套而合成生成的。另一個替代性實例是讀取頻率信息由用戶指定。在塊1004處,選擇具有最高基頻的項目,并且在塊1006處,將該項目置于TOC中具有最廉價可獲得成本的位置。在塊1008處,確定是否更多需要放置的數據項目(例如,變量)。如果有更多需要放置的數據項目,則處理在塊1004處繼續(xù)進行。如果沒有更多要放置的數據項目,則處理在塊1010處結束。[0205]本領域技術人員將理解到,結合該實施例的教導,可以使用除了頻率之外的成本度量(例如,折中目標尺寸以及基頻)。[0206]圖11表示根據本發(fā)明實施例的通過連接器執(zhí)行的用于對TOC計算擴展執(zhí)行GOT加載的引用代碼優(yōu)化處理的流程圖。在一個實施例中,圖11所示的處理由增強連接器80實施。如圖11所示,如果連接器發(fā)現了非本地的(例如共享的)變量的引用,但是該變量被證明是在本地模塊(例如主模塊)中創(chuàng)建的,那么該連接器將優(yōu)化該代碼。[0207]在圖11的塊1102處,連接器識別與多指令GOT加載序列相關聯(lián)的指令??梢酝ㄟ^尋找與該多指令TOC引用匹配的相關指令或通過獲得清楚識別這種序列的目標代碼格式來進行這種識別。在塊1104處,連接器確定該引用是否對應于能夠被TOC計算所替代的GOT加載引用。這可以通過連接器連接具有對主模塊中的本地變量的引用的主模塊來確定這一點。在塊1106處,連接器通過例如測試TOC引用是否在地址引用表基址的限定范圍內來確定這種變換是否“安全”。例如,該范圍可以對應于能夠被用于執(zhí)行TOC數據地址計算的多個位移比特之一,或者對應于能夠被被用于執(zhí)行TOC數據地址計算的指令的數量。一種示例性情形為,用于加載GOT的指令序列只能被計算相同長度(或更小長度,在這種情況下序列長度可能由于插入了NOP指令而等于相同長度的位移)的TOC輸入項的序列所替代。這種情形十分普遍,因為普遍使用的流行連接器并不能對代碼進行所需要的大的修改。如果引用對應于能夠被替換為TOC計算的GOT加載引用并且該轉換是安全的,那么處理從塊1108流向塊1110,并且執(zhí)行擴展。在塊1112處,在代碼序列中的被消除的指令采用NOP替代。向代碼序列添加NOP的替代方式是如果可以獲得全部再定位信息則消除不必要的代碼空間。[0208]下面是在塊1104處會被確定為與能夠采用TOC計算替代的GOT加載引用對應的這種類型的代碼序列的實例:[0209]addisreg,R2,Iabeligotih[0210]Idreg,labeligotil(reg)[0211]在圖11的塊1110處,連接器采用下面的代碼序列替代上面的代碼序列[0212]addisreg,R2,Iabelitocih[0213]addireg,reg,Iabelitocil[0214]如上所示,GOT加載指令被轉換成TOC計算指令。此外,在塊1112處,如果連接器發(fā)現變量在TOC的32KB內,其將執(zhí)行如上所述的修剪并按如下方式將該addis指令優(yōu)化成NOP指令[0215]NOP[0216]addireg,r2,Iabelitocil[0217]下面是另一個實例,其中連接器優(yōu)化其中引用非本地變量的代碼,但是該變量被證明是在本地模塊(主模塊)中創(chuàng)建的。[0218]addisreg,R2,label@got@h[0219]Idreg,labeligotil(reg)[0220]Idreg,struc—offset(reg)[0221]在塊110處,連接器釆用下述代碼序列替換上述代碼序列。[0222]NOP[0223]addisreg,R2,(label+struc—offset)@toc@h[0224]Idreg,reg,(label+struc—offset)@toc@l[0225]此外,在塊1112處,如果連接器發(fā)現變量在TOC的32KB內,其將執(zhí)行上述修剪并按如下方式將addis指令優(yōu)化成NOP指令。[0226]NOP[0227]NOP[0228]Idreg,R2,(label+struc_offsete)itolil[0229]此處描述的實施例既對不具有DTIO能力的遺留的硬件平臺提供了性能改進也對能夠進行DTIO的硬件平臺提供了性能改進。此處描述的新代碼既能夠在遺留的硬件平臺執(zhí)行也能夠在能進行DTIO的硬件平臺上執(zhí)行。新的目標可以點綴一些老目標(混合和匹配目標,不破壞ABI連續(xù)性)。例如,具有老TOC存取序列的遺留目標能夠與新目標連接起來,同時在沒有使用新引用時連續(xù)構建框架(trampoline)。[0230]在一個實施例中,老的連接器/老的環(huán)境被用于構建具有新庫的目標。如果新引用高階比特引用標記(marker)被忽略而新低階引用比特標記與遺留引用標記兼容,則可以實現這一點。在該實施例中,遺留引用標記被用于低階比特,并且使用用于高階比特的亂真容差(allowance)。如果溢出,與框架結合的新生成代碼導致一種或多或少更慢(與流行方案比較)但是正確的執(zhí)行。新庫可以供應到遺留(legacy)環(huán)境。[0231]此處描述的處理將調度的高度降低到與遺留代碼中的短(單一指令)位移序列相似的高度。[0232]在一個實施例中,PowerPC64可擴展連接格式(ELF)ABI使用術語TOC和GOT。此處定義的TOC是為了與64-比特PowerOpenABI所定義的TOC相似。如此處所使用的,TOC被定義為ELFGOT加小數據。GOT部分包含傳統(tǒng)的ELFG0T,并且能夠選擇性地包含小數據區(qū)域(浮動常量等)。基址(TOC)是地址G0T+0x8000并且被TOC專用的指針寄存器“R2”所引用。GOT和小數據區(qū)域可以在GOT部分相互混合。與GOT相鄰的部分(程序語言表(PLT)以及小數據)還可以經由TOC專用指針存取。[0233]如此處所使用的,句法SYMBOLOtoc表示值(SYMBOL-base(T0C))o這提供了其名稱為的變量的地址,作為相對TOC基址的偏移。句法SYMB0L@toc@ha、SYMBOLigotih以及SYMBOLitocil表示TOC偏移的調整過的高部分、高部分以及低部分。[0234]句法SYMBOLOgot表示值(SYMB0L@got_base(TOC))。這提供了包含其名稱為SYMBOL的(64-比特)地址變量的.got輸入項的地址,作為相對TOC基址的偏移。句法SYMBOLigotiha,SYMBOLigotih以及SYMB0L@got@l表示GOT偏移的調整過的高部分、高部分以及低部分。[0235]此處已經使用具體代碼實例闡述了可由增強編譯器70、增強連接器80以及DTIO硬件執(zhí)行的各種優(yōu)化處理。這些實例并不是為了限制本發(fā)明的實施例,并且本領域普通技術人員將會理解到可以使用其它代碼序列來執(zhí)行此處所述的處理。[0236]本領域技術人員將理解到,本發(fā)明的方法可以實施為一個系統(tǒng)、方法或計算機產品。因此,本發(fā)明的方面可以采取完全硬件實施例、完全軟件實施例(包括固件、駐留軟件、微-代碼等等)、或者組合了可以全部被稱之為“電路”、“模塊”或“系統(tǒng)”的軟件和硬件方面的實施例。而且,本發(fā)明的方法可以采用計算機程序產品形式,其被置入一個或多個其中置入有計算機可讀程序代碼的可讀介質中。[0237]可以使用一個或多個計算機可讀介質的任何組合。計算機可讀介質可以是計算機可讀信號介質或計算機可讀存儲介質。計算機可讀存儲介質可以是例如但不限于:電子、磁性、光學、紅外或半導體系統(tǒng)、裝置或設備,或者前述任意適當組合。計算機可讀存儲介質的更具體實例(非排他性名單)可以包括:具有一條或多條線的電連接、便攜式計算機軟盤、硬盤、隨機存取存儲器(RAM)、只讀存儲器(ROM)、可擦除只讀存儲器(EPROM或閃存)、光纖、便攜式光盤制度存儲器(CD-ROM)、光學存儲設備、磁性存儲設備、或前述存儲器的任何適當的組合。在本文的上下文中,計算機可讀存儲介質可以是任何實體介質,其可以包含有或存儲有由或結合指令執(zhí)行系統(tǒng)、裝置或設備使用的程序。[0238]計算機可讀信號介質可以包括具有置于例如基帶計算機可讀代碼中的或作為載波一部分的被傳播數據信號。這種被傳播信號可以米用各種形式,包括但不限于:電磁、光學或其任何組合。計算機可讀信號介質可以是任何計算機可讀介質,其不是計算機可讀存儲介質并且能夠通訊、傳播或傳送用于或與指令執(zhí)行系統(tǒng)、裝置或設備結合使用的程序[0239]置于計算機可讀介質上哦程序代碼可以使用任何適當的介質傳輸,包括但不限于:無線、有線、光纜、RF等或其任何適當的組合。[0240]用于執(zhí)行本發(fā)明的方面的操作的計算機程序代碼可以一種或多種編程語言的任何組合方式編寫,包括但不限于:面向對象的編程語言,諸如Java、Smalltalk、C++等,以及傳統(tǒng)程序化編程語言,諸如“C”編程語言或類似編程語言。程序代碼可以完全在用戶計算機上執(zhí)行,作為獨立于操作系統(tǒng)的軟件包部分在用戶計算機上執(zhí)行、部分在用戶計算機上部分在遠程計算機上執(zhí)行、或者在遠程計算機或服務器上執(zhí)行。在后一種情形中,遠程計算機可以通過任何類型的網絡連接到用戶計算機上,所述網絡包括局域網(LAN)或廣域網(WAN)、或者可以(例如通過使用英特網服務提供商的英特網)連接到,外部計算機。[0241]此處參照根據本發(fā)明的實施例的方法、裝置(系統(tǒng))和計算機程序產品的流程圖圖示和/或方塊示意圖描述的本發(fā)明的方面。將理解到,在流程圖和/或方塊示意圖中的每個塊和流程圖和/或方塊示意圖中的塊的組合可以由計算機程序指令實現。這些計算機程序指令可以提供給通用計算機、專用計算機、或其他可編程數據處理裝置的處理器,并以便產生機器使得經由計算機或其他可編程數據處理裝置的處理器執(zhí)行的指令創(chuàng)建用于實施流程圖和/或方塊圖的一個或多個方塊中執(zhí)行的功能/動作。[0242]這些計算機程序指令還可以存儲在計算機可讀介質中,其使得計算機、其他可編程數據處理裝置或其他設備以一種特定方式其作用,以便存儲在計算機可讀介質中的指令產生一種制品,該制品包括實現流程圖和/或方塊圖的一個或多個方塊中執(zhí)行的功能/動作的指令。[0243]計算機程序指令也可以加載到計算機、其他可編程數據處理裝置或其他設備,以便使得一系列操作步驟能在計算機、其他可編程數據處理裝置或其他設備上執(zhí)行的操作步驟能夠產生一種計算機實施例的處理,以便指令在計算機、其他可編程數據處理裝置或其他設備上執(zhí)行,用于實現流程圖和/或方塊圖的一個或多個方塊中執(zhí)行的功能/動。[0244]圖中的流程圖和方塊示意圖圖釋了根據本發(fā)明各種實施例的系統(tǒng)、方法和計算機程序產品的可能實施方式的架構、功能以及操作。因此,流程圖或方塊示意圖的每個塊可以代表模塊、分段或部分代碼,其包括一個或多個可執(zhí)行指令,用于實現所指定的邏輯函數。還需要指出的是,在一些可替換實施例中,方塊中提到的功能可以不按照圖中的順序出現。例如,連續(xù)顯示的兩個塊實際上可以基本同時被執(zhí)行,或者有時候可以根據所涉及的功能而反向執(zhí)行。還應該指出的是,方塊示意圖和/或流程圖的每個塊以及方塊圖和/或流程圖中的多個塊的組合可以由執(zhí)行專門功能或動作的專用硬件系統(tǒng)、或由專門硬件和計算機指令的組合來實現。[0245]此處所用的術語僅僅是為了描述特定實施例,并不是為了限制本發(fā)明。如在此所使用的單數形式“一”、“一個”以及“該”,其也意圖包括復數形式,除非上下文中有清楚指明。還需要理解的是,在本說明書中使用的術語“包括”和/或“包含”指明了聲稱的所述特征、整數、步驟、操作、元件、和/或組件,但是并不排除存在或增加一個或多個其他特征、整數、步驟、操作、元件、和/或組件。[0246]在下面的權利要求書中的所有裝置或部分加功能元素的對應結構、材料以及等同物意圖包括任何結構、素材或動作,其用于結合其他被要求保護元件來執(zhí)行被具體要求保護的功能。為了闡述和說明目的已經給出了本發(fā)明的描述,但是其不是為了以所披露的形式窮盡或限定本發(fā)明。對本領域普通技術人員而言很清楚的是,在不脫離本發(fā)明的范圍和構思的情況下可以有多種修改和變化形式。選擇和描述這些實施例是為了更好地解釋本發(fā)明的原理以及實踐應用,并且使得其他本領域人員能夠理解本發(fā)明在適應可想到的特定用途時用于具有各種修改方式的各種實施例。[0247]此處描繪的流程圖僅僅是一個實例。此處描繪的圖或步驟(或操作)在不脫離本發(fā)明的精神的情況下可以有多種變化形式。例如,可以以不同的順序執(zhí)行這些步驟,或者可以增加、刪除或修改步驟。所有這些變化形式都被認為是所要求保護的發(fā)明的一部分。[0248]盡管已經描述了本發(fā)明的優(yōu)選實施例,但是本領域技術人員將理解到,現在或將來可以作出落在后面權利要求范圍內的各種改進和增強。這些權利要求將被認為保持對第一次描述的本發(fā)明的適當的保護?!緳嗬蟆?.一種方法,包括:通過計算機讀取目標文件,該目標文件包括多個代碼序列;識別所述目標文件中的代碼序列,該代碼序列指定相對基址的偏移量,所述相對基址的偏移量對應于在被配置為存儲變量的地址或數據之一的存儲器內的偏移位置,識別的代碼序列包括多個指令并且被配置為執(zhí)行存儲器引用函數或存儲器地址計算函數;確定所述偏移位置在所述基址的指定距離內;驗證采用替換代碼序列替換所識別代碼序列不會改變程序語義;采用所述替換代碼序列替換所述目標文件中所識別代碼序列,所述替換代碼序列包括空操作(NOP)指令或者具有比所識別代碼序列少的指令;響應于所述目標文件生成連接的可執(zhí)行代碼;以及發(fā)出所連接的可執(zhí)行代碼。2.根據權利要求1所述的方法,其中所述基址對應于變量地址參考表,并且具有高存取頻率的變量的地址存儲在與存儲具有低存取頻率的變量的地址的偏移位置相比與變量地址參考表的基址更近的偏移位置,所述低存取頻率小于高存取頻率。3.根據權利要求1所述的方法,其中所述多個指令為順序指令。4.根據權利要求1所述的方法,其中所述驗證采用替換代碼序列替換所識別代碼序列不會改變程序語義包括:核查與在所識別的代碼序列中指定的所述相對基址的偏移量對應的偏移位置沒被配置為在所識別代碼序列中的最后指令之前被寫入新值。5.根據權利要求1所述的方法,其中所述基址對應于全局偏移量表(G0T),在所識別代碼序列中的所述多個指令之一包括GOT加載引用指令,并且所述替換代碼序列還包括內容表(TOC)計算指令。6.一種系統(tǒng),包括適于執(zhí)行根據任意前述權利要求所述的方法的所有步驟的裝置。7.一種計算機程序,包括在該計算機程序在計算機系統(tǒng)上被執(zhí)行時用于執(zhí)行根據任意前述權利要求所述的方法的所有步驟?!疚臋n編號】G06F9/45GK103858101SQ201280048815【公開日】2014年6月11日申請日期:2012年10月1日優(yōu)先權日:2011年10月3日【發(fā)明者】R.J.布萊尼,M.K.格施溫德,J.L.麥金尼斯,S.J.芒羅,M.邁斯納申請人:國際商業(yè)機器公司
網友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1