diff options
Diffstat (limited to 'VexRiscvSocSoftware/projects/murax/libs/linker.ld')
-rwxr-xr-x | VexRiscvSocSoftware/projects/murax/libs/linker.ld | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/VexRiscvSocSoftware/projects/murax/libs/linker.ld b/VexRiscvSocSoftware/projects/murax/libs/linker.ld new file mode 100755 index 0000000..ad708d0 --- /dev/null +++ b/VexRiscvSocSoftware/projects/murax/libs/linker.ld @@ -0,0 +1,109 @@ +/* +This is free and unencumbered software released into the public domain. + +Anyone is free to copy, modify, publish, use, compile, sell, or +distribute this software, either in source code form or as a compiled +binary, for any purpose, commercial or non-commercial, and by any +means. +*/ +OUTPUT_FORMAT("elf32-littleriscv", "elf32-littleriscv", "elf32-littleriscv") +OUTPUT_ARCH(riscv) +ENTRY(crtStart) + +MEMORY { + onChipRam : ORIGIN = 0x80000000, LENGTH = 8k +} + +_stack_size = DEFINED(_stack_size) ? _stack_size : 512; +_heap_size = DEFINED(_heap_size) ? _heap_size : 0; + +SECTIONS { + + .vector : { + *crt.o(.text); + } > onChipRam + + .memory : { + *(.text); + end = .; + } > onChipRam + + .rodata : + { + *(.rdata) + *(.rodata .rodata.*) + *(.gnu.linkonce.r.*) + } > onChipRam + + .ctors : + { + . = ALIGN(4); + _ctors_start = .; + KEEP(*(.init_array*)) + KEEP (*(SORT(.ctors.*))) + KEEP (*(.ctors)) + . = ALIGN(4); + _ctors_end = .; + } > onChipRam + + .data : + { + *(.rdata) + *(.rodata .rodata.*) + *(.gnu.linkonce.r.*) + *(.data .data.*) + *(.gnu.linkonce.d.*) + . = ALIGN(8); + PROVIDE( __global_pointer$ = . + 0x800 ); + *(.sdata .sdata.*) + *(.gnu.linkonce.s.*) + . = ALIGN(8); + *(.srodata.cst16) + *(.srodata.cst8) + *(.srodata.cst4) + *(.srodata.cst2) + *(.srodata .srodata.*) + } > onChipRam + + .bss (NOLOAD) : { + . = ALIGN(4); + /* This is used by the startup in order to initialize the .bss secion */ + _bss_start = .; + *(.sbss*) + *(.gnu.linkonce.sb.*) + *(.bss .bss.*) + *(.gnu.linkonce.b.*) + *(COMMON) + . = ALIGN(4); + _bss_end = .; + } > onChipRam + + .noinit (NOLOAD) : { + . = ALIGN(4); + *(.noinit .noinit.*) + . = ALIGN(4); + } > onChipRam + + + ._user_heap (NOLOAD): + { + . = ALIGN(8); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + PROVIDE ( _heap_start = .); + . = . + _heap_size; + . = ALIGN(8); + PROVIDE ( _heap_end = .); + } > onChipRam + + ._stack (NOLOAD): + { + . = ALIGN(16); + PROVIDE (_stack_end = .); + . = . + _stack_size; + . = ALIGN(16); + PROVIDE (_stack_start = .); + } > onChipRam + +} + |