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