Ref: https://sourceware.org/binutils/docs-2.21/ld/Scripts.html#Scripts
基本語法
MEMORY { ROM : ORIGIN = 0, LENGTH = 2M ROM2 : ORIGIN = 0x10000000, LENGTH = 1M RAM : ORIGIN = 0x20000000, LENGTH = 1M }
SECTIONS { .text :
{
*(.text)
} > ROM
. = 0x1000000; .rodata :
{
*(.rodata)
} > ROM2
.bss 0x20000000 :
{
KEEP(*(.bss))
}
.bss1 . :
{
KEEP(*(.bss1))
} > RAM
.data :
{
*(.data)
} > RAM
}
. 代表位置計數器值
.text / .rodata / .bss / .bss1 / .data : section 名稱
.bss 0x20000000 :
.bss section 起始位置指定為 0x20000000
.bss . :
.bss section 起始位置指定為目前位置計數器值
如果不帶, section 位置可能做 alignment, 可以用參數 --warn-section-align
看是否有 section 因為 alignment 被更改位置
{ } 內描述相關的資料區段.
* : 代入任何字串, 包括空字串
KEEP : 不管主程式有沒有用到, 全部帶入
一般而言,
.text : function
.data : 有初始值的 static / global 變數
.bss : 沒有初始值的 static / global 變數 ( 初始值為 0 )
註解 : 和 C 相同, 採用 /* */
參數介紹:
--whole-archive : 將參數後指定的 object file 全部帶入處理
Ref: http://www.scoberlin.de/content/media/http/informatik/gcc_docs/ld_3.html
Ref: https://www.informatik.uni-hamburg.de/RZ/software/gnu/gcc/ld_3.html
Ref: http://osr507doc.sco.com/en/tools/ld_cmd_lang_sections.html