X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/47c4e0c19ae8526b14ce4e0d7b243f7a4dc6fafd..bffa3430fbbaaad29bec0b5bee9c1f0bfc7fd068:/lunaix-os/link/lunaix.ldx?ds=sidebyside diff --git a/lunaix-os/link/lunaix.ldx b/lunaix-os/link/lunaix.ldx index e6f718a..a33ee21 100644 --- a/lunaix-os/link/lunaix.ldx +++ b/lunaix-os/link/lunaix.ldx @@ -3,49 +3,103 @@ ENTRY(ENTRY_POINT) +PHDRS +{ + boot_text PT_LOAD; + boot_data PT_LOAD; + + text PT_LOAD; + data PT_LOAD; + rodata PT_LOAD FLAGS(4); + + var PT_LOAD; +} + SECTIONS { . = LOAD_OFF; + __kload_start = ALIGN(PAGE_GRAN); + + + /* ---- boot start ---- */ + __kboot_start = .; + #include + __kboot_end = ALIGN(PAGE_GRAN); + + /* ---- kernel start ---- */ . += KEXEC_BASE; - PROVIDE(__kexec_text_start = ALIGN(PAGE_GRAN)); + PROVIDE(__kexec_text_start = ALIGN(PAGE_GRAN)); __kexec_start = ALIGN(PAGE_GRAN); - - + /* kernel executable sections */ #include "kernel.ldx" - /* link-time allocated array */ #include "lga.ldx" + /* + All the auto-generated stuff and uninitialized data + must be a member of `var` segment + */ + + .autogen BLOCK(PAGE_GRAN) + : AT ( ADDR(.autogen) - KEXEC_BASE ) + { + KEEP(*(.autogen.*)) + } : var + + /* + End of loadable regions. + This fake section is used to correct address + calculation + */ + + .__load_end : { + __kload_end = ALIGN(PAGE_GRAN) - KEXEC_BASE; + } : var - /* All other stuff */ - .ksymtable BLOCK(PAGE_GRAN) : AT ( ADDR(.ksymtable) - KEXEC_BASE ) + .kpg BLOCK(PAGE_GRAN) + : AT ( ADDR(.kpg) - KEXEC_BASE ) { - *(.ksymtable) - } + KEEP(*(.kpg)) + } : var - .bss BLOCK(PAGE_GRAN) : AT ( ADDR(.bss) - KEXEC_BASE ) + .bss BLOCK(PAGE_GRAN) + : AT ( ADDR(.bss) - KEXEC_BASE ) { *(.bss) - } - .bss.kstack BLOCK(PAGE_GRAN) : AT ( ADDR(.bss.kstack) - KEXEC_BASE ) - { + /* static kernel stack */ + . = ALIGN(PAGE_GRAN); PROVIDE(__bsskstack_start = .); - *(.bss.kstack) - PROVIDE(__bsskstack_end = .); - } - __kexec_end = ALIGN(PAGE_GRAN); + /* reclaimable data */ + . = ALIGN(PAGE_GRAN); + PROVIDE(__bssreclaim_start = .); + *(.bss.reclaim) + PROVIDE(__bssreclaim_end = .); + } : var + + .__end_of_lunaix : + { + __kbss_end = ALIGN(PAGE_GRAN) - KEXEC_BASE; + __kexec_end = ALIGN(PAGE_GRAN); + +#ifdef CONFIG_USE_DEVICETREE + __dtb_start = ALIGN(PAGE_GRAN); + . = __dtb_start + CONFIG_DTB_MAXSIZE; +#endif + + __kimg_end = ALIGN(PAGE_GRAN); + } : var } \ No newline at end of file