无法使用GCC将特殊部分映射到图像箱中的指定位置

时间:2012-12-12 06:49:15

标签: gcc

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

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

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

我的.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

1 个答案:

答案 0 :(得分:0)

.initdata创建一个单独的输出部分,如:

SECTIONS
{
    . = 0x08540000;

    .initdata : { *(.initdata) }

    .rodata : { *(.rodata) }

...

使用原始链接描述文件,在.initdata前面放置其他内容,检查地图文件的内容。

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

例如,如果您的输入文件中有.gnu.linkonce.r*个部分,它们可能最终位于第一个内存区域,其属性与该部分属性一致,在本例中为{{1} } region,这可能会导致您观察到的内容。