1/*        $NetBSD: kern.ldscript,v 1.31 2020/01/09 00:42:24 manu Exp $          */
2
3#include "assym.h"
4
5/*
6 * PAE is enabled by default on amd64, the large page size is therefore
7 * 2MB (and not 4MB!).
8 */
9
10__PAGE_SIZE = 0x1000 ;
11__LARGE_PAGE_SIZE = 0x200000 ;
12
13ENTRY(_start)
14SECTIONS
15{
16          .text : AT (ADDR(.text) & 0x0fffffff)
17          {
18                    . = ALIGN(__PAGE_SIZE);
19                    __text_user_start = . ;
20                    *(.text.user)
21                    . = ALIGN(__PAGE_SIZE);
22                    __text_user_end = . ;
23
24                    *(.text)
25                    *(.text.*)
26                    *(.stub)
27                    . = ALIGN(__LARGE_PAGE_SIZE);
28          } =0xCC
29          _etext = . ;
30          PROVIDE (etext = .) ;
31
32          /*
33           * Push the rodata segment up to the next large page boundary so that we
34           * can map the text segment with large pages.
35           */
36          . = ALIGN(__LARGE_PAGE_SIZE);
37
38          __rodata_start = . ;
39
40          .rodata.hotpatch :
41          {
42                    __rodata_hotpatch_start = . ;
43                    *(.rodata.hotpatch)
44                    __rodata_hotpatch_end = . ;
45          }
46
47          .rodata :
48          {
49                    *(.rodata)
50                    *(.rodata.*)
51                    . = ALIGN(COHERENCY_UNIT);
52                    __CTOR_LIST__ = .;
53                    *(.ctors)
54                    __CTOR_END__ = .;
55          }
56
57          . = ALIGN(__LARGE_PAGE_SIZE);
58
59          __data_start = . ;
60          .data :
61          {
62                    *(.data)
63          }
64
65          . = ALIGN(COHERENCY_UNIT);
66          .data.cacheline_aligned :
67          {
68                    *(.data.cacheline_aligned)
69          }
70          . = ALIGN(COHERENCY_UNIT);
71          .data.read_mostly :
72          {
73                    *(.data.read_mostly)
74          }
75          . = ALIGN(COHERENCY_UNIT);
76
77          _edata = . ;
78          PROVIDE (edata = .) ;
79          __bss_start = . ;
80          .bss :
81          {
82                    *(.bss)
83                    *(.bss.*)
84                    *(COMMON)
85                    . = ALIGN(__LARGE_PAGE_SIZE);
86          }
87
88          . = ALIGN(__PAGE_SIZE);
89
90          /* End of the kernel image */
91          __kernel_end = . ;
92
93          _end = . ;
94          PROVIDE (end = .) ;
95          .note.netbsd.ident :
96          {
97                    KEEP(*(.note.netbsd.ident));
98          }
99}
100
101