xref: /openbmc/linux/arch/riscv/kernel/vmlinux.lds.S (revision 6f55ab36bef505b449723300a5a445ddc76a94d7)
150acfb2bSThomas Gleixner/* SPDX-License-Identifier: GPL-2.0-only */
2fbe934d6SPalmer Dabbelt/*
3fbe934d6SPalmer Dabbelt * Copyright (C) 2012 Regents of the University of California
4fbe934d6SPalmer Dabbelt * Copyright (C) 2017 SiFive
5fbe934d6SPalmer Dabbelt */
6fbe934d6SPalmer Dabbelt
7*6f55ab36SJisheng Zhang#define RO_EXCEPTION_TABLE_ALIGN	16
8*6f55ab36SJisheng Zhang
944c92257SVitaly Wool#ifdef CONFIG_XIP_KERNEL
1044c92257SVitaly Wool#include "vmlinux-xip.lds.S"
1144c92257SVitaly Wool#else
1244c92257SVitaly Wool
132bfc6cd8SAlexandre Ghiti#include <asm/pgtable.h>
142bfc6cd8SAlexandre Ghiti#define LOAD_OFFSET KERNEL_LINK_ADDR
1544c92257SVitaly Wool
16fbe934d6SPalmer Dabbelt#include <asm/vmlinux.lds.h>
17fbe934d6SPalmer Dabbelt#include <asm/page.h>
18fbe934d6SPalmer Dabbelt#include <asm/cache.h>
19fbe934d6SPalmer Dabbelt#include <asm/thread_info.h>
2000cb41d5SZong Li#include <asm/set_memory.h>
21cb7d2dd5SAtish Patra#include "image-vars.h"
22fbe934d6SPalmer Dabbelt
23e011995eSAtish Patra#include <linux/sizes.h>
24fbe934d6SPalmer DabbeltOUTPUT_ARCH(riscv)
25fbe934d6SPalmer DabbeltENTRY(_start)
26fbe934d6SPalmer Dabbelt
27fbe934d6SPalmer Dabbeltjiffies = jiffies_64;
28fbe934d6SPalmer Dabbelt
29cb7d2dd5SAtish PatraPECOFF_SECTION_ALIGNMENT = 0x1000;
30cb7d2dd5SAtish PatraPECOFF_FILE_ALIGNMENT = 0x200;
31cb7d2dd5SAtish Patra
32fbe934d6SPalmer DabbeltSECTIONS
33fbe934d6SPalmer Dabbelt{
34fbe934d6SPalmer Dabbelt	/* Beginning of code and text segment */
35fbe934d6SPalmer Dabbelt	. = LOAD_OFFSET;
36fbe934d6SPalmer Dabbelt	_start = .;
37fbe934d6SPalmer Dabbelt	HEAD_TEXT_SECTION
38e011995eSAtish Patra	. = ALIGN(PAGE_SIZE);
39e011995eSAtish Patra
4019a00869SAtish Patra	.text : {
4119a00869SAtish Patra		_text = .;
4219a00869SAtish Patra		_stext = .;
4319a00869SAtish Patra		TEXT_TEXT
4419a00869SAtish Patra		SCHED_TEXT
4519a00869SAtish Patra		CPUIDLE_TEXT
4619a00869SAtish Patra		LOCK_TEXT
4719a00869SAtish Patra		KPROBES_TEXT
4819a00869SAtish Patra		ENTRY_TEXT
4919a00869SAtish Patra		IRQENTRY_TEXT
5019a00869SAtish Patra		SOFTIRQENTRY_TEXT
5119a00869SAtish Patra		*(.fixup)
5219a00869SAtish Patra		_etext = .;
5319a00869SAtish Patra	}
5419a00869SAtish Patra
5519a00869SAtish Patra	. = ALIGN(SECTION_ALIGN);
56e011995eSAtish Patra	__init_begin = .;
57b6566dc1SAtish Patra	__init_text_begin = .;
58b6566dc1SAtish Patra	.init.text : AT(ADDR(.init.text) - LOAD_OFFSET) ALIGN(SECTION_ALIGN) { \
59b6566dc1SAtish Patra		_sinittext = .;						\
60b6566dc1SAtish Patra		INIT_TEXT						\
61b6566dc1SAtish Patra		_einittext = .;						\
62b6566dc1SAtish Patra	}
63b6566dc1SAtish Patra
64335b1390SDamien Le Moal	. = ALIGN(8);
65335b1390SDamien Le Moal	__soc_early_init_table : {
66335b1390SDamien Le Moal		__soc_early_init_table_start = .;
67335b1390SDamien Le Moal		KEEP(*(__soc_early_init_table))
68335b1390SDamien Le Moal		__soc_early_init_table_end = .;
69335b1390SDamien Le Moal	}
702d268251SPalmer Dabbelt	__soc_builtin_dtb_table : {
712d268251SPalmer Dabbelt		__soc_builtin_dtb_table_start = .;
722d268251SPalmer Dabbelt		KEEP(*(__soc_builtin_dtb_table))
732d268251SPalmer Dabbelt		__soc_builtin_dtb_table_end = .;
742d268251SPalmer Dabbelt	}
75fbe934d6SPalmer Dabbelt	/* we have to discard exit text and such at runtime, not link time */
76fbe934d6SPalmer Dabbelt	.exit.text :
77fbe934d6SPalmer Dabbelt	{
78fbe934d6SPalmer Dabbelt		EXIT_TEXT
79fbe934d6SPalmer Dabbelt	}
8019a00869SAtish Patra
8119a00869SAtish Patra	__init_text_end = .;
8219a00869SAtish Patra	. = ALIGN(SECTION_ALIGN);
8319a00869SAtish Patra#ifdef CONFIG_EFI
8419a00869SAtish Patra	. = ALIGN(PECOFF_SECTION_ALIGNMENT);
8519a00869SAtish Patra	__pecoff_text_end = .;
8619a00869SAtish Patra#endif
8719a00869SAtish Patra	/* Start of init data section */
8819a00869SAtish Patra	__init_data_begin = .;
8919a00869SAtish Patra	INIT_DATA_SECTION(16)
90fbe934d6SPalmer Dabbelt	.exit.data :
91fbe934d6SPalmer Dabbelt	{
92fbe934d6SPalmer Dabbelt		EXIT_DATA
93fbe934d6SPalmer Dabbelt	}
94fbe934d6SPalmer Dabbelt	PERCPU_SECTION(L1_CACHE_BYTES)
9519a00869SAtish Patra
96b5b11a8aSAtish Patra	.rel.dyn : {
97b5b11a8aSAtish Patra		*(.rel.dyn*)
98b5b11a8aSAtish Patra	}
99b5b11a8aSAtish Patra
10019a00869SAtish Patra	__init_data_end = .;
1016f4eea90SVincent Chen
1026f4eea90SVincent Chen	. = ALIGN(8);
1036f4eea90SVincent Chen	.alternative : {
1046f4eea90SVincent Chen		__alt_start = .;
1056f4eea90SVincent Chen		*(.alternative)
1066f4eea90SVincent Chen		__alt_end = .;
1076f4eea90SVincent Chen	}
108fbe934d6SPalmer Dabbelt	__init_end = .;
109fbe934d6SPalmer Dabbelt
110fbe934d6SPalmer Dabbelt	/* Start of data section */
111fbe934d6SPalmer Dabbelt	_sdata = .;
11200cb41d5SZong Li	RO_DATA(SECTION_ALIGN)
113fbe934d6SPalmer Dabbelt	.srodata : {
114fbe934d6SPalmer Dabbelt		*(.srodata*)
115fbe934d6SPalmer Dabbelt	}
116fbe934d6SPalmer Dabbelt
11700cb41d5SZong Li	. = ALIGN(SECTION_ALIGN);
118bd3d914dSZong Li	_data = .;
119bd3d914dSZong Li
12031da94c2STong Tiangen	RW_DATA(L1_CACHE_BYTES, PAGE_SIZE, THREAD_ALIGN)
121fbe934d6SPalmer Dabbelt	.sdata : {
122fbe934d6SPalmer Dabbelt		__global_pointer$ = . + 0x800;
123fbe934d6SPalmer Dabbelt		*(.sdata*)
124cb7d2dd5SAtish Patra	}
125cb7d2dd5SAtish Patra
126cb7d2dd5SAtish Patra#ifdef CONFIG_EFI
127cb7d2dd5SAtish Patra	.pecoff_edata_padding : { BYTE(0); . = ALIGN(PECOFF_FILE_ALIGNMENT); }
128cb7d2dd5SAtish Patra	__pecoff_data_raw_size = ABSOLUTE(. - __pecoff_text_end);
129cb7d2dd5SAtish Patra#endif
130cb7d2dd5SAtish Patra
131fbe934d6SPalmer Dabbelt	/* End of data section */
132fbe934d6SPalmer Dabbelt	_edata = .;
133fbe934d6SPalmer Dabbelt
13441fb9d54SPalmer Dabbelt	BSS_SECTION(PAGE_SIZE, PAGE_SIZE, 0)
13541fb9d54SPalmer Dabbelt
136cb7d2dd5SAtish Patra#ifdef CONFIG_EFI
137cb7d2dd5SAtish Patra	. = ALIGN(PECOFF_SECTION_ALIGNMENT);
138cb7d2dd5SAtish Patra	__pecoff_data_virt_size = ABSOLUTE(. - __pecoff_text_end);
139cb7d2dd5SAtish Patra#endif
140fbe934d6SPalmer Dabbelt	_end = .;
141fbe934d6SPalmer Dabbelt
142fbe934d6SPalmer Dabbelt	STABS_DEBUG
143fbe934d6SPalmer Dabbelt	DWARF_DEBUG
144c604abc3SKees Cook	ELF_DETAILS
145fbe934d6SPalmer Dabbelt
146fbe934d6SPalmer Dabbelt	DISCARDS
147fbe934d6SPalmer Dabbelt}
14844c92257SVitaly Wool#endif /* CONFIG_XIP_KERNEL */
149