kern.ldscript revision 1.28
11.28Smanu/* $NetBSD: kern.ldscript,v 1.28 2019/12/10 02:06:07 manu Exp $ */ 21.1Sfvdl 31.15Suebayasi#include "assym.h" 41.15Suebayasi 51.17Smaxv/* 61.17Smaxv * PAE is enabled by default on amd64, the large page size is therefore 71.17Smaxv * 2MB (and not 4MB!). 81.17Smaxv */ 91.17Smaxv 101.17Smaxv__PAGE_SIZE = 0x1000 ; 111.17Smaxv__LARGE_PAGE_SIZE = 0x200000 ; 121.17Smaxv 131.1SfvdlENTRY(_start) 141.1SfvdlSECTIONS 151.1Sfvdl{ 161.28Smanu multiboot 0x4000 : 171.28Smanu { 181.28Smanu KEEP(*(multiboot)); 191.28Smanu } 201.24Smaxv .text : AT (ADDR(.text) & 0x0fffffff) 211.16Smaxv { 221.28Smanu . = ALIGN(__LARGE_PAGE_SIZE); 231.26Smaxv __text_user_start = . ; 241.26Smaxv *(.text.user) 251.26Smaxv . = ALIGN(__PAGE_SIZE); 261.26Smaxv __text_user_end = . ; 271.26Smaxv 281.16Smaxv *(.text) 291.16Smaxv *(.text.*) 301.16Smaxv *(.stub) 311.24Smaxv . = ALIGN(__LARGE_PAGE_SIZE); 321.24Smaxv } =0xCC 331.16Smaxv _etext = . ; 341.16Smaxv PROVIDE (etext = .) ; 351.16Smaxv 361.19Smaxv /* 371.19Smaxv * Push the rodata segment up to the next large page boundary so that we 381.19Smaxv * can map the text segment with large pages. 391.19Smaxv */ 401.19Smaxv . = ALIGN(__LARGE_PAGE_SIZE); 411.19Smaxv 421.18Smaxv __rodata_start = . ; 431.25Smaxv 441.25Smaxv .rodata.hotpatch : 451.25Smaxv { 461.25Smaxv __rodata_hotpatch_start = . ; 471.25Smaxv *(.rodata.hotpatch) 481.25Smaxv __rodata_hotpatch_end = . ; 491.25Smaxv } 501.25Smaxv 511.16Smaxv .rodata : 521.16Smaxv { 531.16Smaxv *(.rodata) 541.16Smaxv *(.rodata.*) 551.27Smaxv . = ALIGN(COHERENCY_UNIT); 561.27Smaxv __CTOR_LIST__ = .; 571.27Smaxv *(.ctors) 581.27Smaxv __CTOR_END__ = .; 591.16Smaxv } 601.16Smaxv 611.22Smaxv . = ALIGN(__LARGE_PAGE_SIZE); 621.20Smaxv 631.16Smaxv __data_start = . ; 641.16Smaxv .data : 651.16Smaxv { 661.16Smaxv *(.data) 671.16Smaxv } 681.16Smaxv 691.16Smaxv . = ALIGN(COHERENCY_UNIT); 701.16Smaxv .data.cacheline_aligned : 711.16Smaxv { 721.16Smaxv *(.data.cacheline_aligned) 731.16Smaxv } 741.16Smaxv . = ALIGN(COHERENCY_UNIT); 751.16Smaxv .data.read_mostly : 761.16Smaxv { 771.16Smaxv *(.data.read_mostly) 781.16Smaxv } 791.16Smaxv . = ALIGN(COHERENCY_UNIT); 801.16Smaxv 811.16Smaxv _edata = . ; 821.16Smaxv PROVIDE (edata = .) ; 831.16Smaxv __bss_start = . ; 841.16Smaxv .bss : 851.16Smaxv { 861.16Smaxv *(.bss) 871.16Smaxv *(.bss.*) 881.16Smaxv *(COMMON) 891.23Smaxv . = ALIGN(__LARGE_PAGE_SIZE); 901.16Smaxv } 911.21Smaxv 921.23Smaxv . = ALIGN(__PAGE_SIZE); 931.21Smaxv 941.21Smaxv /* End of the kernel image */ 951.21Smaxv __kernel_end = . ; 961.21Smaxv 971.16Smaxv _end = . ; 981.16Smaxv PROVIDE (end = .) ; 991.16Smaxv .note.netbsd.ident : 1001.16Smaxv { 1011.16Smaxv KEEP(*(.note.netbsd.ident)); 1021.16Smaxv } 1031.1Sfvdl} 1041.16Smaxv 105