152 lines
3.7 KiB
Plaintext
152 lines
3.7 KiB
Plaintext
ENTRY(InterruptVector)
|
|
|
|
MEMORY {
|
|
FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 16K /* 16KB FLASH */
|
|
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 2K /* 2KB RAM */
|
|
}
|
|
|
|
SECTIONS {
|
|
/* Initialization code section */
|
|
.init : {
|
|
_sinit = .;
|
|
. = ALIGN(4);
|
|
KEEP(*(SORT_NONE(.init)))
|
|
. = ALIGN(4);
|
|
_einit = .;
|
|
} >FLASH AT>FLASH
|
|
|
|
/* Main code section */
|
|
.text : {
|
|
. = ALIGN(4);
|
|
*(.text)
|
|
*(.text.*)
|
|
*(.rodata)
|
|
*(.rodata*)
|
|
*(.gnu.linkonce.t.*)
|
|
. = ALIGN(4);
|
|
} >FLASH AT>FLASH
|
|
|
|
.fini : {
|
|
KEEP(*(SORT_NONE(.fini)))
|
|
. = ALIGN(4);
|
|
} >FLASH AT>FLASH
|
|
|
|
PROVIDE(_etext = .);
|
|
PROVIDE(_eitcm = .);
|
|
|
|
.preinit_array : {
|
|
PROVIDE_HIDDEN(__preinit_array_start = .);
|
|
KEEP(*(.preinit_array))
|
|
PROVIDE_HIDDEN(__preinit_array_end = .);
|
|
} >FLASH AT>FLASH
|
|
|
|
.init_array : {
|
|
PROVIDE_HIDDEN(__init_array_start = .);
|
|
KEEP(*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
|
|
KEEP(*(.init_array EXCLUDE_FILE(*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o) .ctors))
|
|
PROVIDE_HIDDEN(__init_array_end = .);
|
|
} >FLASH AT>FLASH
|
|
|
|
.fini_array : {
|
|
PROVIDE_HIDDEN(__fini_array_start = .);
|
|
KEEP(*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
|
|
KEEP(*(.fini_array EXCLUDE_FILE(*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o) .dtors))
|
|
PROVIDE_HIDDEN(__fini_array_end = .);
|
|
} >FLASH AT>FLASH
|
|
|
|
.ctors : {
|
|
/* gcc uses crtbegin.o to find the start of
|
|
the constructors, so we make sure it is
|
|
first. Because this is a wildcard, it
|
|
doesn't matter if the user does not
|
|
actually link against crtbegin.o; the
|
|
linker won't look for a file to match a
|
|
wildcard. The wildcard also means that it
|
|
doesn't matter which directory crtbegin.o
|
|
is in. */
|
|
KEEP(*crtbegin.o(.ctors))
|
|
KEEP(*crtbegin?.o(.ctors))
|
|
/* We don't want to include the .ctor section from
|
|
the crtend.o file until after the sorted ctors.
|
|
The .ctor section from the crtend file contains the
|
|
end of ctors marker and it must be last */
|
|
KEEP(*(EXCLUDE_FILE(*crtend.o *crtend?.o) .ctors))
|
|
KEEP(*(SORT(.ctors.*)))
|
|
KEEP(*(.ctors))
|
|
} >FLASH AT>FLASH
|
|
|
|
.dtors : {
|
|
KEEP(*crtbegin.o(.dtors))
|
|
KEEP(*crtbegin?.o(.dtors))
|
|
KEEP(*(EXCLUDE_FILE(*crtend.o *crtend?.o) .dtors))
|
|
KEEP(*(SORT(.dtors.*)))
|
|
KEEP(*(.dtors))
|
|
} >FLASH AT>FLASH
|
|
|
|
.dalign : {
|
|
. = ALIGN(4);
|
|
PROVIDE(_data_vma = .);
|
|
} >RAM AT>FLASH
|
|
|
|
.dlalign : {
|
|
. = ALIGN(4);
|
|
PROVIDE(_data_lma = .);
|
|
} >FLASH AT>FLASH
|
|
|
|
.data : {
|
|
. = ALIGN(4);
|
|
*(.gnu.linkonce.r.*)
|
|
*(.data .data.*)
|
|
*(.gnu.linkonce.d.*)
|
|
. = ALIGN(8);
|
|
PROVIDE(__global_pointer$ = . + 0x800);
|
|
*(.sdata .sdata.*)
|
|
*(.sdata2*)
|
|
*(.gnu.linkonce.s.*)
|
|
. = ALIGN(8);
|
|
*(.srodata.cst16)
|
|
*(.srodata.cst8)
|
|
*(.srodata.cst4)
|
|
*(.srodata.cst2)
|
|
*(.srodata .srodata.*)
|
|
. = ALIGN(4);
|
|
PROVIDE(_edata = .);
|
|
} >RAM AT>FLASH
|
|
|
|
.bss : {
|
|
. = ALIGN(4);
|
|
PROVIDE(_sbss = .);
|
|
*(.sbss*)
|
|
*(.gnu.linkonce.sb.*)
|
|
*(.bss*)
|
|
*(.gnu.linkonce.b.*)
|
|
*(COMMON*)
|
|
. = ALIGN(4);
|
|
PROVIDE(_ebss = .);
|
|
} >RAM AT>FLASH
|
|
|
|
PROVIDE(_end = _ebss);
|
|
PROVIDE(end = .);
|
|
PROVIDE(_eusrstack = ORIGIN(RAM) + LENGTH(RAM));
|
|
|
|
/DISCARD/ : {
|
|
*(.note .note.*)
|
|
*(.eh_frame .eh_frame.*)
|
|
*(.comment .comment.*)
|
|
*(.ARM.extab* .gnu.linkonce.armextab.*)
|
|
*(.ARM.exidx*)
|
|
}
|
|
|
|
/* EEPROM section - reserves exactly one 64-byte page */
|
|
.eeprom : {
|
|
. = ALIGN(64);
|
|
_reserved_nv_start = .;
|
|
KEEP(*(.eeprom));
|
|
. = _reserved_nv_start + 64;
|
|
_reserved_nv_end = .;
|
|
} >FLASH AT>FLASH
|
|
|
|
PROVIDE(_reserved_nv_start = _reserved_nv_start);
|
|
PROVIDE(_reserved_nv_end = _reserved_nv_end);
|
|
}
|