kern.ldscript revision 1.29
11.28Smanu/* $NetBSD: kern.ldscript,v 1.29 2019/12/11 02:31:44 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.24Smaxv .text : AT (ADDR(.text) & 0x0fffffff) 171.16Smaxv { 181.29Smanu . = ALIGN(__PAGE_SIZE); 191.26Smaxv __text_user_start = . ; 201.26Smaxv *(.text.user) 211.26Smaxv . = ALIGN(__PAGE_SIZE); 221.26Smaxv __text_user_end = . ; 231.26Smaxv 241.16Smaxv *(.text) 251.16Smaxv *(.text.*) 261.16Smaxv *(.stub) 271.24Smaxv . = ALIGN(__LARGE_PAGE_SIZE); 281.24Smaxv } =0xCC 291.16Smaxv _etext = . ; 301.16Smaxv PROVIDE (etext = .) ; 311.16Smaxv 321.19Smaxv /* 331.19Smaxv * Push the rodata segment up to the next large page boundary so that we 341.19Smaxv * can map the text segment with large pages. 351.19Smaxv */ 361.19Smaxv . = ALIGN(__LARGE_PAGE_SIZE); 371.19Smaxv 381.18Smaxv __rodata_start = . ; 391.25Smaxv 401.25Smaxv .rodata.hotpatch : 411.25Smaxv { 421.25Smaxv __rodata_hotpatch_start = . ; 431.25Smaxv *(.rodata.hotpatch) 441.25Smaxv __rodata_hotpatch_end = . ; 451.25Smaxv } 461.25Smaxv 471.16Smaxv .rodata : 481.16Smaxv { 491.16Smaxv *(.rodata) 501.16Smaxv *(.rodata.*) 511.27Smaxv . = ALIGN(COHERENCY_UNIT); 521.27Smaxv __CTOR_LIST__ = .; 531.27Smaxv *(.ctors) 541.27Smaxv __CTOR_END__ = .; 551.16Smaxv } 561.16Smaxv 571.22Smaxv . = ALIGN(__LARGE_PAGE_SIZE); 581.20Smaxv 591.16Smaxv __data_start = . ; 601.16Smaxv .data : 611.16Smaxv { 621.16Smaxv *(.data) 631.16Smaxv } 641.16Smaxv 651.16Smaxv . = ALIGN(COHERENCY_UNIT); 661.16Smaxv .data.cacheline_aligned : 671.16Smaxv { 681.16Smaxv *(.data.cacheline_aligned) 691.16Smaxv } 701.16Smaxv . = ALIGN(COHERENCY_UNIT); 711.16Smaxv .data.read_mostly : 721.16Smaxv { 731.16Smaxv *(.data.read_mostly) 741.16Smaxv } 751.16Smaxv . = ALIGN(COHERENCY_UNIT); 761.16Smaxv 771.16Smaxv _edata = . ; 781.16Smaxv PROVIDE (edata = .) ; 791.16Smaxv __bss_start = . ; 801.16Smaxv .bss : 811.16Smaxv { 821.16Smaxv *(.bss) 831.16Smaxv *(.bss.*) 841.16Smaxv *(COMMON) 851.23Smaxv . = ALIGN(__LARGE_PAGE_SIZE); 861.16Smaxv } 871.21Smaxv 881.23Smaxv . = ALIGN(__PAGE_SIZE); 891.21Smaxv 901.21Smaxv /* End of the kernel image */ 911.21Smaxv __kernel_end = . ; 921.21Smaxv 931.16Smaxv _end = . ; 941.16Smaxv PROVIDE (end = .) ; 951.16Smaxv .note.netbsd.ident : 961.16Smaxv { 971.16Smaxv KEEP(*(.note.netbsd.ident)); 981.16Smaxv } 991.1Sfvdl} 1001.16Smaxv 101