久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 3328|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

armlinker option

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:98924 發(fā)表于 2015-12-9 02:26 | 只看該作者 回帖獎(jiǎng)勵(lì) |正序?yàn)g覽 |閱讀模式

armlinker  option

.armlinker 概念

1.       鏈接器根據(jù)鏈接的對(duì)象的構(gòu)建屬性,自動(dòng)選擇要鏈接的相應(yīng)標(biāo)準(zhǔn)CC++庫(kù)變體。

鏈接器可以鏈接ARM代碼、Thumb代碼和Thumb-2代碼,并自動(dòng)生成交互操作膠合代碼,以便在需要時(shí)切換處理器狀態(tài)。鏈接器還可以在需要時(shí)自動(dòng)生成內(nèi)聯(lián)膠合代碼或長(zhǎng)跳轉(zhuǎn)膠合代碼,以擴(kuò)展跳轉(zhuǎn)指令的范圍。

2.       鏈接器支持的一些命令選項(xiàng)可用于為系統(tǒng)內(nèi)存映射中的代碼和數(shù)據(jù)指定存放的位置。另外,也可以使用分散加載描述文件,在加載時(shí)和執(zhí)行時(shí)指定輸出影像中各個(gè)代碼和數(shù)據(jù)節(jié)在內(nèi)存中的位置。這樣可以創(chuàng)建跨越過(guò)個(gè)內(nèi)存的復(fù)雜影像。

3.       鏈接器支持讀/寫(xiě)數(shù)據(jù)壓縮,以減少輸出影像的大小。另外,連接器還可以:

·         生成關(guān)于鏈接文件的調(diào)試和引用信息

·         生成靜態(tài)調(diào)用圖并列出其堆棧的使用情況

·         控制輸出影像中符號(hào)表的內(nèi)容

·         顯示輸出中代碼和數(shù)據(jù)的大小

        鏈接器可提供反饋信息,以便在下次編譯文件時(shí)提示編譯器有未使用的函數(shù)。這些函數(shù)在后  面的編譯中將放在各自所在的節(jié)中,以便鏈接器將來(lái)刪除它們。

4.       armlink的輸入

armlink的輸入包括

·         一個(gè)或多個(gè)ELF對(duì)象格式的目標(biāo)文件

·         用armar創(chuàng)建的一個(gè)或過(guò)個(gè)庫(kù)。

·         一個(gè)符號(hào)定義文件

5.       armlink的輸出

成功調(diào)用armlink后的輸出為下列選項(xiàng)之一:

·         ELF可執(zhí)行格式的可執(zhí)行影像

·         ELF共享對(duì)象格式的共享對(duì)象

·         ELF對(duì)象格式的部分鏈接對(duì)象

·         ELF對(duì)象格式的可重定位對(duì)象

對(duì)于簡(jiǎn)單映像,ELF可執(zhí)行文件包含相當(dāng)于映像中的RORW輸出節(jié)的段。ELF可執(zhí)行文件還具有包含映像輸出節(jié)的ELF節(jié)。

 Note:

可以使用formelfELF可執(zhí)行格式的可執(zhí)行映像轉(zhuǎn)換為其他文件格式

6.       構(gòu)造可執(zhí)行映像

·         解析輸入目標(biāo)文件之間的符號(hào)引用

·         從庫(kù)中提取對(duì)象模塊來(lái)滿足還未滿足引用的需要

·         根據(jù)屬性和名稱排序輸入節(jié),并將屬性和名稱相似的節(jié)合并為相臨快

·         刪除未使用的節(jié)和未使用的虛擬函數(shù)

·         刪除重復(fù)的公共組合公共代碼、數(shù)據(jù)及調(diào)試節(jié)

·         根據(jù)提供的分組信息和定位信息將對(duì)象片段組織為內(nèi)存區(qū)

·         給可重定位值分配地址

·         生成可執(zhí)行映像

7.       構(gòu)建部分鏈接對(duì)象

·         刪除重復(fù)的調(diào)試節(jié)副本

·         最小化符號(hào)表的大小

·         將未解析的引用保留為未解析狀態(tài)

·         生成一個(gè)對(duì)象,將其用作后續(xù)鏈接步驟的輸入

Note:如果使用部分鏈接,則不能通過(guò)分散加載描述文件中的名稱來(lái)引用組件對(duì)象

.armlink command syntax

 根據(jù)選項(xiàng)類型而定,可以分為單字母選項(xiàng)和關(guān)鍵字選項(xiàng)

(1)單字母選項(xiàng)

在所有單字母選項(xiàng)或帶參數(shù)的單字母選項(xiàng)之前,都有一個(gè)單短劃線-選項(xiàng)與自變量之間可以使用空格,或者自變量可以緊跟選項(xiàng)之后。例如:- o file

(2)關(guān)鍵字選項(xiàng)

在所有關(guān)鍵字選項(xiàng)或帶參數(shù)的關(guān)鍵字選項(xiàng)前面,都有一個(gè)雙短劃線- - 。 例如:- - output file

Note:

