ARM體系結(jié)構(gòu)與編程(第2版)第11章_第1頁(yè)
ARM體系結(jié)構(gòu)與編程(第2版)第11章_第2頁(yè)
ARM體系結(jié)構(gòu)與編程(第2版)第11章_第3頁(yè)
ARM體系結(jié)構(gòu)與編程(第2版)第11章_第4頁(yè)
ARM體系結(jié)構(gòu)與編程(第2版)第11章_第5頁(yè)
已閱讀5頁(yè),還剩31頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第第11章章 ARM連接器連接器11.1 ARM映像文件映像文件ARM中的各種源文件(包括匯編程序、C語(yǔ)言程序以及C+程序)經(jīng)過(guò)ARM編譯器編譯后,生成ELF格式的目標(biāo)文件。這些目標(biāo)文件和相應(yīng)的C/C+運(yùn)行時(shí)庫(kù)經(jīng)過(guò)ARM連接器處理后,生成ELF格式的映像文件(Image)。這種ELF格式的映像文件可以被寫(xiě)入嵌入式設(shè)備的ROM中。本節(jié)介紹這種ELF格式的映像文件的結(jié)構(gòu)。211.1.1 ARM映像文件的組成映像文件的組成1. ARM映像文件的組成部分映像文件的組成部分一個(gè)映像文件由一個(gè)或多個(gè)域組成。每個(gè)域包含一個(gè)或多個(gè)輸出段。每個(gè)輸出段包含一個(gè)或多個(gè)輸入段。各輸入段包含了目標(biāo)文件中的代碼和數(shù)據(jù)。3

2、11.1.1 ARM映像文件的組成映像文件的組成2. ARM映像文件各組成部分的地址映射映像文件各組成部分的地址映射ARM映像文件各組成部分在存儲(chǔ)系統(tǒng)中的地址有兩種:一種是在映像文件位于存儲(chǔ)器中時(shí)(也就是該映像文件開(kāi)始運(yùn)行之前)的地址,稱為加載時(shí)地址;一種是在映像文件運(yùn)行時(shí)的地址,稱為運(yùn)行時(shí)地址。在圖11.2給出的例子中,RW段的加載時(shí)地址為0 x6000(指該段所占的存儲(chǔ)區(qū)域的起始地址),該地址位于ROM中;RW段的運(yùn)行時(shí)地址為0 x8000(指該段所占的存儲(chǔ)區(qū)域的起始地址),該地址位于RAM中。4RO段RAM加載時(shí)的地址映射關(guān)系運(yùn)行時(shí)的地址映射關(guān)系0 x00000 x60000 x8000

3、0 xa0000 xffffRW段RO段RW段ZI 段ROM 11.1.2 ARM映像文件的入口點(diǎn)映像文件的入口點(diǎn)1. ARM映像文件中的兩類入口點(diǎn)映像文件中的兩類入口點(diǎn)2. 定義初始入口點(diǎn)定義初始入口點(diǎn)3. 普通入口點(diǎn)的用法普通入口點(diǎn)的用法511.1.3 輸入段的排序規(guī)則輸入段的排序規(guī)則通常情況下,一個(gè)輸出段中,各輸入段的排列順序通常情況下,一個(gè)輸出段中,各輸入段的排列順序是由下面幾個(gè)因素決定的。用戶也可以通過(guò)連接選是由下面幾個(gè)因素決定的。用戶也可以通過(guò)連接選項(xiàng)項(xiàng)-first和和-last來(lái)改變這些規(guī)則。來(lái)改變這些規(guī)則。輸入段的屬性。輸入段的名稱。各輸入段在連接命令行的輸入段列表中的排列順序

4、。按照輸入段的屬性,其排列順序如下所示。按照輸入段的屬性,其排列順序如下所示。(1)只讀的代碼段。(2)只讀的數(shù)據(jù)段。(3)可讀寫(xiě)的代碼段。(4)其他已經(jīng)初始化的數(shù)據(jù)段。(5)未初始化的數(shù)據(jù)。611.2 ARM連接器介紹連接器介紹ARM開(kāi)發(fā)包中包含了連接器開(kāi)發(fā)包中包含了連接器armlink,它將編譯得,它將編譯得到的到的ELF格式的目標(biāo)文件以及相關(guān)的格式的目標(biāo)文件以及相關(guān)的C/C+運(yùn)行時(shí)運(yùn)行時(shí)庫(kù)進(jìn)行連接,生成相應(yīng)的結(jié)果文件。庫(kù)進(jìn)行連接,生成相應(yīng)的結(jié)果文件。具體來(lái)說(shuō),具體來(lái)說(shuō),armlink可以完成以下操作:可以完成以下操作:連接編譯后得到的目標(biāo)文件和相應(yīng)的C/C+運(yùn)行時(shí)庫(kù),生成可執(zhí)行的映像文件

