1*624144bdSchristos/* $NetBSD: kern.ldscript,v 1.1 2021/08/30 18:59:57 christos Exp $ */ 2*624144bdSchristos 3*624144bdSchristos#include "assym.h" 4*624144bdSchristos 5*624144bdSchristos__PAGE_SIZE = 0x1000 ; 6*624144bdSchristos 7*624144bdSchristosENTRY(_start) 8*624144bdSchristosSECTIONS 9*624144bdSchristos{ 10*624144bdSchristos .text : AT (ADDR(.text) & 0x0fffffff) 11*624144bdSchristos { 12*624144bdSchristos KEEP(*(.text._start)); 13*624144bdSchristos . = ALIGN(__PAGE_SIZE); 14*624144bdSchristos __text_user_start = . ; 15*624144bdSchristos *(.text.user) 16*624144bdSchristos . = ALIGN(__PAGE_SIZE); 17*624144bdSchristos __text_user_end = . ; 18*624144bdSchristos 19*624144bdSchristos *(.text) 20*624144bdSchristos *(.text.*) 21*624144bdSchristos *(.stub) 22*624144bdSchristos . = ALIGN(__PAGE_SIZE); 23*624144bdSchristos } =0xCC 24*624144bdSchristos _etext = . ; 25*624144bdSchristos PROVIDE (etext = .) ; 26*624144bdSchristos 27*624144bdSchristos /* 28*624144bdSchristos * Push the rodata segment up to the next large page boundary so that we 29*624144bdSchristos * can map the text segment with large pages. 30*624144bdSchristos */ 31*624144bdSchristos . = ALIGN(__PAGE_SIZE); 32*624144bdSchristos 33*624144bdSchristos __rodata_start = . ; 34*624144bdSchristos 35*624144bdSchristos .rodata : 36*624144bdSchristos { 37*624144bdSchristos *(.rodata) 38*624144bdSchristos *(.rodata.*) 39*624144bdSchristos . = ALIGN(COHERENCY_UNIT); 40*624144bdSchristos __CTOR_LIST__ = .; 41*624144bdSchristos *(.ctors) 42*624144bdSchristos __CTOR_END__ = .; 43*624144bdSchristos } 44*624144bdSchristos 45*624144bdSchristos . = ALIGN(__PAGE_SIZE); 46*624144bdSchristos 47*624144bdSchristos __data_start = . ; 48*624144bdSchristos .data : 49*624144bdSchristos { 50*624144bdSchristos *(.data) 51*624144bdSchristos } 52*624144bdSchristos 53*624144bdSchristos . = ALIGN(COHERENCY_UNIT); 54*624144bdSchristos .data.cacheline_aligned : 55*624144bdSchristos { 56*624144bdSchristos *(.data.cacheline_aligned) 57*624144bdSchristos } 58*624144bdSchristos . = ALIGN(COHERENCY_UNIT); 59*624144bdSchristos .data.read_mostly : 60*624144bdSchristos { 61*624144bdSchristos *(.data.read_mostly) 62*624144bdSchristos } 63*624144bdSchristos . = ALIGN(COHERENCY_UNIT); 64*624144bdSchristos 65*624144bdSchristos _edata = . ; 66*624144bdSchristos PROVIDE (edata = .) ; 67*624144bdSchristos __bss_start = . ; 68*624144bdSchristos .bss : 69*624144bdSchristos { 70*624144bdSchristos *(.bss) 71*624144bdSchristos *(.bss.*) 72*624144bdSchristos *(COMMON) 73*624144bdSchristos . = ALIGN(__PAGE_SIZE); 74*624144bdSchristos } 75*624144bdSchristos 76*624144bdSchristos . = ALIGN(__PAGE_SIZE); 77*624144bdSchristos 78*624144bdSchristos /* End of the kernel image */ 79*624144bdSchristos __kernel_end = . ; 80*624144bdSchristos 81*624144bdSchristos _end = . ; 82*624144bdSchristos PROVIDE (end = .) ; 83*624144bdSchristos .note.netbsd.ident : 84*624144bdSchristos { 85*624144bdSchristos KEEP(*(.note.netbsd.ident)); 86*624144bdSchristos } 87*624144bdSchristos} 88*624144bdSchristos 89