File Index
Files and directories
Sign in
FILE

vmlinux.lds.S

File preview with syntax highlighting.

linux-6.19.14/arch/loongarch/kernel/vmlinux.lds.S S
  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#include <asm/orc_lookup.h>
  6
  7#define PAGE_SIZE _PAGE_SIZE
  8#define RO_EXCEPTION_TABLE_ALIGN	4
  9#define PHYSADDR_MASK			0xffffffffffff /* 48-bit */
 10
 11/*
 12 * Put .bss..swapper_pg_dir as the first thing in .bss. This will
 13 * ensure that it has .bss alignment (64K).
 14 */
 15#define BSS_FIRST_SECTIONS *(.bss..swapper_pg_dir)
 16
 17#include <asm-generic/vmlinux.lds.h>
 18#include "image-vars.h"
 19
 20/*
 21 * Max avaliable Page Size is 64K, so we set SectionAlignment
 22 * field of EFI application to 64K.
 23 */
 24PECOFF_FILE_ALIGN = 0x200;
 25PECOFF_SEGMENT_ALIGN = 0x10000;
 26
 27OUTPUT_ARCH(loongarch)
 28ENTRY(kernel_entry)
 29PHDRS {
 30	text PT_LOAD FLAGS(7);	/* RWX */
 31	note PT_NOTE FLAGS(4);	/* R__ */
 32}
 33
 34jiffies	 = jiffies_64;
 35
 36SECTIONS
 37{
 38	. = VMLINUX_LOAD_ADDRESS;
 39
 40	_text = .;
 41	HEAD_TEXT_SECTION
 42
 43	. = ALIGN(PECOFF_SEGMENT_ALIGN);
 44	_stext = .;
 45	.text : {
 46		TEXT_TEXT
 47		SCHED_TEXT
 48		LOCK_TEXT
 49		KPROBES_TEXT
 50		IRQENTRY_TEXT
 51		SOFTIRQENTRY_TEXT
 52		*(.fixup)
 53		*(.gnu.warning)
 54	} :text = 0
 55	. = ALIGN(PECOFF_SEGMENT_ALIGN);
 56	_etext = .;
 57
 58	. = ALIGN(PECOFF_SEGMENT_ALIGN);
 59	__init_begin = .;
 60	__inittext_begin = .;
 61
 62	INIT_TEXT_SECTION(PAGE_SIZE)
 63	.exit.text : {
 64		EXIT_TEXT
 65	}
 66
 67	. = ALIGN(PECOFF_SEGMENT_ALIGN);
 68	__inittext_end = .;
 69
 70	__initdata_begin = .;
 71
 72	/*
 73	 * struct alt_inst entries. From the header (alternative.h):
 74	 * "Alternative instructions for different CPU types or capabilities"
 75	 * Think locking instructions on spinlocks.
 76	 */
 77	. = ALIGN(4);
 78	.altinstructions : AT(ADDR(.altinstructions) - LOAD_OFFSET) {
 79		__alt_instructions = .;
 80		*(.altinstructions)
 81		__alt_instructions_end = .;
 82	}
 83
 84	INIT_DATA_SECTION(16)
 85	.exit.data : {
 86		EXIT_DATA
 87	}
 88
 89#ifdef CONFIG_SMP
 90	PERCPU_SECTION(1 << CONFIG_L1_CACHE_SHIFT)
 91#endif
 92
 93	.init.bss : {
 94		*(.init.bss)
 95	}
 96	. = ALIGN(PECOFF_SEGMENT_ALIGN);
 97	__initdata_end = .;
 98
 99	__init_end = .;
100
101	_sdata = .;
102	RO_DATA(4096)
103
104	.got : ALIGN(16) { *(.got) }
105	.plt : ALIGN(16) { *(.plt) }
106	.got.plt : ALIGN(16) { *(.got.plt) }
107
108	RW_DATA(1 << CONFIG_L1_CACHE_SHIFT, PAGE_SIZE, THREAD_SIZE)
109
110	.rela.dyn : ALIGN(8) {
111		__rela_dyn_begin = .;
112		 *(.rela.dyn) *(.rela*)
113		__rela_dyn_end = .;
114	}
115
116#ifdef CONFIG_RELR
117	.relr.dyn : ALIGN(8) {
118		__relr_dyn_begin = .;
119		 *(.relr.dyn)
120		__relr_dyn_end = .;
121	}
122#endif
123
124	.data.rel : { *(.data.rel*) }
125
126#ifdef CONFIG_RELOCATABLE
127	. = ALIGN(8);
128	.la_abs : AT(ADDR(.la_abs) - LOAD_OFFSET) {
129		__la_abs_begin = .;
130		*(.la_abs)
131		__la_abs_end = .;
132	}
133#endif
134
135	ORC_UNWIND_TABLE
136
137	.sdata : {
138		*(.sdata)
139	}
140	.edata_padding : { BYTE(0); . = ALIGN(PECOFF_FILE_ALIGN); }
141	_edata =  .;
142
143	BSS_SECTION(0, SZ_64K, 8)
144	. = ALIGN(PECOFF_SEGMENT_ALIGN);
145
146	_end = .;
147
148	STABS_DEBUG
149	DWARF_DEBUG
150	MODINFO
151	ELF_DETAILS
152
153#ifdef CONFIG_EFI_STUB
154	/* header symbols */
155	_kernel_entry = ABSOLUTE(kernel_entry & PHYSADDR_MASK);
156	_kernel_asize = ABSOLUTE(_end - _text);
157	_kernel_fsize = ABSOLUTE(_edata - _text);
158	_kernel_vsize = ABSOLUTE(_end - __initdata_begin);
159	_kernel_rsize = ABSOLUTE(_edata - __initdata_begin);
160#endif
161
162	.gptab.sdata : {
163		*(.gptab.data)
164		*(.gptab.sdata)
165	}
166	.gptab.sbss : {
167		*(.gptab.bss)
168		*(.gptab.sbss)
169	}
170
171	DISCARDS
172	/DISCARD/ : {
173		*(.dynamic .dynsym .dynstr .hash .gnu.hash)
174		*(.gnu.attributes)
175		*(.options)
176		*(.eh_frame)
177	}
178}
~/ Read-only file preview.