5、。將一些目標(biāo)文件進(jìn)行連接,生成一個(gè)新的目標(biāo)文件,供將來(lái)進(jìn)一步連接時(shí)使用,這稱為部分連接。指定代碼和數(shù)據(jù)在內(nèi)存中的位置。生成被連接文件的調(diào)試信息和相互間的引用信息。711.2 ARM連接器介紹連接器介紹armlink在進(jìn)行部分連接和完全連接生成可執(zhí)行的映像文件時(shí)所進(jìn)行的在進(jìn)行部分連接和完全連接生成可執(zhí)行的映像文件時(shí)所進(jìn)行的操作是不同的。下面分別介紹這兩種情況。操作是不同的。下面分別介紹這兩種情況。(1)armlink在進(jìn)行完全連接生成可執(zhí)行的映像文件時(shí)執(zhí)行下面的操作。解析輸入的目標(biāo)文件之間的符號(hào)引用關(guān)系。根據(jù)輸入目標(biāo)文件對(duì)C/C+函數(shù)的調(diào)用關(guān)系,從C/C+運(yùn)行時(shí)庫(kù)中提取相應(yīng)的模塊。將各輸入段排序

6、,組成相應(yīng)的輸出段。刪除重復(fù)的調(diào)試信息段。根據(jù)用戶指定的分組和定位信息,建立映像文件的地址映射關(guān)系。重定位需要重定位的值。生成可執(zhí)行的映像文件。(2)armlink在進(jìn)行部分連接生成新的目標(biāo)文件時(shí)執(zhí)行下面的操作。刪除重復(fù)的調(diào)試信息段。最小化符號(hào)表的大小。保留那些未被解析的符號(hào)。生成新的目標(biāo)文件。811.3 ARM連接器生成的符號(hào)連接器生成的符號(hào)ARM連接器定義了一些符號(hào),這些符號(hào)中都包含字符連接器定義了一些符號(hào),這些符號(hào)中都包含字符$。ARM連接器在生成映像文件時(shí),用它們來(lái)代表映像文件中連接器在生成映像文件時(shí),用它們來(lái)代表映像文件中各域的起始地址以及存儲(chǔ)區(qū)域界限、各輸出段的起始地址以各域的起始

7、地址以及存儲(chǔ)區(qū)域界限、各輸出段的起始地址以及存儲(chǔ)區(qū)域界限、各輸入段的起始地址以及存儲(chǔ)區(qū)域界限。及存儲(chǔ)區(qū)域界限、各輸入段的起始地址以及存儲(chǔ)區(qū)域界限。比如,比如,Load$region_name$Base代表域代表域region_name加載時(shí)的起始地址;而加載時(shí)的起始地址;而image$region_ name$Base代表代表域域region_name運(yùn)行時(shí)的起始地址。運(yùn)行時(shí)的起始地址。這些符號(hào)可以被匯編程序引用,用于地址重定位。這些符號(hào)這些符號(hào)可以被匯編程序引用,用于地址重定位。這些符號(hào)可以被可以被C程序作為外部符號(hào)引用。程序作為外部符號(hào)引用。所有這些符號(hào),只有在其被應(yīng)用程序引用時(shí),所有這些

