2012-03-28 100 views
0

这是我的问题: 我已经创建了一个链接器脚本,它将我的代码划分到不同的区域。 这是链接脚本:使用ld链接描述文件没有内存填充

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) 
} 

} 

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

在此先感谢。

回答

1

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