對(duì)于使用括號(hào)的命令行參數(shù),在 UNIX 系統(tǒng)上可能需要使用反斜杠 (\) 字符對(duì)括號(hào)字符進(jìn)行轉(zhuǎn)義。

獲取幫助和信息

要獲取關(guān)于可用命令行選項(xiàng)和工具版本號(hào)的信息,請(qǐng)使用:

1.- - help 輸出一些常用命令行選項(xiàng)的匯總。

2.- - vsn 顯示鏈接器版本信息和許可證信息。

指定輸入文件列表

1.input-file-list

1>這是以空格分隔的對(duì)象、庫(kù)或符號(hào)定義 (symdefs) 文件的列表。鏈接器將整個(gè)輸入文件列表按照一定的順序排列。如果鏈接器無(wú)法解決輸入文件問(wèn)題,則生成診斷消息。可以將 symdefs 文件包括在列表中,為先前生成的映像文件提供全局符號(hào)值。

2>可以用以下方式來(lái)使用輸入文件列表中的庫(kù):

指定要添加到庫(kù)列表中的一個(gè)庫(kù),用于提取解析了任何未解析的非弱引用的成員。例如,指定輸入文件列表中的mystring.lib

note:

僅當(dāng)此列表中的庫(kù)成員解析了未解析的非弱引用時(shí),才將該列表中的庫(kù)成員添加到映像中。

指定從庫(kù)中提取的特定成員,并將它們作為單個(gè)對(duì)象添加到映像中。例如,指定輸入文件列表中的mystring.lib(strcmp.o)

3>鏈接器按以下順序處理輸入文件列表:

(1) 對(duì)象無(wú)條件添加到映像中。

(2) 使用模式將從庫(kù)中選擇的成員無(wú)條件地添加到映像中(如同添加對(duì)象一樣)。例如,以下命令無(wú)條件地添加 mylib 中的所有 a*.o 對(duì)象和 stdio.o

armlink main.o mylib(stdio.o) mylib(a*.o)

UNIX 平臺(tái)上,可能需要對(duì)括號(hào)進(jìn)行轉(zhuǎn)義,例如:

armlink main.o mylib\(stdio.o\)

(3) 將標(biāo)準(zhǔn) C C++ 庫(kù)添加到庫(kù)列表中,以后用于解析任何遺留的引用.

2.—libpath  pathless

1>指定用于搜索 ARM 標(biāo)準(zhǔn) C C++ 庫(kù)的路徑列表。

2>包含 ARM 庫(kù)的父目錄的缺省路徑由 RVCT31LIB 環(huán)境變量指定。此處指定的任何路徑都將覆蓋由 RVCT31LIB 指定的路徑。

3>pathlist 是由逗號(hào)分隔的路徑列表,僅用于搜索所需的 ARM 庫(kù)。指定多個(gè)路徑名時(shí),在逗號(hào)和路徑名之間不要留有空格,例如path1,path2,path3,...,pathn

4>此列表必須以 ARM 庫(kù)目錄 armlib cpplib 的父目錄結(jié)束。

Note:

此選項(xiàng)不影響搜索用戶庫(kù)。應(yīng)改為使用 --userlibpath

3. - - [no_]scanlib

啟用或禁用掃描缺省庫(kù)(標(biāo)準(zhǔn) ARM C C++ 庫(kù))以解析引用。- - scanlib 是缺省值。

4. - - userlibpath pathlist

1>指定用于搜索用戶庫(kù)的路徑列表。

2>pathlist 是由逗號(hào)分隔的路徑列表,用于搜索所需的庫(kù)。指定多個(gè)路徑名時(shí),在逗號(hào)和路徑名之間不要留有空格,例如path1,path2,path3,...,pathn

控制鏈接器行為

1- - strict 指示鏈接器將可能會(huì)產(chǎn)生故障的條件報(bào)告為錯(cuò)誤而不是警告。其中一個(gè)條件示例是:從非交互函數(shù)獲取交互函數(shù)的地址。

2. - - [no_]strict_relocations

- - strict_relocation

指示鏈接器報(bào)告已過(guò)時(shí)的和不提倡使用的重定位的實(shí)例。在鏈接使用先前版本的 ARM 工具構(gòu)建的目標(biāo)文件時(shí),最有可能發(fā)生重定位錯(cuò)誤和警告。使用此選項(xiàng)可以確保對(duì)象的 ABI 兼容性。 缺省情況下關(guān)閉該選項(xiàng),并且鏈接器在可能時(shí)自動(dòng)處理不提倡使用和已過(guò)時(shí)的重定位。

指定輸出類型和輸出文件名

1.- - output  file:指定輸出文件的名稱。該文件可以是部分鏈接對(duì)象或可執(zhí)行映像。如果未指定輸出文件名,則鏈接器使用以下缺省名稱:

Ø  __image.axf 如果輸出是可執(zhí)行映像

Ø  __object.o 如果輸出是部分鏈接對(duì)象。

如果指定 file 時(shí)不帶路徑信息,則它將在當(dāng)前工作目錄中創(chuàng)建。如果指定了路徑信息,則該目錄將成為缺省的輸出目錄。

