kern.ldscript revision 1.25
11.25Smaxv/*	$NetBSD: kern.ldscript,v 1.25 2018/01/07 12:42:46 maxv 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.16Smaxv		*(.text)
191.16Smaxv		*(.text.*)
201.16Smaxv		*(.stub)
211.24Smaxv		. = ALIGN(__LARGE_PAGE_SIZE);
221.24Smaxv	} =0xCC
231.16Smaxv	_etext = . ;
241.16Smaxv	PROVIDE (etext = .) ;
251.16Smaxv
261.19Smaxv	/*
271.19Smaxv	 * Push the rodata segment up to the next large page boundary so that we
281.19Smaxv	 * can map the text segment with large pages.
291.19Smaxv	 */
301.19Smaxv	. = ALIGN(__LARGE_PAGE_SIZE);
311.19Smaxv
321.18Smaxv	__rodata_start = . ;
331.25Smaxv
341.25Smaxv	.rodata.hotpatch :
351.25Smaxv	{
361.25Smaxv		__rodata_hotpatch_start = . ;
371.25Smaxv		*(.rodata.hotpatch)
381.25Smaxv		__rodata_hotpatch_end = . ;
391.25Smaxv	}
401.25Smaxv
411.16Smaxv	.rodata :
421.16Smaxv	{
431.16Smaxv		*(.rodata)
441.16Smaxv		*(.rodata.*)
451.16Smaxv	}
461.16Smaxv
471.22Smaxv	. = ALIGN(__LARGE_PAGE_SIZE);
481.20Smaxv
491.16Smaxv	__data_start = . ;
501.16Smaxv	.data :
511.16Smaxv	{
521.16Smaxv		*(.data)
531.16Smaxv	}
541.16Smaxv
551.16Smaxv	. = ALIGN(COHERENCY_UNIT);
561.16Smaxv	.data.cacheline_aligned :
571.16Smaxv	{
581.16Smaxv		*(.data.cacheline_aligned)
591.16Smaxv	}
601.16Smaxv	. = ALIGN(COHERENCY_UNIT);
611.16Smaxv	.data.read_mostly :
621.16Smaxv	{
631.16Smaxv		*(.data.read_mostly)
641.16Smaxv	}
651.16Smaxv	. = ALIGN(COHERENCY_UNIT);
661.16Smaxv
671.16Smaxv	_edata = . ;
681.16Smaxv	PROVIDE (edata = .) ;
691.16Smaxv	__bss_start = . ;
701.16Smaxv	.bss :
711.16Smaxv	{
721.16Smaxv		*(.bss)
731.16Smaxv		*(.bss.*)
741.16Smaxv		*(COMMON)
751.23Smaxv		. = ALIGN(__LARGE_PAGE_SIZE);
761.16Smaxv	}
771.21Smaxv
781.23Smaxv	. = ALIGN(__PAGE_SIZE);
791.21Smaxv
801.21Smaxv	/* End of the kernel image */
811.21Smaxv	__kernel_end = . ;
821.21Smaxv
831.16Smaxv	_end = . ;
841.16Smaxv	PROVIDE (end = .) ;
851.16Smaxv	.note.netbsd.ident :
861.16Smaxv	{
871.16Smaxv		KEEP(*(.note.netbsd.ident));
881.16Smaxv	}
891.1Sfvdl}
901.16Smaxv
91