GNU链接描述文件:选择性运行地址(VMA)分配

时间:2012-06-04 06:22:06

标签: text linker load gnu

我正在编写一个GNU链接器脚本文件,需要在正确的方向上轻推以解决以下问题。

正在为其创建链接描述文件的设备具有用于托管文本和rodata的flash。它还有用于托管数据和BSS的SRAM。

我创建了链接器脚本的变体,它具有: - 当DATA和BSS在SRAM中时,CODE和RODATA加载到闪存中 - SRAM中的CODE,RODATA,DATA和BSS

这些工作正常。

我现在必须创建一个链接器脚本的变体,它在flash中有大部分TEXT。但是某些名称以众所周知的后缀结尾的例程将被加载到SRAM中。

例如,我希望将Func1IRAMCode()和Func2__IRAMCode()加载到SRAM部分,而其他没有IRAMCode后缀的函数必须加载到flash中。

出于便携性原因,我不会将属性(部分)附加到这些SRAM功能。

这是我磕磕绊绊的地方。 文本部分具有以下规则:

.text :
{
*(.text .text.* .gnu.linkonce.t.*);
} > FLASH

.Misc :
{
* (.text.*IRAMCode);
} > SRAM

.data和.bss部分是单独定义的。

问题是* IRAMCode()正在获得分配的闪存地址。

从文本部分排除* IRAMCode的语法是什么?

你是如何在项目中解决这个问题的?

1 个答案:

答案 0 :(得分:0)

执行此操作的方法是将您的函数放在另一个部分(例如.sram.text)中,为此,请为每个特定函数使用gcc的section属性(例如:__attribute__ (( section ".sram.text"))。

因此,将所需部分通配到SRAM是非常容易的。