xref: /openbmc/linux/arch/riscv/kernel/vmlinux.lds.S (revision b6566dc1acca38ce6ed845ce8a270fb181ff6d41)
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
7fbe934d6SPalmer Dabbelt#define LOAD_OFFSET PAGE_OFFSET
8fbe934d6SPalmer Dabbelt#include <asm/vmlinux.lds.h>
9fbe934d6SPalmer Dabbelt#include <asm/page.h>
10fbe934d6SPalmer Dabbelt#include <asm/cache.h>
11fbe934d6SPalmer Dabbelt#include <asm/thread_info.h>
1200cb41d5SZong Li#include <asm/set_memory.h>
13cb7d2dd5SAtish Patra#include "image-vars.h"
14fbe934d6SPalmer Dabbelt
15e011995eSAtish Patra#include <linux/sizes.h>
16fbe934d6SPalmer DabbeltOUTPUT_ARCH(riscv)
17fbe934d6SPalmer DabbeltENTRY(_start)
18fbe934d6SPalmer Dabbelt
19fbe934d6SPalmer Dabbeltjiffies = jiffies_64;
20fbe934d6SPalmer Dabbelt
21cb7d2dd5SAtish PatraPECOFF_SECTION_ALIGNMENT = 0x1000;
22cb7d2dd5SAtish PatraPECOFF_FILE_ALIGNMENT = 0x200;
23cb7d2dd5SAtish Patra
24fbe934d6SPalmer DabbeltSECTIONS
25fbe934d6SPalmer Dabbelt{
26fbe934d6SPalmer Dabbelt	/* Beginning of code and text segment */
27fbe934d6SPalmer Dabbelt	. = LOAD_OFFSET;
28fbe934d6SPalmer Dabbelt	_start = .;
29fbe934d6SPalmer Dabbelt	HEAD_TEXT_SECTION
30e011995eSAtish Patra	. = ALIGN(PAGE_SIZE);
31e011995eSAtish Patra
32e011995eSAtish Patra	__init_begin = .;
33*b6566dc1SAtish Patra	__init_text_begin = .;
34*b6566dc1SAtish Patra	.init.text : AT(ADDR(.init.text) - LOAD_OFFSET) ALIGN(SECTION_ALIGN) { \
35*b6566dc1SAtish Patra		_sinittext = .;						\
36*b6566dc1SAtish Patra		INIT_TEXT						\
37*b6566dc1SAtish Patra		_einittext = .;						\
38*b6566dc1SAtish Patra	}
39*b6566dc1SAtish Patra
40335b1390SDamien Le Moal	. = ALIGN(8);
41335b1390SDamien Le Moal	__soc_early_init_table : {
42335b1390SDamien Le Moal		__soc_early_init_table_start = .;
43335b1390SDamien Le Moal		KEEP(*(__soc_early_init_table))
44335b1390SDamien Le Moal		__soc_early_init_table_end = .;
45335b1390SDamien Le Moal	}
462d268251SPalmer Dabbelt	__soc_builtin_dtb_table : {
472d268251SPalmer Dabbelt		__soc_builtin_dtb_table_start = .;
482d268251SPalmer Dabbelt		KEEP(*(__soc_builtin_dtb_table))
492d268251SPalmer Dabbelt		__soc_builtin_dtb_table_end = .;
502d268251SPalmer Dabbelt	}
51fbe934d6SPalmer Dabbelt	/* we have to discard exit text and such at runtime, not link time */
52fbe934d6SPalmer Dabbelt	.exit.text :
53fbe934d6SPalmer Dabbelt	{
54fbe934d6SPalmer Dabbelt		EXIT_TEXT
55fbe934d6SPalmer Dabbelt	}
56fbe934d6SPalmer Dabbelt	.exit.data :
57fbe934d6SPalmer Dabbelt	{
58fbe934d6SPalmer Dabbelt		EXIT_DATA
59fbe934d6SPalmer Dabbelt	}
60fbe934d6SPalmer Dabbelt	PERCPU_SECTION(L1_CACHE_BYTES)
61fbe934d6SPalmer Dabbelt	__init_end = .;
62fbe934d6SPalmer Dabbelt
6300cb41d5SZong Li	. = ALIGN(SECTION_ALIGN);
64fbe934d6SPalmer Dabbelt	.text : {
65fbe934d6SPalmer Dabbelt		_text = .;
6684814460SGuo Ren		_stext = .;
67fbe934d6SPalmer Dabbelt		TEXT_TEXT
68fbe934d6SPalmer Dabbelt		SCHED_TEXT
69fbe934d6SPalmer Dabbelt		CPUIDLE_TEXT
70fbe934d6SPalmer Dabbelt		LOCK_TEXT
71fbe934d6SPalmer Dabbelt		KPROBES_TEXT
72fbe934d6SPalmer Dabbelt		ENTRY_TEXT
73fbe934d6SPalmer Dabbelt		IRQENTRY_TEXT
748ad8b727SNick Hu		SOFTIRQENTRY_TEXT
75fbe934d6SPalmer Dabbelt		*(.fixup)
76fbe934d6SPalmer Dabbelt		_etext = .;
77fbe934d6SPalmer Dabbelt	}
78fbe934d6SPalmer Dabbelt
79cb7d2dd5SAtish Patra#ifdef CONFIG_EFI
80cb7d2dd5SAtish Patra	. = ALIGN(PECOFF_SECTION_ALIGNMENT);
81cb7d2dd5SAtish Patra	__pecoff_text_end = .;
82cb7d2dd5SAtish Patra#endif
83cb7d2dd5SAtish Patra
8484814460SGuo Ren	INIT_DATA_SECTION(16)
8584814460SGuo Ren
86fbe934d6SPalmer Dabbelt	/* Start of data section */
87fbe934d6SPalmer Dabbelt	_sdata = .;
8800cb41d5SZong Li	RO_DATA(SECTION_ALIGN)
89fbe934d6SPalmer Dabbelt	.srodata : {
90fbe934d6SPalmer Dabbelt		*(.srodata*)
91fbe934d6SPalmer Dabbelt	}
92fbe934d6SPalmer Dabbelt
93bd3d914dSZong Li	EXCEPTION_TABLE(0x10)
94bd3d914dSZong Li
9500cb41d5SZong Li	. = ALIGN(SECTION_ALIGN);
96bd3d914dSZong Li	_data = .;
97bd3d914dSZong Li
98c9174047SKees Cook	RW_DATA(L1_CACHE_BYTES, PAGE_SIZE, THREAD_SIZE)
99fbe934d6SPalmer Dabbelt	.sdata : {
100fbe934d6SPalmer Dabbelt		__global_pointer$ = . + 0x800;
101fbe934d6SPalmer Dabbelt		*(.sdata*)
102cb7d2dd5SAtish Patra	}
103cb7d2dd5SAtish Patra
104cb7d2dd5SAtish Patra#ifdef CONFIG_EFI
105cb7d2dd5SAtish Patra	.pecoff_edata_padding : { BYTE(0); . = ALIGN(PECOFF_FILE_ALIGNMENT); }
106cb7d2dd5SAtish Patra	__pecoff_data_raw_size = ABSOLUTE(. - __pecoff_text_end);
107cb7d2dd5SAtish Patra#endif
108cb7d2dd5SAtish Patra
109fbe934d6SPalmer Dabbelt	/* End of data section */
110fbe934d6SPalmer Dabbelt	_edata = .;
111fbe934d6SPalmer Dabbelt
11241fb9d54SPalmer Dabbelt	BSS_SECTION(PAGE_SIZE, PAGE_SIZE, 0)
11341fb9d54SPalmer Dabbelt
114fbe934d6SPalmer Dabbelt	.rel.dyn : {
115fbe934d6SPalmer Dabbelt		*(.rel.dyn*)
116fbe934d6SPalmer Dabbelt	}
117fbe934d6SPalmer Dabbelt
118cb7d2dd5SAtish Patra#ifdef CONFIG_EFI
119cb7d2dd5SAtish Patra	. = ALIGN(PECOFF_SECTION_ALIGNMENT);
120cb7d2dd5SAtish Patra	__pecoff_data_virt_size = ABSOLUTE(. - __pecoff_text_end);
121cb7d2dd5SAtish Patra#endif
122fbe934d6SPalmer Dabbelt	_end = .;
123fbe934d6SPalmer Dabbelt
124fbe934d6SPalmer Dabbelt	STABS_DEBUG
125fbe934d6SPalmer Dabbelt	DWARF_DEBUG
126c604abc3SKees Cook	ELF_DETAILS
127fbe934d6SPalmer Dabbelt
128fbe934d6SPalmer Dabbelt	DISCARDS
129fbe934d6SPalmer Dabbelt}
130