kern.ldscript revision 1.24
11.24Smaxv/*	$NetBSD: kern.ldscript,v 1.24 2017/08/18 10:28:53 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.16Smaxv	.rodata :
341.16Smaxv	{
351.16Smaxv		*(.rodata)
361.16Smaxv		*(.rodata.*)
371.16Smaxv	}
381.16Smaxv
391.22Smaxv	. = ALIGN(__LARGE_PAGE_SIZE);
401.20Smaxv
411.16Smaxv	__data_start = . ;
421.16Smaxv	.data :
431.16Smaxv	{
441.16Smaxv		*(.data)
451.16Smaxv	}
461.16Smaxv
471.16Smaxv	. = ALIGN(COHERENCY_UNIT);
481.16Smaxv	.data.cacheline_aligned :
491.16Smaxv	{
501.16Smaxv		*(.data.cacheline_aligned)
511.16Smaxv	}
521.16Smaxv	. = ALIGN(COHERENCY_UNIT);
531.16Smaxv	.data.read_mostly :
541.16Smaxv	{
551.16Smaxv		*(.data.read_mostly)
561.16Smaxv	}
571.16Smaxv	. = ALIGN(COHERENCY_UNIT);
581.16Smaxv
591.16Smaxv	_edata = . ;
601.16Smaxv	PROVIDE (edata = .) ;
611.16Smaxv	__bss_start = . ;
621.16Smaxv	.bss :
631.16Smaxv	{
641.16Smaxv		*(.bss)
651.16Smaxv		*(.bss.*)
661.16Smaxv		*(COMMON)
671.23Smaxv		. = ALIGN(__LARGE_PAGE_SIZE);
681.16Smaxv	}
691.21Smaxv
701.23Smaxv	. = ALIGN(__PAGE_SIZE);
711.21Smaxv
721.21Smaxv	/* End of the kernel image */
731.21Smaxv	__kernel_end = . ;
741.21Smaxv
751.16Smaxv	_end = . ;
761.16Smaxv	PROVIDE (end = .) ;
771.16Smaxv	.note.netbsd.ident :
781.16Smaxv	{
791.16Smaxv		KEEP(*(.note.netbsd.ident));
801.16Smaxv	}
811.1Sfvdl}
821.16Smaxv
83