GNU LD Script - OVERLAY 和 AT的神奇用法
Posted on 週四 10 三月 2016 in Archive
GNU ld linker有設計一套專用的script,可以讓programmer自訂你link出來的東西長什麼樣(? 從Memory的layout、code RO/RW data的位置、Load前和實際上run的address等等 這樣的工具在Embedded System很常用到
OVERLAY
這個功能應該只有Embedded比較會用到XD 主要就是讓兩個不同的code/data可以放在同一地方跑
不同於手冊的範例也可以這樣寫
MEMORY {
ROM : ORIGIN = 0x00000000, LENGTH = 8K
RAM : ORIGIN = 0x00002000, LENGTH = 120K
}
SECTION {
...
OVERLAY : {
.text1 { *(.text1) }
} > RAM AT > ROM
...
}
這樣這個Section的LMA就會和其他Section照順序被排進RAM,而LMA則是照順序排進ROM
但要注意的是,這樣做的話在OVERLAY後面的section的LMA也會被自動排進ROM
在後面的section手動用> RAM
也無效,要再研究一下有沒有其他辦法設定