xref: /linux/arch/loongarch/kernel/vmlinux.lds.S (revision b738c106f7355e318ca47a3b981688efe1bc12fb)
1/* SPDX-License-Identifier: GPL-2.0 */
2#include <linux/sizes.h>
3#include <asm/asm-offsets.h>
4#include <asm/thread_info.h>
5
6#define PAGE_SIZE _PAGE_SIZE
7
8/*
9 * Put .bss..swapper_pg_dir as the first thing in .bss. This will
10 * ensure that it has .bss alignment (64K).
11 */
12#define BSS_FIRST_SECTIONS *(.bss..swapper_pg_dir)
13
14#include <asm-generic/vmlinux.lds.h>
15
16/*
17 * Max avaliable Page Size is 64K, so we set SectionAlignment
18 * field of EFI application to 64K.
19 */
20PECOFF_FILE_ALIGN = 0x200;
21PECOFF_SEGMENT_ALIGN = 0x10000;
22
23OUTPUT_ARCH(loongarch)
24ENTRY(kernel_entry)
25PHDRS {
26	text PT_LOAD FLAGS(7);	/* RWX */
27	note PT_NOTE FLAGS(4);	/* R__ */
28}
29
30jiffies	 = jiffies_64;
31
32SECTIONS
33{
34	. = VMLINUX_LOAD_ADDRESS;
35
36	_text = .;
37	HEAD_TEXT_SECTION
38
39	. = ALIGN(PECOFF_SEGMENT_ALIGN);
40	.text : {
41		TEXT_TEXT
42		SCHED_TEXT
43		CPUIDLE_TEXT
44		LOCK_TEXT
45		KPROBES_TEXT
46		IRQENTRY_TEXT
47		SOFTIRQENTRY_TEXT
48		*(.fixup)
49		*(.gnu.warning)
50	} :text = 0
51	. = ALIGN(PECOFF_SEGMENT_ALIGN);
52	_etext = .;
53
54	EXCEPTION_TABLE(16)
55
56	. = ALIGN(PECOFF_SEGMENT_ALIGN);
57	__init_begin = .;
58	__inittext_begin = .;
59
60	INIT_TEXT_SECTION(PAGE_SIZE)
61	.exit.text : {
62		EXIT_TEXT
63	}
64
65	. = ALIGN(PECOFF_SEGMENT_ALIGN);
66	__inittext_end = .;
67
68	__initdata_begin = .;
69
70	INIT_DATA_SECTION(16)
71	.exit.data : {
72		EXIT_DATA
73	}
74
75	.init.bss : {
76		*(.init.bss)
77	}
78	. = ALIGN(PECOFF_SEGMENT_ALIGN);
79	__initdata_end = .;
80
81	__init_end = .;
82
83	_sdata = .;
84	RO_DATA(4096)
85	RW_DATA(1 << CONFIG_L1_CACHE_SHIFT, PAGE_SIZE, THREAD_SIZE)
86
87	.sdata : {
88		*(.sdata)
89	}
90	.edata_padding : { BYTE(0); . = ALIGN(PECOFF_FILE_ALIGN); }
91	_edata =  .;
92
93	BSS_SECTION(0, SZ_64K, 8)
94	. = ALIGN(PECOFF_SEGMENT_ALIGN);
95
96	_end = .;
97
98	STABS_DEBUG
99	DWARF_DEBUG
100
101	.gptab.sdata : {
102		*(.gptab.data)
103		*(.gptab.sdata)
104	}
105	.gptab.sbss : {
106		*(.gptab.bss)
107		*(.gptab.sbss)
108	}
109
110	DISCARDS
111	/DISCARD/ : {
112		*(.gnu.attributes)
113		*(.options)
114		*(.eh_frame)
115	}
116}
117