8、符號(hào),只有在其被應(yīng)用程序引用時(shí),ARM連接器連接器才會(huì)生成該符號(hào)。才會(huì)生成該符號(hào)。推薦使用映像文件中與域相關(guān)的符號(hào),而不是使用與段相關(guān)推薦使用映像文件中與域相關(guān)的符號(hào),而不是使用與段相關(guān)的符號(hào)。的符號(hào)。911.3.1 連接器生成的與域相關(guān)的符號(hào)連接器生成的與域相關(guān)的符號(hào)連接器生成的與域相關(guān)的符號(hào)如表連接器生成的與域相關(guān)的符號(hào)如表11.1所示。各符號(hào)的命名所示。各符號(hào)的命名規(guī)則是:如果使用了地址映射配置文件規(guī)則是:如果使用了地址映射配置文件(scatter文件文件),該文,該文件規(guī)定了映像文件中各域的名稱;如果未使用地址映射配置件規(guī)定了映像文件中各域的名稱;如果未使用地址映射配置文件文件(sca

9、tter文件文件),連接器按照下面的規(guī)則確定各符號(hào)中的,連接器按照下面的規(guī)則確定各符號(hào)中的region_name:對(duì)于只讀的域,使用名稱ER_RO。對(duì)于可讀寫(xiě)的域,使用名稱ER_RW。對(duì)于使用0初始化的域,使用名稱ER_ZI。10符號(hào)名稱含 義Load$region_name$Base域region_name的加載時(shí)起始地址Image$region_name$Base域region_name的運(yùn)行時(shí)起始地址Image$region_name$Length域region_name運(yùn)行時(shí)的長(zhǎng)度(為4字節(jié)的倍數(shù))Image$region_name$Limit域region_name運(yùn)行時(shí)存儲(chǔ)區(qū)域末尾

10、的下一個(gè)字節(jié)地址(該地址不屬于域region_name所占的存儲(chǔ)區(qū)域) 11.3.1 連接器生成的與域相關(guān)的符號(hào)連接器生成的與域相關(guān)的符號(hào)對(duì)于映像文件的每個(gè)域,如果其中包含了對(duì)于映像文件的每個(gè)域,如果其中包含了ZI屬性的屬性的輸出段,連接器將會(huì)為該輸出段,連接器將會(huì)為該ZI輸出段生成另外的符號(hào)。輸出段生成另外的符號(hào)。這些符號(hào)如表這些符號(hào)如表11.2所示。所示。11符號(hào)名稱含 義Image$region_name$ ZI$Base域region_name中ZI輸出段的運(yùn)行時(shí)起始地址Image$region_name$ ZI$Length域region_name中ZI輸出段運(yùn)行時(shí)的長(zhǎng)度(為4字節(jié)的

11、倍數(shù))Image$region_name$ ZI$Limit域region_name中ZI輸出段運(yùn)行時(shí)存儲(chǔ)區(qū)域末尾的下一個(gè)字節(jié)地址(該地址不屬于域region_name所占的存儲(chǔ)區(qū)域) 11.3.2 連接器生成的與輸出段相關(guān)的符號(hào)連接器生成的與輸出段相關(guān)的符號(hào)如果未使用地址映射配置文件如果未使用地址映射配置文件(scatter文件文件),連接,連接器生成的與輸出段相關(guān)的符號(hào)如器生成的與輸出段相關(guān)的符號(hào)如 表表11.3所示;如所示;如果使用了地址映射配置文件果使用了地址映射配置文件(scatter文件文件),表,表11.3中所列的符號(hào)沒(méi)有意義,如果應(yīng)用程序使用了這些中所列的符號(hào)沒(méi)有意義,如果應(yīng)用

12、程序使用了這些符號(hào),將可能得到錯(cuò)誤的結(jié)果,這時(shí)應(yīng)該使用上一符號(hào),將可能得到錯(cuò)誤的結(jié)果,這時(shí)應(yīng)該使用上一小節(jié)中介紹的與域相關(guān)的符號(hào)。小節(jié)中介紹的與域相關(guān)的符號(hào)。12符號(hào)名稱含 義Image $RO$BaseRO輸出段運(yùn)行時(shí)的起始地址Image$RO$LimitRO輸出段運(yùn)行時(shí)存儲(chǔ)區(qū)域的界限Image $RW$BaseRW輸出段運(yùn)行時(shí)的起始地址Image$RW$LimitRW輸出段運(yùn)行時(shí)的存儲(chǔ)區(qū)域界限Image $ZI$BaseZI輸出段運(yùn)行時(shí)的起始地址Image$ZI$LimitZI輸出段運(yùn)行時(shí)存儲(chǔ)區(qū)域的界限11.3.3 連接器生成的與輸入段相關(guān)的符號(hào)連接器生成的與輸入段相關(guān)的符號(hào)ARM連接器為

