| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- /*
- * linker script for GD32E230x with GNU ld
- * Adapted from GD32E50x version.
- * Corrected by Gemini to fix oversized .bin file and subsequent linker errors.
- */
- MEMORY
- {
- /*
- * IMPORTANT: Please check your specific chip's datasheet for correct memory sizes.
- * The following values are for a GD32E230 with 64KB Flash and 8KB SRAM.
- */
- CODE (rx) : ORIGIN = 0x08000000, LENGTH = 64k /* MODIFIED: 64KB flash */
- DATA (rw) : ORIGIN = 0x20000000, LENGTH = 8k /* MODIFIED: 8KB sram */
- }
- /* Program Entry, set to mark it as "used" and avoid gc */
- ENTRY(Reset_Handler)
- /*
- * Define the size of the stack used by the system.
- * This is for the main stack pointer (MSP), used before RT-Thread scheduler starts and in interrupts.
- * Increased to 1KB for safety.
- */
- _system_stack_size = 0x400; /* MODIFIED: 1024 bytes */
- SECTIONS
- {
- .text :
- {
- . = ALIGN(4);
- _stext = .;
- KEEP(*(.isr_vector)) /* Startup code */
- . = ALIGN(4);
- *(.text) /* remaining code */
- *(.text.*) /* remaining code */
- *(.rodata) /* read-only data (constants) */
- *(.rodata*)
- *(.glue_7)
- *(.glue_7t)
- *(.gnu.linkonce.t*)
- /* section information for finsh shell */
- . = ALIGN(4);
- __fsymtab_start = .;
- KEEP(*(FSymTab))
- __fsymtab_end = .;
- . = ALIGN(4);
- __vsymtab_start = .;
- KEEP(*(VSymTab))
- __vsymtab_end = .;
- . = ALIGN(4);
- /* section information for initial. */
- . = ALIGN(4);
- __rt_init_start = .;
- KEEP(*(SORT(.rti_fn*)))
- __rt_init_end = .;
- . = ALIGN(4);
- . = ALIGN(4);
- _etext = .;
- } > CODE
- /*
- * The .ARM.exidx section is needed for exception handling and stack unwinding.
- * It should be placed in a loadable region like CODE.
- */
- .ARM.exidx :
- {
- __exidx_start = .;
- *(.ARM.exidx* .gnu.linkonce.armexidx.*)
- __exidx_end = .;
- } > CODE
-
- /*
- * Define the load address for the .data section.
- * It should immediately follow the .ARM.exidx section in Flash.
- */
- _sidata = __exidx_end;
- /* .data section which is used for initialized data */
- .data : AT (_sidata)
- {
- . = ALIGN(4);
- _sdata = . ;
- *(.data)
- *(.data.*)
- *(.gnu.linkonce.d*)
- . = ALIGN(4);
- _edata = . ;
- } > DATA
- /* Main stack, located at the top of the RAM region */
- .stack (NOLOAD):
- {
- . = ALIGN(8);
- _sstack = .;
- . = . + _system_stack_size;
- . = ALIGN(8);
- _estack = .;
- } > DATA
- /* .bss section which is used for uninitialized data */
- .bss :
- {
- . = ALIGN(4);
- _sbss = .;
- *(.bss)
- *(.bss.*)
- *(COMMON)
- . = ALIGN(4);
- _ebss = . ;
- } > DATA
- /* Define __bss_end for C code to find the heap start. */
- __bss_end = _ebss;
- _end = .;
-
- /******************************************************************************
- * Corrected section to discard unwanted information from the final binary. *
- ******************************************************************************/
- /DISCARD/ :
- {
- libc.a ( * )
- libm.a ( * )
- libgcc.a ( * )
- /* Discard all debugging and comment sections using the correct wildcard syntax */
- *(.comment)
- *(.note.gnu.build-id)
- *(.ARM.attributes)
- }
- }
|