【问题标题】:No memory fill using a ld linker script使用 ld 链接描述文件不填充内存
【发布时间】:2012-03-28 08:56:10
【问题描述】:

这是我的问题: 我创建了一个链接器脚本,将我的代码划分为不同的区域。 那是链接描述文件:

OUTPUT_ARCH(arm)

SECTIONS {

. = 0x400000;
.stack1 : {
    __stack_start1 = . ;
}

. = 0x800000;
.stack2 : {
    __stack_start2 = . ;
}

. = 0x19900000;
.vectors1 : {
    *(.resetvector1)
}

. = 0x19900018;
.irq_vector : {
    *(.irqvector)
}

. = 0x19908000;
.init : {           /* Init code and data   */
    *(.text1.init)
    *(.text2.init)
}

/DISCARD/ : {           /* Exit code and data   */
    *(.text.exit)
    *(.data.exit)
    *(.exitcall.exit)
}

.text : {           /* Real text segment    */
    _text = .;      /* Text and read-only data*/
        *(.text)
    _etext = .;     /* End of text section  */
}

. = ALIGN(8192);

.data : {
    /*
     * first, the init task union, aligned
     * to an 8192 byte boundary.
     */
    *(.init.task)

    /*
     * then the cacheline aligned data
     */
    . = ALIGN(32);
    *(.data.cacheline_aligned)

    /*
     * and the usual data section
     */
    *(.data)
    CONSTRUCTORS

    _edata = .;
}

.bss : {
    __bss_start = .;    /* BSS  */
    *(.bss)
    *(COMMON)
    _end = . ;
}

. = ALIGN(8192);
_end_kernel = . ;

.vectors2 : {
        *(.resetvector2)
}

}

它工作正常,但是当整个程序大约只有几 kb 时,输出文件大约是 450Mb! 为什么?? 我认为 ld 填充(使用 0x0)我的堆栈、数据、文本等区域之间的空白区域。 如何避免这个问题?

提前致谢。

【问题讨论】:

    标签: memory-management gcc linker ld arm7


    【解决方案1】:

    我会尝试使用 .sectionname location 语法而不是 。 = 位置.section。如果这没有帮助,使用 MEMORY 定义单独的内存区域并让部分去那里肯定会阻止这种行为。

    【讨论】:

      猜你喜欢
      • 2018-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-04
      • 2014-12-13
      • 2013-05-17
      • 2019-07-31
      • 2015-05-02
      相关资源
      最近更新 更多