13、映像文件中的每一個(gè)輸入段生成兩個(gè)連接器為映像文件中的每一個(gè)輸入段生成兩個(gè)符號(hào),如表符號(hào),如表11.4所示。所示。13符號(hào)名稱含 義SectionName$BaseSectionName輸入段運(yùn)行時(shí)的起始地址SectionName $LimitSectionName輸入段運(yùn)行時(shí)的存儲(chǔ)區(qū)域界限11.4 連接器的優(yōu)化功能連接器的優(yōu)化功能1. 刪除重復(fù)的調(diào)試信息段刪除重復(fù)的調(diào)試信息段2. 刪除重復(fù)的代碼段刪除重復(fù)的代碼段3. 刪除未使用的段刪除未使用的段4. 生成小代碼段生成小代碼段(veneer)1411.5 運(yùn)行時(shí)庫(kù)的使用運(yùn)行時(shí)庫(kù)的使用ARM連接器使用連接器使用C/C+運(yùn)行時(shí)庫(kù)的基本步驟如下。運(yùn)行

14、時(shí)庫(kù)的基本步驟如下。(1)ARM連接器根據(jù)一定的規(guī)則確定需要使用哪些C/C+運(yùn)行時(shí)庫(kù)。具體的規(guī)則在11.5.1小節(jié)中介紹。(2)從各搜索路徑中查找相應(yīng)的C/C+運(yùn)行時(shí)庫(kù)。參見(jiàn)11.5.2小節(jié)中的介紹。(3)選擇合適種類的C/C+運(yùn)行時(shí)庫(kù)。適應(yīng)于不同的編譯選項(xiàng)和連接選項(xiàng),各C/C+運(yùn)行時(shí)庫(kù)具有不同的種類。參見(jiàn)11.5.3小節(jié)中的介紹。(4)重復(fù)掃描各C/C+運(yùn)行時(shí)庫(kù),解析各符號(hào)。參見(jiàn)11.5.4小節(jié)中的介紹。1511.5.1 C/C+運(yùn)行時(shí)庫(kù)與目標(biāo)文件運(yùn)行時(shí)庫(kù)與目標(biāo)文件ARM中中C/C+運(yùn)行時(shí)庫(kù)就是一些運(yùn)行時(shí)庫(kù)就是一些ELF格式的目標(biāo)文件的集合,這些目標(biāo)格式的目標(biāo)文件的集合,這些目標(biāo)文件是按照文

15、件是按照ar格式組織在一起的。格式組織在一起的。ARM連接器在使用一般目標(biāo)文件和連接器在使用一般目標(biāo)文件和C/C+運(yùn)行時(shí)庫(kù)時(shí)有所不同。其主要區(qū)別如下所示。運(yùn)行時(shí)庫(kù)時(shí)有所不同。其主要區(qū)別如下所示。(1)在ARM連接器的輸入列表中的所有目標(biāo)文件將被無(wú)條件地包含到輸出的映像文件中,而不論該目標(biāo)文件是否被其他的目標(biāo)文件引用。如果用戶在連接時(shí)沒(méi)有指定連接選項(xiàng)-noremove,連接器將會(huì)在后面的處理中刪除映像文件中沒(méi)有被使用的段。(2)而連接器在使用C/C+運(yùn)行時(shí)庫(kù)時(shí),有所不同,主要遵守下面的規(guī)則:如果在連接器的輸入列表中顯式地指定了C/C+運(yùn)行時(shí)庫(kù)的某成員,則該成員將被無(wú)條件地包含到輸出的映像文件中,

16、而不論該成員是否被其他的目標(biāo)文件引用。如果C/C+運(yùn)行時(shí)庫(kù)中某成員被其他的目標(biāo)文件按nonweak方式引用,或者被其他已經(jīng)被包含的C/C+運(yùn)行時(shí)庫(kù)中的成員按nonweak方式引用,則該C/C+運(yùn)行時(shí)庫(kù)中的成員將會(huì)被包含到輸出的映像文件中。被按weak方式引用的C/C+運(yùn)行時(shí)庫(kù)中的成員不會(huì)被包含到輸出的映像文件中。1611.5.2 查找需要的查找需要的C/C+運(yùn)行時(shí)庫(kù)運(yùn)行時(shí)庫(kù)可以通過(guò)下面可以通過(guò)下面3種方法來(lái)指定種方法來(lái)指定ARM標(biāo)準(zhǔn)標(biāo)準(zhǔn)C/C+運(yùn)行運(yùn)行時(shí)庫(kù)的路徑。其中連接選項(xiàng)時(shí)庫(kù)的路徑。其中連接選項(xiàng)-libpath指定的指定的ARM標(biāo)標(biāo)準(zhǔn)準(zhǔn)C/C+運(yùn)行時(shí)庫(kù)的路徑優(yōu)先級(jí)高于使用環(huán)境變量運(yùn)行時(shí)庫(kù)的