2.- - partial 創(chuàng)建部分鏈接對(duì)象,而不是可執(zhí)行映像。

3- - reloc 創(chuàng)建可重定位的 ELF 映像。可重定位映像有一個(gè)包含重定位信息的動(dòng)態(tài)段,可用于在鏈接后重新定位映像。鏈接后重定位的示例包括高級(jí) ROM 構(gòu)建和運(yùn)行時(shí)動(dòng)態(tài)加載。

如果映像在鏈接時(shí)的地址加載,則鏈接器生成的可重定位映像不需要處理重定位,并且映像的調(diào)試數(shù)據(jù)有效。當(dāng)加載映像的地址與鏈接時(shí)的地址不同時(shí),將會(huì)處理重定位,不過(guò)映像中現(xiàn)有的任何調(diào)試數(shù)據(jù)都將無(wú)效。

單獨(dú)使用時(shí),- - reloc 生成的映像類似于簡(jiǎn)單類型 1,映像的載入?yún)^(qū)屬性設(shè)置為 RELOC。有關(guān)詳細(xì)信息,請(qǐng)參閱第3-24 頁(yè)的類型 1,一個(gè)加載區(qū)和幾個(gè)連續(xù)執(zhí)行區(qū)。

4- - shared 創(chuàng)建 SVr4 共享對(duì)象。

5- - sysv 創(chuàng)建可在 ARM Linux 上使用的 SVr4 格式的 ELF 可執(zhí)行文件。

為映像指定內(nèi)存映射信息

1. - - ro-base address

將包含 RO 輸出節(jié)的區(qū)的加載地址和執(zhí)行地址都設(shè)置為 addressaddress 必須是字對(duì)齊的。如果未指定此選項(xiàng),并且沒(méi)有指定分散加載文件,則缺省 RO 基址為 0x8000

2. - - rw-base addres

將包含 RW 輸出節(jié)的區(qū)的執(zhí)行地址設(shè)置為 address address 必須是字對(duì)齊的。

3>- - ropi 使包含 RO 輸出節(jié)的載入?yún)^(qū)和執(zhí)行區(qū)與位置無(wú)關(guān)。如果未使用此選項(xiàng),則將區(qū)標(biāo)記為絕對(duì)地址區(qū)。通常每個(gè)只讀輸入節(jié)必須為只讀的位置無(wú)關(guān)代碼 (ROPI)。如果選擇了此選項(xiàng),則鏈接器將:

檢查節(jié)之間的重定位信息的有效性

確保 armlink 本身生成的任何代碼(如交互操作膠合代碼)為只讀的位置無(wú)關(guān)代碼。

4>- - rwpi 將包含 RW ZI 輸出節(jié)的載入?yún)^(qū)和執(zhí)行區(qū)設(shè)置為與位置無(wú)關(guān)。如果未使用此選項(xiàng),則將區(qū)標(biāo)記為絕對(duì)地址區(qū)。此選項(xiàng)需要 --rw-base的值。如果未指定 --rw-base,則假定為 --rw-base 0。通常每個(gè)可寫(xiě)輸入節(jié)必須為可讀寫(xiě)的位置無(wú)關(guān)代碼 (RWPI)

如果選擇了此選項(xiàng),則鏈接器將:

•檢查是否在任何讀寫(xiě)執(zhí)行區(qū)的輸入節(jié)上設(shè)置了 PI 屬性

•檢查節(jié)之間的重定位信息的有效性

•生成與表 Region$$Table 中的靜態(tài)基址相關(guān)的條目。這在復(fù)制、解壓縮或初始化區(qū)時(shí)使用。

5>- - scatter file

使用 file 中包含的分散加載描述來(lái)創(chuàng)建映像內(nèi)存映射。該描述提供映像中各個(gè)區(qū)和節(jié)的分組和布局的詳細(xì)信息。

- - scatter 選項(xiàng)不能與任意內(nèi)存映射選項(xiàng):- - partial- - ro-base- - rw-base- - ropi- - rwpi- - rosplit - - split 結(jié)合使用,也不能與 --reloc --startup 結(jié)合使用。

Not:如果你使用了該選項(xiàng),你必須自己實(shí)現(xiàn)堆和棧初始化函數(shù)__user_initial_stackheap()函數(shù).

6>- - split :將包含 RO RW 輸出節(jié)的缺省載入?yún)^(qū)分成以下載入?yún)^(qū):

一個(gè)包含 RO 輸出節(jié)的區(qū)。缺省的加載地址是 0x8000,但可以使用 --ro-base 選項(xiàng)指定其他地址。

一個(gè)包含 RW ZI 輸出節(jié)的區(qū)。使用 --rw-base 選項(xiàng)可指定加

載地址。此選項(xiàng)需要 --rw-base 的值。如果未指定 --rw-base,則假定為 --rw-base 0

Note: 兩個(gè)區(qū)都是根區(qū)。

7>rosplit: 將缺省 RO 載入?yún)^(qū)分為兩個(gè) RO 輸出節(jié),一個(gè)用于 RO-CODE,另一個(gè)

用于 RO-DATA

