diff options
author | Flavian Kaufmann <flavian@flaviankaufmann.ch> | 2024-05-15 08:27:12 +0200 |
---|---|---|
committer | Flavian Kaufmann <flavian@flaviankaufmann.ch> | 2024-05-15 08:27:12 +0200 |
commit | 9e76b9001c37ab2da2e99c922406b991bd0e53af (patch) | |
tree | 686aa90639b28c92013e6158e01d5010973b0f03 /prog/link.ld | |
parent | d107f7e40f02a7374b8685ba310500a6c38d43b1 (diff) | |
download | riscv_cpu-9e76b9001c37ab2da2e99c922406b991bd0e53af.tar.gz riscv_cpu-9e76b9001c37ab2da2e99c922406b991bd0e53af.zip |
running c program
Diffstat (limited to 'prog/link.ld')
-rw-r--r-- | prog/link.ld | 67 |
1 files changed, 59 insertions, 8 deletions
diff --git a/prog/link.ld b/prog/link.ld index 98658c3..4cc02ec 100644 --- a/prog/link.ld +++ b/prog/link.ld @@ -1,16 +1,67 @@ -OUTPUT_ARCH( "riscv" ) -ENTRY(_start) +/* Linker script for RISC-V */ +/* Define memory regions */ MEMORY { - ROM (rx) : ORIGIN = 0x00010000, LENGTH = 0xF0000 # 0x0001_0000 - 0x000F_FFFF - RAM (rwx) : ORIGIN = 0x00100000, LENGTH = 0xFEFFFFF # 0x0010_0000 - 0xFF0F_FFFF + ROM (rx) : ORIGIN = 0x00010000, LENGTH = 0x400 /* 1024 bytes for ROM */ + RAM (rwx) : ORIGIN = 0x00100000, LENGTH = 0x400 /* 1024 bytes for RAM */ } +ENTRY(_start) + +/* Define sections */ SECTIONS { - .text : { *(.text) } > ROM - .data : { *(.data) } > RAM - .bss : { *(.bss) } > RAM - .stack : { *(.stack) } > RAM + /* Code section */ + .text : + { + KEEP(*(.init)) + KEEP(*(.text)) + KEEP(*(.fini)) + KEEP(*(.rodata)) + _etext = .; + } > ROM + + /* Initialized data section */ + .data : AT(_etext) + { + _sdata = .; + KEEP(*(.data)) + _edata = .; + } > RAM + + /* Uninitialized data section */ + .bss : + { + _sbss = .; + KEEP(*(.bss)) + KEEP(*(COMMON)) + _ebss = .; + } > RAM + + /* Stack section */ + .stack (NOLOAD) : + { + _stack_start = .; + . += 0x10; /* Adjust the size as needed */ + _stack_end = .; + } > RAM + + /* Heap section */ + .heap (NOLOAD) : + { + _heap_start = .; + . += 0x10; /* Adjust the size as needed */ + _heap_end = .; + } > RAM } + +/* Define symbols for memory initialization */ +PROVIDE(_start = 0x00010000); +PROVIDE(_etext = _etext); +PROVIDE(_sdata = _sdata); +PROVIDE(_edata = _edata); +PROVIDE(_sbss = _sbss); +PROVIDE(_ebss = _ebss); +PROVIDE(_sstack = _sstack); +PROVIDE(_estack = _estack);
\ No newline at end of file |