如何使用GNU Linker将文件代码放入单独的内存区域

时间:2017-11-12 13:37:35

标签: linker gnu ld linker-scripts

我正在尝试使用链接描述文件(LD)将我的代码拆分为2个不同的MEMORY区域。 即 - 所有代码都应该转到MEM1区域。并且只有file2.o应该进入MEM2区域。

MEMORY
{
    MEM1           : ORIGIN = 0x00000000,          LENGTH = 100K
    MEM2           : ORIGIN = 0x00800000,          LENGTH = 100K
}


SECTIONS
{
    .text    : { *(.text .text.*) } >MEM1
}

如何将file2.o排除在MEM1之外并将其指向MEM2? 我尝试过使用EXCLUDE_FILE(对于file2.o和MEM1区域)没有成功。

任何帮助/指示都会有所帮助

感谢

1 个答案:

答案 0 :(得分:0)

来自LD手册,3.6.4.2 Input Section Wildcard Patterns

  

如果文件名与多个通配符模式匹配,或者文件名显式出现并且也与通配符模式匹配,则链接器将使用链接描述文件中的第一个匹配。 / p>

你尝试过这样的事吗?

.text2 : { file2.o(.text .text.*) } >MEM2
.text  : {       *(.text .text.*) } >MEM1

然而,这也应该有效:

.text  : { *(EXCLUDE_FILE(*file2.o) .text .text.*) } >MEM1
.text2 : { file2.o(.text .text.*) } >MEM2