8>- - fpic 可用于鏈接位置無(wú)關(guān)代碼 (PIC),即使用 /fpic 限定符編譯的代碼。

只有在代碼使用 System V 共享庫(kù)時(shí)才執(zhí)行相對(duì)尋址。

Note:

如果使用了 --shared 但未使用 --fpic,則鏈接器將輸出一個(gè)可降級(jí)錯(cuò)誤。

控制調(diào)試信息

這些選項(xiàng)控制映像中的調(diào)試信息

1- - debug

- - [no_]debug 使用 --debug 輸出文件中包括調(diào)試信息。調(diào)試信息包括調(diào)試輸入節(jié)以及符號(hào)和字符串表。這是缺省設(shè)置。使用 --no_debug 從輸出文件中排除調(diào)試信息。 ELF 映像將變小,但不能在源代碼級(jí)別對(duì)其進(jìn)行調(diào)試。鏈接器放棄在輸入對(duì)象和庫(kù)成員中找到的任何調(diào)試輸入節(jié),并且不包括映像中的符號(hào)和字符串表。僅在載入到調(diào)試器時(shí)對(duì)映像的大小有影響。不影響下載到目標(biāo)的任何最終二進(jìn)制映像的大小。如果創(chuàng)建部分鏈接對(duì)象,而不是映像,則鏈接器放棄在輸入對(duì)象中找到的調(diào)試輸入節(jié),但在部分鏈接對(duì)象中生成符號(hào)和字符串表

Note:

如果需要 fromelf --fieldoffsets 步驟,則不要使用 --no_debug。如果生成的映像沒(méi)有調(diào)試信息,則 fromelf 無(wú)法:

•將映像轉(zhuǎn)換為其他文件格式

•生成有意義的反匯編列表。

 2. - - datacompressor on|off

缺省情況下,將會(huì)啟用 RW 數(shù)據(jù)壓縮以便最大程度地減小 ROM 大小。使用 --datacompressor off 可關(guān)閉 RW 數(shù)據(jù)壓縮。

3- - datacompressor list|id

可用于為 RW 數(shù)據(jù)壓縮指定提供的算法之一:

使用 --datacompressor list 可獲取可供鏈接器使用的數(shù)據(jù)壓縮器的列表。

如果未指定數(shù)據(jù)壓縮算法,則鏈接器將自動(dòng)選擇一種最合適的算法。通常不必覆蓋此選擇。如果要覆蓋鏈接器,請(qǐng)使用 --datacompressor id 指定數(shù)據(jù)壓縮算法。指定壓縮器后,便會(huì)將解壓縮器添加至代碼區(qū)。如果最終映像沒(méi)有壓縮的數(shù)據(jù),則不添加解壓縮器。

4. - - edit file-list

(1)可用于指定控制文件,其中包含用于編輯輸出二進(jìn)制中的符號(hào)表的命令。您可以在控制文件中指定命令來(lái):

隱藏全局符號(hào)。

使用此選項(xiàng)可隱藏目標(biāo)文件中的特定全局符號(hào)。隱藏符號(hào)不是公共可見(jiàn)的。

重命名全局符號(hào)。

使用此選項(xiàng)可解決符號(hào)命名沖突。

(2)如果指定多個(gè)控制文件,可以使用以下語(yǔ)法之一:

armlink --edit file1 --edit file2 --edit file3

armlink --edit file1,file2,file3

Note:

不要在逗號(hào)和文件名之間留有空格。

5 - -entry location

(1)指定映像的唯一初始入口點(diǎn)。一個(gè)映像可包含多個(gè)入口點(diǎn),但使用此選項(xiàng)指定的初始入口點(diǎn)存儲(chǔ)在可執(zhí)行文件頭中,以供加載程序使用。此選項(xiàng)在命令行中只能使用一次。加載映像時(shí),ARM RealView Debugger使用此入口地址來(lái)初始化程序計(jì)數(shù)器 (PC)

(2)初始入口點(diǎn)必須滿足以下條件:

映像入口點(diǎn)必須在執(zhí)行區(qū)內(nèi)

•執(zhí)行區(qū)必須是非重疊的,而且必須是根執(zhí)行區(qū)(加載地址 ==執(zhí)行地址)。

使用以下一項(xiàng)替換 location

1entry_address

一個(gè)數(shù)值,例如:- - entry 0x0

2symbol 將映像入口點(diǎn)指定為 symbol 的地址,

例如:- - entry   reset_handler

3offset+object(section)

將映像入口點(diǎn)指定為特定 object section 中的 offset

例如:

- - entry  8+startup.o(startupseg)

--entry 的自變量中不能包含空格。匹配輸入節(jié)和對(duì)象名時(shí)不區(qū)分大小寫(xiě)。可以使用以下簡(jiǎn)化表示法:

•如果 offset 為零,則使用 object(section)

•如果只有一個(gè)輸入節(jié),則使用 object。如果 object 中有多個(gè)輸入節(jié),則 armlink 將生成一則錯(cuò)誤消息。

Note:

