这是我的问题:我创建了一个链接器脚本,将我的代码划分为不同的区域。那是链接描述文件:
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)我的堆栈、数据、文本等区域之间的空白区域。如何避免这个问题?
提前致谢。