summaryrefslogtreecommitdiff
path: root/linker.ld
blob: 5bf65863aa97584221fd8cf6c336a0558f8244d1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
OUTPUT_ARCH(riscv)
ENTRY(_start)

MEMORY
{
    ROM   (rx)  : ORIGIN = 0x80000000, LENGTH = 1M
    RAM   (rwx) : ORIGIN = 0x81000000, LENGTH = 1M
    LOGRAM (rw) : ORIGIN = 0x82000000, LENGTH = 1M
}

SECTIONS
{
    .text : {
        KEEP(*(.text._start))
        KEEP(*(.text.start))
        *(.text)
        *(.text.*)
    } > ROM

    .rodata : {
        *(.rodata)
        *(.rodata.*)
    } > ROM

    .init_array : {
        __init_array_start = .;
        KEEP(*(.init_array))
        KEEP(*(.init_array.*))
        __init_array_end = .;
    } > ROM

    .data : {
        __data_start = .;
        *(.data)
        *(.data.*)
        __data_end = .;
    } > RAM AT> ROM
    __data_load = LOADADDR(.data);

    .bss : {
        __bss_start = .;
        *(.bss)
        *(.bss.*)
        *(COMMON)
        __bss_end = .;
    } > RAM

    .stack (NOLOAD) : {
        . = ALIGN(16);
        __stack_bottom = .;
        . += 8K;
        __stack_top = .;
    } > RAM

    .ringbuf (NOLOAD) : ALIGN(64)
    {
        __ringbuf_start = .;
        KEEP(*(.ringbuf))
        . = ALIGN(64);
        __ringbuf_end = .;
    } > LOGRAM

    /DISCARD/ : {
        *(.eh_frame)
        *(.eh_frame.*)
        *(.eh_frame_hdr)
        *(.comment)
        *(.note.*)
        *(.debug_*)
        *(.stab*)
        *(.llvm_*)
        *(.rela.*)
    }
}