如果映像的入口地址在 Thumb 狀態(tài)下,則地址的最低有效位必須設(shè)置為 1。如果指定了符號(hào),則鏈接器會(huì)自動(dòng)完成此操作。例如,如果入口代碼在 Thumb 狀態(tài)下從地址 0x8000 開(kāi)始,則必須使用 --entry 0x8001

6 - -first  section-id

將選定的輸入節(jié)放到其執(zhí)行區(qū)中的第一個(gè)節(jié)。例如:可以將包含向量表的節(jié)放在映像中的第一個(gè)節(jié)。使用以下一項(xiàng)替換section-id:

1>symbol 選擇定義 symbol 的節(jié)。 由于只能有一個(gè)節(jié)放置為第一個(gè)節(jié),因此不能指定有多個(gè)定義的符號(hào)。 例如:- - first reset

2>object(section)

從object 中選擇 section.在 object 和后面的左括號(hào)之間不能有空格。 例如:- - first init.o(init)

3>object

選擇 object 中的單個(gè)輸入節(jié)。 使用此短格式時(shí),如果有多個(gè)輸入節(jié),則 armlink 會(huì)生成一則錯(cuò)誤消息。 例如:- - first init.o

Note:

1.使用分散加載時(shí),在分散加載描述文件中使用 +FIRST代替

2.兩個(gè)不同的節(jié),不能一起放到同一個(gè)執(zhí)行區(qū)中的首位。因此,該選項(xiàng)只能出現(xiàn)一次。

7.  - -last section-id

(1) 將選定的輸入節(jié)放置為其執(zhí)行區(qū)中的最后一個(gè)節(jié)。例如,可以強(qiáng)制將包含校驗(yàn)和的輸入節(jié)放置為 RW 節(jié)中的最后一個(gè)節(jié)。

(2)使用以下一項(xiàng)替換 section-id

Ø  symbol :選擇定義 symbol 的節(jié)。 由于只能有一個(gè)節(jié)放置為最后一個(gè)節(jié),因此不能指定有多個(gè)定義的符號(hào)。

例如:- - last checksum

Ø  object(section):從 object 中選擇 section。 在 object 和后面的左括號(hào)之間不能有空格。

例如:- - last checksum.o(check)

Ø  object: 選擇 object 中的單個(gè)輸入節(jié).如果 object 中有多個(gè)輸入節(jié),則 armlink 將生成一則錯(cuò)誤消息。

Note:

1.使用分散加載時(shí),在分散加載描述文件中使用+LAST代替

2.兩個(gè)不同的節(jié),不能一起放到同一個(gè)執(zhí)行區(qū)中的末位。因此,該選項(xiàng)只能出現(xiàn)一次。

8 - - remove

--remove (RO/RW/ZI/DBG)

(1)使能從映像中刪除未使用的輸入節(jié)。

(2) 如果輸入節(jié)包含映像入口點(diǎn)(image entry point),或者被已使用節(jié)引用,則認(rèn)為它是已使用節(jié)。

Note:

當(dāng)使用—remove時(shí),要避免不小心刪除reset code或異常處理。可以使用—keep option來(lái)識(shí)別異常處理段或使用ENTRY 指令來(lái)標(biāo)記他們作為入口點(diǎn)。

 3)可以使用一些段的屬性來(lái)更精確的控制那些未使用的節(jié)被刪除。可以使用一個(gè)或多個(gè)限定詞。

RO: 去除所有類型為RO的未使用的節(jié)

RW: 去除所有類型為RW的未使用的節(jié)

ZI: 去除所有類型為ZI的未使用的節(jié)

DBG: 去除所有類型為DEBUG的未使用的節(jié)

這些限定詞沒(méi)有任何順序,但是必須用括號(hào)括起來(lái)使用,使用‘/’來(lái)分隔他們。

4)默認(rèn)是 –remove (RO/RW/ZI/DBG)

5)如果沒(méi)有指定限定詞 --remove,則所有未使用的節(jié)都被刪除等價(jià)于 –remove(RO/RW/ZI/DBG).

9 - -no_remove

在調(diào)試時(shí)使用 --no_remove 可在最終映像中保留所有輸入節(jié)(即使它們是未使用的)。

10 - -startup  symbol

1)該選項(xiàng)使能鏈接器可以使用帶有不同startup符號(hào)的C庫(kù)。如果鏈接器發(fā)現(xiàn)了main()的定義但是沒(méi)有發(fā)現(xiàn)對(duì)這個(gè)符號(hào)的引用或定義,則將這個(gè)引用加到symbol。默認(rèn)情況下,這個(gè)符號(hào)是__main.

11 - -cppinit  symbol

項(xiàng)使鏈接器可以使用帶有不同初始化符號(hào)的備選 C++ 庫(kù)。 缺省情況下,symbol 設(shè)置為:__cpp_initialize__aeabi_

12 --fini  symbol

指定用于為最終化代碼定義入口點(diǎn)的符號(hào)名。當(dāng)動(dòng)態(tài)鏈接器卸載可執(zhí)行文件或共享對(duì)象時(shí),將執(zhí)行此代碼。

13 -- init symbol

指定用于定義初始化代碼的符號(hào)名。當(dāng)動(dòng)態(tài)鏈接器加載可執(zhí)行文件或共享對(duì)象時(shí),將執(zhí)行此代碼。

