鏈結指令碼中設定標號的問題

2021-09-18 01:17:41 字數 451 閱讀 2091

memory 

provide(_reserved_mem_start = origin(reserved_mem);

provide(_reserved_mem_end = origin(reserved_mem) + length(reserved_mem));

provide(_reserved_mem_len = length(_reserved_mem_end));

上述鏈結指令碼中,_reserved_mem_len 標號存在問題。這個標號能夠在 c **中作為外部變數引用,只是取不到正確的值。

檢視鏈結器手冊發現,origin 與 length 代表兩類不同的函式。

origin 類函式將會返回乙個位址,length 類函式將會返回乙個普通數值。

由於標號必須指向乙個位址,因此將 length 函式計算的數值賦值給乙個標號的方法不合法。

鏈結指令碼中的SECTIONS定義

鏈結指令碼用來指定目標檔案生成輸出檔案時的規則,其中,必不可少的命令是 sections,它精確控制了輸入段在輸出檔案中的順序 位置和所在段。下面是在 sections 命令中定義乙個段的完整語法 sections region phdr fill 其中,secname 和 contents 是必須...

ARM彙編中的標號

arm彙編中的標號 標號 label 是為一組機器指令所起名字,表示程式中的指令或者資料位址的符號。標號可有可無,只有當需要用符號位址來訪問該語句時,才給此語句賦予標號。通過在目標位址的前面放上乙個標號,可以在指令中使用標號來代替直接使用位址。標號是程式目標標誌,總是和某位址相聯絡,供轉移或迴圈指令...

ARM彙編中的標號

1 標號 在arm 彙編中,標號代表乙個位址,段內標號的位址在彙編時確定,而段外標號的位址值在連線時確定。根據標號的生成方式,可以有以下3 鐘 基於pc 的標號 基於pc 的標號時位於目標指令前的標號或程式中的資料定義偽指令前的標號,這種標號在彙編時將被處理成pc 值加上或減去乙個數字常量。它常用於...