xref: /openbmc/linux/arch/riscv/kernel/vmlinux.lds.S (revision 50acfb2b76e19f73270fef9a32726c7e18d08ec3)
1*50acfb2bSThomas 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>
12fbe934d6SPalmer Dabbelt
13fbe934d6SPalmer DabbeltOUTPUT_ARCH(riscv)
14fbe934d6SPalmer DabbeltENTRY(_start)
15fbe934d6SPalmer Dabbelt
16fbe934d6SPalmer Dabbeltjiffies = jiffies_64;
17fbe934d6SPalmer Dabbelt
18fbe934d6SPalmer DabbeltSECTIONS
19fbe934d6SPalmer Dabbelt{
20fbe934d6SPalmer Dabbelt	/* Beginning of code and text segment */
21fbe934d6SPalmer Dabbelt	. = LOAD_OFFSET;
22fbe934d6SPalmer Dabbelt	_start = .;
23fbe934d6SPalmer Dabbelt	__init_begin = .;
24fbe934d6SPalmer Dabbelt	HEAD_TEXT_SECTION
25fbe934d6SPalmer Dabbelt	INIT_TEXT_SECTION(PAGE_SIZE)
26fbe934d6SPalmer Dabbelt	INIT_DATA_SECTION(16)
27fbe934d6SPalmer Dabbelt	/* we have to discard exit text and such at runtime, not link time */
28fbe934d6SPalmer Dabbelt	.exit.text :
29fbe934d6SPalmer Dabbelt	{
30fbe934d6SPalmer Dabbelt		EXIT_TEXT
31fbe934d6SPalmer Dabbelt	}
32fbe934d6SPalmer Dabbelt	.exit.data :
33fbe934d6SPalmer Dabbelt	{
34fbe934d6SPalmer Dabbelt		EXIT_DATA
35fbe934d6SPalmer Dabbelt	}
36fbe934d6SPalmer Dabbelt	PERCPU_SECTION(L1_CACHE_BYTES)
37fbe934d6SPalmer Dabbelt	__init_end = .;
38fbe934d6SPalmer Dabbelt
39fbe934d6SPalmer Dabbelt	.text : {
40fbe934d6SPalmer Dabbelt		_text = .;
41fbe934d6SPalmer Dabbelt		_stext = .;
42fbe934d6SPalmer Dabbelt		TEXT_TEXT
43fbe934d6SPalmer Dabbelt		SCHED_TEXT
44fbe934d6SPalmer Dabbelt		CPUIDLE_TEXT
45fbe934d6SPalmer Dabbelt		LOCK_TEXT
46fbe934d6SPalmer Dabbelt		KPROBES_TEXT
47fbe934d6SPalmer Dabbelt		ENTRY_TEXT
48fbe934d6SPalmer Dabbelt		IRQENTRY_TEXT
49fbe934d6SPalmer Dabbelt		*(.fixup)
50fbe934d6SPalmer Dabbelt		_etext = .;
51fbe934d6SPalmer Dabbelt	}
52fbe934d6SPalmer Dabbelt
53fbe934d6SPalmer Dabbelt	/* Start of data section */
54fbe934d6SPalmer Dabbelt	_sdata = .;
55fbe934d6SPalmer Dabbelt	RO_DATA_SECTION(L1_CACHE_BYTES)
56fbe934d6SPalmer Dabbelt	.srodata : {
57fbe934d6SPalmer Dabbelt		*(.srodata*)
58fbe934d6SPalmer Dabbelt	}
59fbe934d6SPalmer Dabbelt
60fbe934d6SPalmer Dabbelt	RW_DATA_SECTION(L1_CACHE_BYTES, PAGE_SIZE, THREAD_SIZE)
61fbe934d6SPalmer Dabbelt	.sdata : {
62fbe934d6SPalmer Dabbelt		__global_pointer$ = . + 0x800;
63fbe934d6SPalmer Dabbelt		*(.sdata*)
64fbe934d6SPalmer Dabbelt		/* End of data section */
65fbe934d6SPalmer Dabbelt		_edata = .;
66fbe934d6SPalmer Dabbelt		*(.sbss*)
67fbe934d6SPalmer Dabbelt	}
68fbe934d6SPalmer Dabbelt
6941fb9d54SPalmer Dabbelt	BSS_SECTION(PAGE_SIZE, PAGE_SIZE, 0)
7041fb9d54SPalmer Dabbelt
71fbe934d6SPalmer Dabbelt	EXCEPTION_TABLE(0x10)
72fbe934d6SPalmer Dabbelt	NOTES
73fbe934d6SPalmer Dabbelt
74fbe934d6SPalmer Dabbelt	.rel.dyn : {
75fbe934d6SPalmer Dabbelt		*(.rel.dyn*)
76fbe934d6SPalmer Dabbelt	}
77fbe934d6SPalmer Dabbelt
78fbe934d6SPalmer Dabbelt	_end = .;
79fbe934d6SPalmer Dabbelt
80fbe934d6SPalmer Dabbelt	STABS_DEBUG
81fbe934d6SPalmer Dabbelt	DWARF_DEBUG
82fbe934d6SPalmer Dabbelt
83fbe934d6SPalmer Dabbelt	DISCARDS
84fbe934d6SPalmer Dabbelt}
85