14 --pad num

(1) 可用于設(shè)置填充字節(jié)的值。

(2) 鏈接器將此值賦給插入載入?yún)^(qū)或執(zhí)行區(qū)的所有填充字節(jié)。

(3)num 是一個(gè)整數(shù),可以用十六進(jìn)制格式賦值。 例如,將 num 設(shè)置為0xFF 可能會(huì)有助于縮短 ROM 編程時(shí)間。 如果 num 大于 0xFF,則填充字節(jié)將設(shè)置為 (char)num。

Note:

填充只能插入:

• 載入?yún)^(qū)中。 在載入?yún)^(qū)之間沒(méi)有填充。

• 固定執(zhí)行區(qū)之間(除了強(qiáng)制對(duì)齊之外)。 填充不能插入已達(dá)到最大長(zhǎng)度的載入?yún)^(qū),除非其頂部有固定的執(zhí)行區(qū)。

• 節(jié)之間,以確保它們遵循對(duì)齊約束。

15 - - soname name

指定共享對(duì)象運(yùn)行時(shí)名稱,該名稱由鏈接到此共享對(duì)象的任何對(duì)象用作相關(guān)性名稱。此相關(guān)性存儲(chǔ)在鏈接器生成的可執(zhí)行文件中。

16 - - dynamiclinker name

指定用于在運(yùn)行時(shí)加載和重定位文件的動(dòng)態(tài)鏈接器。與共享對(duì)象鏈接時(shí),動(dòng)態(tài)鏈接器使用存儲(chǔ)在可執(zhí)行文件中的相關(guān)性信息來(lái)標(biāo)識(shí)要加載的文件。 如果在 ARM Linux 平臺(tái)上工作,則鏈接器假定缺省動(dòng)態(tài)鏈接器為 /lib/ld-linux.so.2。

17 - - keep section-id

(1)指定刪除未使用節(jié)時(shí)不能刪除的輸入節(jié)

(2)section-id自變量的所有形式都可以包含 * 和 ? 通配符。 可以在命令行中指定多個(gè) --keep 選項(xiàng)。

(3)使用以下一項(xiàng)替換 section-id

Ø  symbol :指定在刪除未使用節(jié)時(shí)保留定義 symbol 的輸入節(jié)。 如果symbol 存在多個(gè)定義,則 armlink 將生成一則錯(cuò)誤消息。

例如,可以使用 --keep int_handler。

要保留定義以 _handler 結(jié)尾的符號(hào)的所有節(jié),可以使用- - keep *_handler。

Ø  object(section)

指定在刪除未使用節(jié)時(shí)保留 object 中的 section。

例如,要保留 vectors.o 對(duì)象的 vect 節(jié),請(qǐng)使用:- - keep vectors.o(vect)

要保留 vectors.o 對(duì)象中節(jié)名稱的前三個(gè)字母是 vec 的所有節(jié),請(qǐng)使用:- - keep vectors.o(vec*)

Ø  object:

指定在刪除未使用節(jié)時(shí)保留 object 中的單個(gè)輸入節(jié)。 如果使用此短格式,但 object 中有多個(gè)輸入節(jié),則 armlink將生成一則錯(cuò)誤消息。

例如,您可能使用 --keep dspdata.o。

要保留名稱以 dsp 開(kāi)頭的每個(gè)對(duì)象中的單個(gè)輸入節(jié),請(qǐng)使用 --keep dsp*.o。

18. - - [no_]locals

(1)使用 --locals 可指示鏈接器在生成可執(zhí)行映像時(shí)將局部符號(hào)添加到輸出符號(hào)表中。 這是缺省設(shè)置。

(2)使用 --no_locals 可指示鏈接器不將局部符號(hào)添加到輸出符號(hào)表中。如果要減小輸出符號(hào)表的大小,則這是非常有用的優(yōu)化。

產(chǎn)生內(nèi)存相關(guān)信息:

這些選項(xiàng)控制如何提取和表述關(guān)于映像的信息

1.—callgraph:

1>創(chuàng)建函數(shù)的靜態(tài)調(diào)用圖。 這與生成的映像保存在同一目錄中。 調(diào)用圖將為映像中的所有函數(shù)提供定義和參考信息。

Note:

如果鏈接器要計(jì)算函數(shù)堆棧的使用情況,則在匯編程序文件中定義的任意函數(shù)必須具有合適的 PROC/ENDP FRAME PUSH/POP 指令。

2>對(duì)于每個(gè)函數(shù) func,鏈接器列出以下內(nèi)容:

·         編譯函數(shù)的處理器狀態(tài)(ARM 或 Thumb)

·         調(diào)用 func 的函數(shù)集合

·         func 調(diào)用的函數(shù)集合

·         映像中使用 func 地址的次數(shù)

3>此外,調(diào)用圖將標(biāo)識(shí)以下函數(shù):

• 通過(guò)交互操作膠合代碼調(diào)用的函數(shù)

• 在映像外定義的函數(shù)

• 允許保持未定義狀態(tài)的函數(shù)(弱引用)。