17、路徑優(yōu)先級(jí)高于使用環(huán)境變量ARMLIB指定的指定的ARM標(biāo)準(zhǔn)標(biāo)準(zhǔn)C/C+運(yùn)行時(shí)庫(kù)的路徑。運(yùn)行時(shí)庫(kù)的路徑。使用連接選項(xiàng)-libpath來(lái)指定ARM標(biāo)準(zhǔn)C/C+運(yùn)行時(shí)庫(kù)的路徑。這時(shí)指定的是包含路徑armlib和cpplib的父路徑。使用Code Warrior IDE中關(guān)于連接選項(xiàng)的控制面板來(lái)指定ARM標(biāo)準(zhǔn)C/C+運(yùn)行時(shí)庫(kù)的路徑。使用環(huán)境變量ARMLIB來(lái)指定ARM標(biāo)準(zhǔn)C/C+運(yùn)行時(shí)庫(kù)的路徑。這時(shí)ARMLIB被設(shè)置成包含路徑armlib和cpplib的父路徑。1711.5.3 選擇合適種類的選擇合適種類的C/C+運(yùn)行時(shí)庫(kù)運(yùn)行時(shí)庫(kù)針對(duì)不同的編譯選項(xiàng)和連接選項(xiàng),各針對(duì)不同的編譯選項(xiàng)和連接選項(xiàng),各C/C

18、+運(yùn)行時(shí)運(yùn)行時(shí)庫(kù)具有不同的種類。各種不同種類的庫(kù)具有不同的種類。各種不同種類的C/C+運(yùn)行時(shí)運(yùn)行時(shí)庫(kù)是依靠其名稱來(lái)識(shí)別的。庫(kù)是依靠其名稱來(lái)識(shí)別的。C/C+運(yùn)行時(shí)庫(kù)的命名運(yùn)行時(shí)庫(kù)的命名格式如下所示:格式如下所示: root_.1811.5.4 掃描掃描C/C+運(yùn)行時(shí)庫(kù)運(yùn)行時(shí)庫(kù)在從上面的操作中得到需要使用的在從上面的操作中得到需要使用的C/C+運(yùn)行時(shí)庫(kù),運(yùn)行時(shí)庫(kù),ARM連接器掃描這些連接器掃描這些C/C+運(yùn)行時(shí)庫(kù),加載相應(yīng)的對(duì)象,解析各運(yùn)行時(shí)庫(kù),加載相應(yīng)的對(duì)象,解析各目標(biāo)文件中的符號(hào)。具體操作步驟如下。目標(biāo)文件中的符號(hào)。具體操作步驟如下。(1)ARM連接器按順序掃描各C/C+運(yùn)行時(shí)庫(kù),以完成所有的

19、nonweak方式的引用關(guān)系。這樣,如果有多個(gè)目標(biāo)可以滿足引用關(guān)系,則排在前面的庫(kù)被使用。這是一個(gè)必須注意的特點(diǎn)。(2)如果某個(gè)庫(kù)的成員滿足引用要求,該成員被加載,從而解析了相應(yīng)的符號(hào)。該成員函數(shù)的引入也可能實(shí)現(xiàn)了weak方式的引用。(3)在引入某個(gè)成員后,在解析了一些符號(hào)同時(shí),可能帶來(lái)新的需要解析的符號(hào)。(4)這種解析過(guò)程重復(fù)進(jìn)行,直到解析完所有的符號(hào),或者確定某些符號(hào)不能被解析為止。1911.6 從一個(gè)映像文件中使用另一個(gè)映像文件中的符號(hào)從一個(gè)映像文件中使用另一個(gè)映像文件中的符號(hào)在在ARM中,從一個(gè)映像文件中訪問(wèn)另一個(gè)映像文件中,從一個(gè)映像文件中訪問(wèn)另一個(gè)映像文件中的符號(hào)是通過(guò)中的符號(hào)是通

