kernelspace 0.1.0

Standard library for kernelspace
Documentation
ENTRY(_start)

SECTIONS {
    . = 0x100000;

    .text : ALIGN(0x1000) {
        PROVIDE(_text_start = .);
        *(.text._start)
        *(.text*)
        PROVIDE(_text_end = .);
    } :text

    .rodata : ALIGN(0x1000) {
        PROVIDE(_rodata_start = .);
        *(.rodata*)
        *(.rodata.*)
        PROVIDE(_rodata_end = .);
    } :rodata

    .eh_frame : {
        PROVIDE(_eh_frame_start = .);
        *(.eh_frame)
        *(.eh_frame.*)
        PROVIDE(_eh_frame_end = .);
    } :rodata

    .got : {
        PROVIDE(_got_start = .);
        *(.got)
        *(.got.*)
        PROVIDE(_got_end = .);
    } :data

    .data : ALIGN(0x1000) {
        PROVIDE(_data_start = .);
        *(.data*)
        *(.data.*)
        *(.sdata*)
        PROVIDE(_data_end = .);
    } :data

    /* Make sure the .got is initialized to zero when loaded into memory */
    .dynamic : {
        PROVIDE(_dynamic_start = .);
        *(.dynamic)
        PROVIDE(_dynamic_end = .);
    } :data

    .bss : ALIGN(0x1000) {
        PROVIDE(_bss_start = .); /* . stands for "here" */
        *(.bss*)
        *(.bss.*)
        *(.sbss*)
        *(COMMON)
        . = ALIGN(16);
        PROVIDE(_bss_end = .);
    } :data

    /* Discard debug sections */
    /DISCARD/ : {
        *(.comment)
        *(.debug_*)
        *(.note.*)
        *(.gcc_except_table)
    }
}

/* We need to initialize BSS to zero */
PROVIDE(__bss_size = _bss_end - _bss_start);

PHDRS
{
    text    PT_LOAD FLAGS(5);      /* 5 = rx */
    rodata  PT_LOAD FLAGS(4);      /* 4 = r */
    data    PT_LOAD FLAGS(6);      /* 6 = rw */
}