kern.ldscript revision 1.27
11.27Smaxv/*	$NetBSD: kern.ldscript,v 1.27 2018/08/20 15:04:51 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.26Smaxv		. = 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