20、過(guò)symdefs文件實(shí)現(xiàn)的。本節(jié)介紹這文件實(shí)現(xiàn)的。本節(jié)介紹這些相關(guān)的技術(shù)。些相關(guān)的技術(shù)。2011.6.1 symdefs文件文件symdefs文件是一種目標(biāo)文件。與普通的目標(biāo)文件文件是一種目標(biāo)文件。與普通的目標(biāo)文件不同的是,其中只包含了符號(hào)和其對(duì)應(yīng)的數(shù)值,沒(méi)不同的是,其中只包含了符號(hào)和其對(duì)應(yīng)的數(shù)值,沒(méi)有包含代碼和數(shù)據(jù)。一個(gè)有包含代碼和數(shù)據(jù)。一個(gè)symdefs文件通常包括文件通常包括3部分:一個(gè)標(biāo)識(shí)符;可選的注釋部分;包含符號(hào)和部分:一個(gè)標(biāo)識(shí)符;可選的注釋部分;包含符號(hào)和其對(duì)應(yīng)的數(shù)值的部分。下面是一個(gè)其對(duì)應(yīng)的數(shù)值的部分。下面是一個(gè)symdefs文件的文件的簡(jiǎn)單例子。它包括了一個(gè)簡(jiǎn)單例子。它包括了

21、一個(gè)symdefs文件通常包含的文件通常包含的3部分。部分。標(biāo)識(shí)符:標(biāo)識(shí)符: # 注釋:注釋: ; value type name, this is an added comment2111.6.1 symdefs文件文件1. 標(biāo)識(shí)符字符串標(biāo)識(shí)符字符串2. 注釋注釋3. 符號(hào)及其對(duì)應(yīng)的值符號(hào)及其對(duì)應(yīng)的值(1)符號(hào)的地址值:ARM連接器使用固定的十六進(jìn)制值來(lái)表示符號(hào)的地址值。用戶在修改該地址值時(shí)可以使用十六進(jìn)制,也可以使用十進(jìn)制。(2)符號(hào)的類型:它有下面3類。A:ARM代碼符號(hào)。T:Thumb代碼符號(hào)。D:數(shù)據(jù)符號(hào)。(3)符號(hào)名稱:滿足ARM中關(guān)于合法符號(hào)的定義。2211.6.2 建立建立sy

22、mdefs文件文件在完成所有的其他連接操作后,在完成所有的其他連接操作后,ARM連接器可以生連接器可以生成一個(gè)成一個(gè)symdefs文件。對(duì)于部分連接和失敗的連接文件。對(duì)于部分連接和失敗的連接操作,操作,ARM連接器不會(huì)產(chǎn)生連接器不會(huì)產(chǎn)生symdefs文件。文件。使用連接選項(xiàng)使用連接選項(xiàng)-symdefs filename生成相應(yīng)的生成相應(yīng)的symdefs文件時(shí),可以有下面兩種情況:文件時(shí),可以有下面兩種情況:如果連接選項(xiàng)中指定的文件filename不存在,在ARM連接器生成包括所有全局符號(hào)的symdefs文件。如果連接選項(xiàng)中指定的文件filename已存在,則該文件的內(nèi)容將限制ARM連接器生成的

23、symdefs文件中包括哪些符號(hào)。2311.6.3 symdefs文件的使用文件的使用 使用使用symdefs文件的方法與使用普通的目標(biāo)文件相文件的方法與使用普通的目標(biāo)文件相同,將其作為輸入文件。同,將其作為輸入文件。ARM連接器從連接器從symdefs文文件中提取需要的符號(hào)及其相關(guān)信息,將這些信息加件中提取需要的符號(hào)及其相關(guān)信息,將這些信息加入到輸出符號(hào)表中,這些符號(hào)具有入到輸出符號(hào)表中,這些符號(hào)具有ABSOLUTE和和GLOBAL屬性。屬性。ARM連接器像對(duì)待從其他目標(biāo)文連接器像對(duì)待從其他目標(biāo)文件中提取的符號(hào)一樣對(duì)待這些符號(hào)。件中提取的符號(hào)一樣對(duì)待這些符號(hào)。在從在從symdefs文件中提取

