123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
- OUTPUT_ARCH(arm)
- MEMORY
- {
- CODE (rx) : ORIGIN = 0x00000000, LENGTH = 512k /* 512KB flash */
- DATA (rw) : ORIGIN = 0x40000000, LENGTH = 32k /* 32K sram */
- }
- ENTRY(_start)
- _undefined_tack_size = 0x40;
- _abort_tack_size = 0x40;
- _fiq_tack_size = 0x100;
- _irq_tack_size = 0x200;
- _svc_tack_size = 0x400;
- SECTIONS
- {
- . = 0;
- . = ALIGN(4);
- .text :
- {
- *(.init)
- *(.text)
- *(.rodata)
- *(.rodata*)
- *(.glue_7)
- *(.glue_7t)
- /* section information for finsh shell */
- . = ALIGN(4);
- __fsymtab_start = .;
- KEEP(*(FSymTab))
- __fsymtab_end = .;
- . = ALIGN(4);
- __vsymtab_start = .;
- KEEP(*(VSymTab))
- __vsymtab_end = .;
- . = ALIGN(4);
- . = ALIGN(4);
- __rt_init_start = .;
- KEEP(*(SORT(.rti_fn*)))
- __rt_init_end = .;
- . = ALIGN(4);
- } >CODE
- . = ALIGN(4);
- .ctors :
- {
- PROVIDE(__ctors_start__ = .);
- KEEP(*(SORT(.ctors.*)))
- KEEP(*(.ctors))
- PROVIDE(__ctors_end__ = .);
- } > CODE
- .dtors :
- {
- PROVIDE(__dtors_start__ = .);
- KEEP(*(SORT(.dtors.*)))
- KEEP(*(.dtors))
- PROVIDE(__dtors_end__ = .);
- } > CODE
- __end_of_text__ = .;
- /* .ARM.exidx is sorted, so has to go in its own output section. */
- __exidx_start = .;
- .ARM.exidx :
- {
- *(.ARM.exidx* .gnu.linkonce.armexidx.*)
- /* This is used by the startup in order to initialize the .data secion */
- _sidata = .;
- } > CODE
- __exidx_end = .;
- /* .data section which is used for initialized data */
- .data : AT (_sidata)
- {
- . = ALIGN(4);
- /* This is used by the startup in order to initialize the .data secion */
- _sdata = . ;
- *(.data)
- *(.data.*)
- *(.gnu.linkonce.d*)
- . = ALIGN(4);
- /* This is used by the startup in order to initialize the .data secion */
- _edata = . ;
- } >DATA
- __data_end = .;
- .noinit :
- {
- *(.bss.noinit)
- } > DATA
- .stack :
- {
- . = ALIGN(4);
- _undefined_stack_base = .;
- . = . + _undefined_tack_size;
- _undefined_stack_top = .;
-
- _abort_stack_base = .;
- . = . + _abort_tack_size;
- _abort_stack_top = .;
-
- _fiq_stack_base = .;
- . = . + _fiq_tack_size;
- _fiq_stack_top = .;
-
- _irq_stack_base = .;
- . = . + _irq_tack_size;
- _irq_stack_top = .;
-
- _svc_stack_base = .;
- . = . + _svc_tack_size;
- _svc_stack_top = .;
- } >DATA
- __bss_start = .;
- .bss :
- {
- . = ALIGN(4);
- /* This is used by the startup in order to initialize the .bss secion */
- _sbss = .;
- *(.bss)
- *(COMMON)
- . = ALIGN(4);
- /* This is used by the startup in order to initialize the .bss secion */
- _ebss = . ;
- } > DATA
- __bss_end = .;
- /* Align here to ensure that the .bss section occupies space up to
- _end. Align after .bss to ensure correct alignment even if the
- .bss section disappears because there are no input sections. */
- . = ALIGN(32 / 8);
- }
|