first commit
This commit is contained in:
151
ch32ext.ld
Normal file
151
ch32ext.ld
Normal file
@@ -0,0 +1,151 @@
|
||||
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);
|
||||
}
|
||||
Reference in New Issue
Block a user