24、符號(hào)及其相關(guān)信息時(shí),在文件中提取符號(hào)及其相關(guān)信息時(shí),在下列情況下,下列情況下,ARM連接器認(rèn)為該符號(hào)為非法符號(hào),連接器認(rèn)為該符號(hào)為非法符號(hào),將產(chǎn)生錯(cuò)誤信息:將產(chǎn)生錯(cuò)誤信息:該符號(hào)的某一列信息為空時(shí)。該符號(hào)的某一列具有非法的數(shù)值時(shí)。2411.7 隱藏或者重命名全局符號(hào)隱藏或者重命名全局符號(hào)本節(jié)介紹如何將輸出文件中的符號(hào)隱藏或者重命本節(jié)介紹如何將輸出文件中的符號(hào)隱藏或者重命名。這樣可以避免全局符號(hào)名稱沖突。名。這樣可以避免全局符號(hào)名稱沖突。ARM提供的提供的steering格式的文件就是用于這一目的。格式的文件就是用于這一目的。2511.7.1 steering文件的格式文件的格式steering

25、文件是一個(gè)文本文件,其格式如下:文件是一個(gè)文本文件,其格式如下:第1個(gè)非空格字符為字符“#”或者“;”的行是注釋行,注釋行是被作為空行來(lái)對(duì)待的。其中可以包含空行,以提高可讀性??招袑⒈籄RM連接器忽略。既非空行,也非注釋行的行,可以是一個(gè)完整的命令,也可以是一個(gè)命令的一部分,因?yàn)橐粋€(gè)命令可以跨多個(gè)行。一個(gè)命令行的最后一個(gè)非空格字符如果為字符“,”,表示下面的一行是本命令的續(xù)行部分。2611.7.2 steering文件中的命令文件中的命令1. RENAME2. HIDE 3. SHOW2711.8 ARM連接器的命令行選項(xiàng)連接器的命令行選項(xiàng)ARM連接器的命令行格式如下所示:連接器的命令行格式如

26、下所示: armlink -help -vsn -partial -output file -elf -ro-base address -ropi-rw-base address -rwpi -split -scatter file -debug|-nodebug-remove (RO/RW/ZI)|-unremove -entry location -keep section-id-first section-id -last section-id -libpath pathlist -scanlib|-noscanlib-locals|-nolocals -callgraph -info

27、topics -map -symbols -symdefs file-edit file -xref -xreffrom object(section) -xrefto object(section)-errors file -list file -verbose -unmangled |-mangled -via file-strict -unresolved symbol input-file-list2811.8 ARM連接器的命令行選項(xiàng)連接器的命令行選項(xiàng)其中選項(xiàng)的含義及用法如下所示。其中選項(xiàng)的含義及用法如下所示。1. -help2. -vsn3. -partial4. -output

28、file5. -elf6. -ro-base address7. -ropi8. -rw-base address9. -rwpi10. -split11. -scatter file12. -debug2911.8 ARM連接器的命令行選項(xiàng)連接器的命令行選項(xiàng)13. -nodebug14. -remove(RW/RO/ZI)15. -unremove16. -entry location17. -keep section-id18. -first section-id19. -last section-id20. -libpath pathlist21. -scanlib22. -noscan

29、lib23. -locals24. -nolocals3011.8 ARM連接器的命令行選項(xiàng)連接器的命令行選項(xiàng)25. -callgraph26. -info topics27. -map28. -symbols29. -symdefs file30. -edit file31. -xref32. -xreffrom object(section)33. -xrefto object(section)34. -errors file3111.8 ARM連接器的命令行選項(xiàng)連接器的命令行選項(xiàng)35. -list file36. -verbose37. -unmangled38. -mangled39. -via file40. -strict41. -unresolved symbol42. -input-file-list3211.9 使用使用scatter文件定義映像文件的地址映射文件定義映像文件的地址映射根據(jù)映像文件中地址映射的復(fù)雜程度,有兩種方法來(lái)告訴根據(jù)映像文件中地址映射的復(fù)雜程度,有兩種方法來(lái)告訴ARM連接器連接器這些相關(guān)的信息。對(duì)于映像文件中地址映射關(guān)系比較簡(jiǎn)單的情況,可以這些相關(guān)的信息。對(duì)于映像文件中地址映射關(guān)系比較簡(jiǎn)單的情況,可以使用命令行選項(xiàng);對(duì)于映像文件中地址映

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論