4>靜態(tài)調(diào)用圖還提供有關(guān)堆棧的使用信息。 其中列出:

• 每個(gè)函數(shù)使用的堆棧幀的大小

• 在所有調(diào)用序列(即所有非循環(huán)函數(shù)調(diào)用鏈)中,函數(shù)使用的堆棧的最大大小。

5>如果有循環(huán),或者鏈接器在調(diào)用鏈中檢測(cè)到不帶有堆棧大小信息的函數(shù),則將 + Unknown 添加至堆棧使用情況中。 將會(huì)添加一條原因以指示堆棧使用情況未知的原因。

6>如果沒(méi)有函數(shù)調(diào)試幀信息,鏈接器將報(bào)告缺少堆棧幀信息。

7>對(duì)于間接函數(shù),鏈接器不能可靠地確定哪個(gè)函數(shù)發(fā)出了間接調(diào)用。這可能會(huì)影響為調(diào)用鏈計(jì)算最大堆棧用量的方式。

8>在匯編語(yǔ)言代碼中使用幀指令可描述代碼使用堆棧的情況。 這些指令確保向調(diào)試器提供調(diào)試幀信息,以執(zhí)行堆棧展開(kāi)或配置報(bào)告。

2.feedback file

1>生成反饋文件,在下次編譯文件時(shí)提示編譯器有未使用的函數(shù)。

2>下次編譯文件時(shí),使用編譯器選項(xiàng) --feedback file 指定要使用的反饋文件。 未使用函數(shù)放置在各自所在的節(jié)中,以便鏈接器可能在未來(lái)進(jìn)行刪除。

3.info topics

1>輸出關(guān)于指定主題的信息,其中 topics 是由逗號(hào)分隔的主題關(guān)鍵字列表。 主題關(guān)鍵字可以是以下之一:

·         common: 列出從映像中刪除的所有公共節(jié)。 使用此選項(xiàng)相當(dāng)于- - info common,totals。

·         debug:列出因使用--remove 而從映像中刪除的所有被拒絕的輸入調(diào)試節(jié)。 使用此選項(xiàng)相當(dāng)于 --info debug,totals。

·         inline: 列出由鏈接器內(nèi)聯(lián)的所有函數(shù)以及內(nèi)聯(lián)的總數(shù)

·         sizes: 列出映像中每個(gè)輸入對(duì)象和庫(kù)成員的代碼和數(shù)據(jù)(RO 數(shù)據(jù)、RW 數(shù)據(jù)、ZI 數(shù)據(jù)和調(diào)試數(shù)據(jù))大小。 使用此選項(xiàng)相當(dāng)于 --info sizes,totals。

·         tailreorder: 列出因?yàn)槭褂?--tailreorder 而移動(dòng)到其目標(biāo)上方的所有尾調(diào)用節(jié)

·         totals: 列出輸入對(duì)象和庫(kù)的代碼和數(shù)據(jù)(RO 數(shù)據(jù)、RW 數(shù)據(jù)、ZI數(shù)據(jù)和調(diào)試數(shù)據(jù))的總大小。

·         veneers: 列出鏈接器生成的膠合代碼。

·         unused: 列出因使用 --remove 而從映像中刪除的所有未使用節(jié).

·         Exceptions: 提供異常表生成和優(yōu)化的信息

2>- - info sizes,totals 的輸出始終在輸入對(duì)象和庫(kù)的總大小中包含填充值。

3>如果使用 RW 數(shù)據(jù)壓縮(缺省設(shè)置),或已使用 --datacompressor id選項(xiàng)指定了壓縮器,則 --info sizes,totals 的輸出將在 Grand Totals下方包括一個(gè)條目,反映映像的真實(shí)大小。

Note:

列中的關(guān)鍵字之間不允許有空格。

4. - - map 創(chuàng)建映像映射。 映射包含映像中每個(gè)載入?yún)^(qū)、執(zhí)行區(qū)和輸入節(jié)(包括鏈接器生成的輸入節(jié))的地址和大小。

5.—symbols:列出鏈接步驟中使用的每個(gè)局部符號(hào)和全局符號(hào)以及相應(yīng)的值。

Note:

這不包括映射符號(hào)。 使用 --list_mapping_symbols 可在輸出中包括映射符號(hào)。

6. list_mapping_symbols

在 --symbols 生成的輸出中包括映射符號(hào)。

例如:

$a ARM 代碼

$t Thumb 代碼

$d 數(shù)據(jù)。

映射符號(hào)用于標(biāo)記 ARM 代碼、Thumb 代碼和數(shù)據(jù)之間的轉(zhuǎn)換。

7. - - symdefs file:

1>從輸出映像創(chuàng)建包含全局符號(hào)定義的文件。

2>缺省情況下,所有全局符號(hào)都寫(xiě)入到 symdefs 文件中。 如果名為file 的 symdefs 文件已經(jīng)存在,則鏈接器將其輸出限制為此文件中已列出的符號(hào)。

Note:

如果不希望出現(xiàn)此行為,請(qǐng)確保在鏈接步驟之前刪除任何現(xiàn)有的symdefs 文件。

