2012-03-28 5 views
0

это моя проблема: Я создал скрипт компоновщика, который делит мой код в разных регионах. Это компоновщик скрипт:Нет памяти с использованием сценария ld linker

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, когда вся программа о нескольких кб !! ПОЧЕМУ ??? Я думаю, что ld заполняет (с 0x0) пустые области между моими стекями, данными, текстовыми полями и т. Д. Как избежать этой проблемы?

Заранее спасибо.

ответ

1

Я бы попытался использовать .sectionname location синтаксис вместо . = location .section. И если это не помогает, определение отдельных областей памяти с помощью MEMORY и создание разделов должно обязательно остановить это поведение.