0

我在我的程序中定义了一个特殊的数据部分,如下所示:

const qlEntry GADLENTRY __attribute__((section(".initdata"))) = 
{
    //...
}

我希望这个特殊部分放在图像箱的标题中。

我的 .ld 文件是这样写的。

MEMORY
{
    rom (rx) :  ORIGIN = 0x08540000, LENGTH = 0x100000
    ram (rwx) : ORIGIN = 0xA0200000, LENGTH = 0x200000
}

SECTIONS
{
    . = 0x08540000;
        .rodata : 
{
    *(.initdata)
    *(.rodata)
}
    .data : 
{ 
    *(.data) 
}
    .bss : 
{ 
    *(.bss) 
}
text : 
{ 
    *(.text) 
}
}

}

但是在构建之后,我在 .map 文件中查看:

.initdata       0x0854b304       0x2c
 .initdata      0x0854b304       0x2c ql_Main.o
                0x0854b304                GADLENTRY

有什么问题?我怎样才能得到正确的垃圾箱。

 *(.initdata)
 .initdata      0x08540000
4

1 回答 1

0

为类似内容创建一个单独的输出部分.initdata

SECTIONS
{
    . = 0x08540000;

    .initdata : { *(.initdata) }

    .rodata : { *(.rodata) }

...

使用您的原始链接器脚本文件,将其他内容放在前面.initdata,检查映射文件是什么。

确保您已经描述了链接描述文件中的每个输入部分。

例如,如果.gnu.linkonce.r*您的输入文件中有部分,它们可能最终在第一个内存区域中,其属性与该部分属性一致,在这种情况下是rom区域,这可能会导致您观察到的结果。

于 2012-12-12T09:43:43.710 回答