xref: /linux-6.15/arch/arc/kernel/vmlinux.lds.S (revision ebfc2fd8)
1d2912cb1SThomas Gleixner/* SPDX-License-Identifier: GPL-2.0-only */
2cfdbc2e1SVineet Gupta/*
3cfdbc2e1SVineet Gupta * Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com)
4cfdbc2e1SVineet Gupta */
5cfdbc2e1SVineet Gupta
6cfdbc2e1SVineet Gupta#include <asm-generic/vmlinux.lds.h>
7cfdbc2e1SVineet Gupta#include <asm/cache.h>
8cfdbc2e1SVineet Gupta#include <asm/page.h>
9cfdbc2e1SVineet Gupta#include <asm/thread_info.h>
10cfdbc2e1SVineet Gupta
11cfdbc2e1SVineet GuptaOUTPUT_ARCH(arc)
123971cdc2SVineet GuptaENTRY(res_service)
13cfdbc2e1SVineet Gupta
14cfdbc2e1SVineet Gupta#ifdef CONFIG_CPU_BIG_ENDIAN
15cfdbc2e1SVineet Guptajiffies = jiffies_64 + 4;
16cfdbc2e1SVineet Gupta#else
17cfdbc2e1SVineet Guptajiffies = jiffies_64;
18cfdbc2e1SVineet Gupta#endif
19cfdbc2e1SVineet Gupta
20cfdbc2e1SVineet GuptaSECTIONS
21cfdbc2e1SVineet Gupta{
228b5850f8SVineet Gupta	/*
238b5850f8SVineet Gupta	 * ICCM starts at 0x8000_0000. So if kernel is relocated to some other
248b5850f8SVineet Gupta	 * address, make sure peripheral at 0x8z doesn't clash with ICCM
258b5850f8SVineet Gupta	 * Essentially vector is also in ICCM.
268b5850f8SVineet Gupta	 */
278b5850f8SVineet Gupta
28cfdbc2e1SVineet Gupta	. = CONFIG_LINUX_LINK_BASE;
29cfdbc2e1SVineet Gupta
30cfdbc2e1SVineet Gupta	_int_vec_base_lds = .;
31cfdbc2e1SVineet Gupta	.vector : {
32cfdbc2e1SVineet Gupta		*(.vector)
33cfdbc2e1SVineet Gupta		. = ALIGN(PAGE_SIZE);
34cfdbc2e1SVineet Gupta	}
35cfdbc2e1SVineet Gupta
368b5850f8SVineet Gupta#ifdef CONFIG_ARC_HAS_ICCM
378b5850f8SVineet Gupta	.text.arcfp : {
388b5850f8SVineet Gupta		*(.text.arcfp)
398b5850f8SVineet Gupta		. = ALIGN(CONFIG_ARC_ICCM_SZ * 1024);
408b5850f8SVineet Gupta	}
418b5850f8SVineet Gupta#endif
428b5850f8SVineet Gupta
43cfdbc2e1SVineet Gupta	/*
44*ebfc2fd8SBjorn Helgaas	 * The reason for having a separate subsection .init.ramfs is to
45*ebfc2fd8SBjorn Helgaas	 * prevent objdump from including it in kernel dumps
46cfdbc2e1SVineet Gupta	 *
47cfdbc2e1SVineet Gupta	 * Reason for having .init.ramfs above .init is to make sure that the
48cfdbc2e1SVineet Gupta	 * binary blob is tucked away to one side, reducing the displacement
49cfdbc2e1SVineet Gupta	 * between .init.text and .text, avoiding any possible relocation
50cfdbc2e1SVineet Gupta	 * errors because of calls from .init.text to .text
51cfdbc2e1SVineet Gupta	 * Yes such calls do exist. e.g.
52cfdbc2e1SVineet Gupta	 *	decompress_inflate.c:gunzip( ) -> zlib_inflate_workspace( )
53cfdbc2e1SVineet Gupta	 */
54cfdbc2e1SVineet Gupta
55cfdbc2e1SVineet Gupta	__init_begin = .;
56cfdbc2e1SVineet Gupta
57cfdbc2e1SVineet Gupta	.init.ramfs : { INIT_RAM_FS }
58cfdbc2e1SVineet Gupta
59cfdbc2e1SVineet Gupta	. = ALIGN(PAGE_SIZE);
60cfdbc2e1SVineet Gupta
61cfdbc2e1SVineet Gupta	HEAD_TEXT_SECTION
62cfdbc2e1SVineet Gupta	INIT_TEXT_SECTION(L1_CACHE_BYTES)
63cfdbc2e1SVineet Gupta
64cfdbc2e1SVineet Gupta	/* INIT_DATA_SECTION open-coded: special INIT_RAM_FS handling */
65cfdbc2e1SVineet Gupta	.init.data : {
66cfdbc2e1SVineet Gupta		INIT_DATA
67cfdbc2e1SVineet Gupta		INIT_SETUP(L1_CACHE_BYTES)
68cfdbc2e1SVineet Gupta		INIT_CALLS
69cfdbc2e1SVineet Gupta		CON_INITCALL
70cfdbc2e1SVineet Gupta	}
71cfdbc2e1SVineet Gupta
7203a6d28cSVineet Gupta	.init.arch.info : {
7303a6d28cSVineet Gupta		__arch_info_begin = .;
7403a6d28cSVineet Gupta		*(.arch.info.init)
7503a6d28cSVineet Gupta		__arch_info_end = .;
7603a6d28cSVineet Gupta	}
7703a6d28cSVineet Gupta
78cfdbc2e1SVineet Gupta	PERCPU_SECTION(L1_CACHE_BYTES)
79cfdbc2e1SVineet Gupta
80cfdbc2e1SVineet Gupta	. = ALIGN(PAGE_SIZE);
81cfdbc2e1SVineet Gupta	__init_end = .;
82cfdbc2e1SVineet Gupta
83cfdbc2e1SVineet Gupta	.text : {
84cfdbc2e1SVineet Gupta		_text = .;
85110febc0SVineet Gupta		_stext = .;
86cfdbc2e1SVineet Gupta		TEXT_TEXT
87cfdbc2e1SVineet Gupta		SCHED_TEXT
88cfdbc2e1SVineet Gupta		LOCK_TEXT
89cfdbc2e1SVineet Gupta		KPROBES_TEXT
90bf79167fSGuenter Roeck		IRQENTRY_TEXT
91bf79167fSGuenter Roeck		SOFTIRQENTRY_TEXT
92cfdbc2e1SVineet Gupta		*(.fixup)
93cfdbc2e1SVineet Gupta		*(.gnu.warning)
94cfdbc2e1SVineet Gupta	}
95cfdbc2e1SVineet Gupta	EXCEPTION_TABLE(L1_CACHE_BYTES)
96cfdbc2e1SVineet Gupta	_etext = .;
97cfdbc2e1SVineet Gupta
98cfdbc2e1SVineet Gupta	_sdata = .;
9993240b32SKees Cook	RO_DATA(PAGE_SIZE)
100cfdbc2e1SVineet Gupta
101cfdbc2e1SVineet Gupta	/*
102cfdbc2e1SVineet Gupta	 * 1. this is .data essentially
103cfdbc2e1SVineet Gupta	 * 2. THREAD_SIZE for init.task, must be kernel-stk sz aligned
104cfdbc2e1SVineet Gupta	 */
105c9174047SKees Cook	RW_DATA(L1_CACHE_BYTES, PAGE_SIZE, THREAD_SIZE)
106cfdbc2e1SVineet Gupta
107cfdbc2e1SVineet Gupta	_edata = .;
108cfdbc2e1SVineet Gupta
109bef444a3SVineet Gupta	BSS_SECTION(4, 4, 4)
110cfdbc2e1SVineet Gupta
111854a0d95SVineet Gupta#ifdef CONFIG_ARC_DW2_UNWIND
112854a0d95SVineet Gupta	. = ALIGN(PAGE_SIZE);
1136716dbbdSVineet Gupta	.eh_frame  : {
114854a0d95SVineet Gupta		__start_unwind = .;
1156716dbbdSVineet Gupta		*(.eh_frame)
116854a0d95SVineet Gupta		__end_unwind = .;
117854a0d95SVineet Gupta	}
118854a0d95SVineet Gupta#else
1196716dbbdSVineet Gupta	/DISCARD/ : {	*(.eh_frame) }
120854a0d95SVineet Gupta#endif
121854a0d95SVineet Gupta
122cfdbc2e1SVineet Gupta	. = ALIGN(PAGE_SIZE);
123cfdbc2e1SVineet Gupta	_end = . ;
124cfdbc2e1SVineet Gupta
125cfdbc2e1SVineet Gupta	STABS_DEBUG
126c604abc3SKees Cook	ELF_DETAILS
127cfdbc2e1SVineet Gupta	DISCARDS
128cfdbc2e1SVineet Gupta
129cfdbc2e1SVineet Gupta	.arcextmap 0 : {
130cfdbc2e1SVineet Gupta		*(.gnu.linkonce.arcextmap.*)
131cfdbc2e1SVineet Gupta		*(.arcextmap.*)
132cfdbc2e1SVineet Gupta	}
133854a0d95SVineet Gupta
1345a45da02SVineet Gupta#ifndef CONFIG_DEBUG_INFO
1356716dbbdSVineet Gupta	/DISCARD/ : { *(.debug_frame) }
1365a45da02SVineet Gupta	/DISCARD/ : { *(.debug_aranges) }
1375a45da02SVineet Gupta	/DISCARD/ : { *(.debug_pubnames) }
1385a45da02SVineet Gupta	/DISCARD/ : { *(.debug_info) }
1395a45da02SVineet Gupta	/DISCARD/ : { *(.debug_abbrev) }
1405a45da02SVineet Gupta	/DISCARD/ : { *(.debug_line) }
1415a45da02SVineet Gupta	/DISCARD/ : { *(.debug_str) }
1425a45da02SVineet Gupta	/DISCARD/ : { *(.debug_loc) }
1435a45da02SVineet Gupta	/DISCARD/ : { *(.debug_macinfo) }
1445a45da02SVineet Gupta	/DISCARD/ : { *(.debug_ranges) }
1455a45da02SVineet Gupta#endif
146854a0d95SVineet Gupta
1478b5850f8SVineet Gupta#ifdef CONFIG_ARC_HAS_DCCM
1488b5850f8SVineet Gupta	. = CONFIG_ARC_DCCM_BASE;
1498b5850f8SVineet Gupta	__arc_dccm_base = .;
1508b5850f8SVineet Gupta	.data.arcfp : {
1518b5850f8SVineet Gupta		*(.data.arcfp)
1528b5850f8SVineet Gupta	}
1538b5850f8SVineet Gupta	. = ALIGN(CONFIG_ARC_DCCM_SZ * 1024);
1548b5850f8SVineet Gupta#endif
155cfdbc2e1SVineet Gupta}
156