summaryrefslogtreecommitdiffstats
path: root/kernel/linker.ld
blob: 3c960fa86846eeb9a332865734229cba2eaacfa3 (plain) (blame)
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
75
76
77
78
79
80
81
82
83
84
85
INCLUDE memory.ld

ENTRY(_start)

/*Pass this symbols via CMake*/
MAGIC = 0x1BADB002;
FLAGS = 0;
CHECKSUM = -(MAGIC + FLAGS);

SECTIONS
{
    /DISCARD/ :
    {
        *(.fini)
        *(.comment)
    }

    /* It's a raw solution. */
    /* Automatic generation of filling .multiboot section needs. */
    .multiboot ALIGN(START_ADDR, CONSTANT(MAXPAGESIZE)) : ALIGN(CONSTANT(MAXPAGESIZE))
    {
        LONG(MAGIC);
        LONG(FLAGS);
        LONG(CHECKSUM)
    } > REGION_MULTIBOOT

    .text ALIGN(CONSTANT(MAXPAGESIZE)) : ALIGN(CONSTANT(MAXPAGESIZE))
    {
        _text = .;
        *(.text*)
        *(.init)
        . = ALIGN(CONSTANT(MAXPAGESIZE));
        _etext = .;
    } > REGION_TEXT

    .rodata :
    {
        _rodata = .;
        *(.rodata*)
        HIDDEN(__CTOR_LIST__ = .);
        *(.ctors)
        HIDDEN(__CTOR_END__ = .);
        HIDDEN(__DTOR_LIST__ = .);
        *(.dtors)
        HIDDEN(__DTOR_END__ = .);
        _erodata = .;
    } > REGION_RODATA

    .data :
    {
        _data = .;
        *(.data)
        _edata = .;
    } > REGION_DATA

    .bss :
    {
        _bss = .;
        *(.bss)
        *(COMMON)
        _ebss = .;
    } > REGION_BSS

    .stack ALIGN(CONSTANT(MAXPAGESIZE)) : ALIGN(CONSTANT(MAXPAGESIZE))
    {
        _stack = ABSOLUTE(.);
        . += 4 * CONSTANT(MAXPAGESIZE);
        _estack = ABSOLUTE(.) - 1;
    } > REGION_DATA

    .kheap ALIGN(CONSTANT(MAXPAGESIZE)) : ALIGN(CONSTANT(MAXPAGESIZE))
    {
        _kheap = ABSOLUTE(.);
        . += CONSTANT(MAXPAGESIZE);
        _ekheap = ABSOLUTE(.) - 1;
    } > REGION_DATA

    .eh_frame :
    {
        _eh_frame = .;
        *(.eh_frame)
        _e_eh_frame = .;
    } > REGION_COMMON

}