3>如果指定的 file 不帶路徑信息,則鏈接器將在寫(xiě)入輸出映像的目錄中搜索它。 如果未找到該文件,則在該目錄中創(chuàng)建它。

4>在與其他映像鏈接時(shí),可以將符號(hào)定義文件用作輸入。

8. - -xref :

列出輸入節(jié)之間的所有交叉引用

9. - -xrefdbg:

列出輸入調(diào)試節(jié)之間的所有交叉引用。

10. - - xref{from|to} object(section)

列出交叉引用:

• 從 object 中的輸入 section 到其他輸入節(jié)

• 從其他輸入節(jié)到 object 中的輸入 section

如果想知道來(lái)自/指向特定輸入節(jié)的引用,則使用 --xref 鏈接器選項(xiàng)生成的列表子集會(huì)很有用。可以多次使用此選項(xiàng),列出來(lái)自/指向多個(gè)輸入節(jié)的引用。

控制鏈接其診斷消息

這些選項(xiàng)控制鏈接器發(fā)出診斷消息的方式

1. - -diag_style arm|ide

更改警告和錯(cuò)誤消息的格式。- - diag_style arm 為缺省值,- - diag_style gnu 與由 gcc 報(bào)告的格式相匹配,而 --diag_style ide 與由 Microsoft Visual Studio 報(bào)告的格式相匹配。

2.- -diag_suppress taglist

1>禁用所有具有指定標(biāo)簽的診斷消息。

2>此選項(xiàng)需要以逗號(hào)分隔的診斷消息編號(hào)列表,用于指定要禁止顯示的消息。例如,要禁止顯示編號(hào)為 L6314W 和 L6305W 的警告消息,使用以下命令:

armlink --diag_suppress L6314,L6305 ...

3.- -diag_warning taglist

設(shè)置具有指定標(biāo)簽的診斷消息,使其作為警告消息顯示,例如,在希望降級(jí)錯(cuò)誤消息的情況下。

此選項(xiàng)需要以逗號(hào)分隔的診斷消息編號(hào)列表,用于指定要降級(jí)的消息。

4.- -errors file:

1>將診斷消息從標(biāo)準(zhǔn)錯(cuò)誤流重定向到 file

2>指定的文件在鏈接階段開(kāi)始時(shí)創(chuàng)建。如果已存在同名的文件,則清除它。如果指定 file 時(shí)不帶路徑信息,則將在當(dāng)前目錄中創(chuàng)建該文件。

5. - -list file

1>將 --info- - map- - symbols--verbose- - xref- - xreffrom - - xrefto 命令的輸出中的診斷消息重定向到 file

2>輸出診斷消息時(shí)創(chuàng)建指定的文件。 如果已存在同名的文件,則覆蓋它。不過(guò),如果不輸出診斷消息,則不創(chuàng)建文件。這種情況下,任何現(xiàn)有的同名文件的內(nèi)容將保持不變。如果指定的 file 不帶路徑信息,則將在輸出目錄(即寫(xiě)入輸出映像的目錄)中創(chuàng)建該文件。

6. - -verbose:

1>輸出關(guān)于鏈接操作的詳細(xì)信息,包括所包含的對(duì)象和從中提取對(duì)象的庫(kù)。因?yàn)榇溯敵鐾ǔ:荛L(zhǎng),所以可能需要將此命令與 --list file命令結(jié)合使用,將信息重定向到 file

7. - -via file

 使用以下選項(xiàng)可以指定包含附加鏈接器命令行參數(shù)的 via 文件:

- - via file file 中讀取輸入文件名和鏈接器選項(xiàng)的詳細(xì)列表。

可以在鏈接器命令行中輸入多個(gè) --via 選項(xiàng)。 --via 選項(xiàng)也可以包括

在 via 文件中。

 

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 夜夜夜夜夜夜曰天天天 | jdav视频在线观看免费 | 亚洲字幕在线观看 | 久草在线 | 九九热精品视频 | 国产精品一区久久久久 | 欧美成人精品 | 激情av| 国产成人精品一区二区三区在线 | 中文字幕91| 女同久久另类99精品国产 | 午夜在线观看视频 | 久久99精品国产99久久6男男 | 成人欧美一区二区三区在线观看 | 日韩精品一区二区在线观看 | 日韩一区二区在线播放 | 国产极品91 | 99福利网| 久久久久91 | 免费中文字幕日韩欧美 | 日韩a在线 | 免费在线观看成人av | 一区二区三区视频在线观看 | 欧美精品一区二区三区在线播放 | 看av网| 日本不卡一区二区三区 | 亚洲高清久久 | av国产精品毛片一区二区小说 | 国产精品久久久久999 | 国产精品视频播放 | 亚洲国产视频一区二区 | 日韩视频一区在线观看 | 精品国产伦一区二区三区观看方式 | 性网址| 国产高清精品在线 | 日韩欧美在线不卡 | 激情婷婷成人 | 欧美日韩中文字幕在线 | 免费在线日韩 | 成人国产一区二区三区精品麻豆 | 日韩亚洲视频 |