xref: /openbmc/linux/arch/ia64/kernel/vmlinux.lds.S (revision 9a87ffc99ec8eb8d35eed7c4f816d75f5cc9662e)
1b2441318SGreg Kroah-Hartman/* SPDX-License-Identifier: GPL-2.0 */
21da177e4SLinus Torvalds
365fddcfcSMike Rapoport#include <linux/pgtable.h>
41da177e4SLinus Torvalds#include <asm/cache.h>
51da177e4SLinus Torvalds#include <asm/ptrace.h>
60500871fSDavid Howells#include <asm/thread_info.h>
71da177e4SLinus Torvalds
8441110a5SKees Cook#define EMITS_PT_NOTE
99b30e704SKees Cook#define RO_EXCEPTION_TABLE_ALIGN	16
10441110a5SKees Cook
111da177e4SLinus Torvalds#include <asm-generic/vmlinux.lds.h>
121da177e4SLinus Torvalds
131da177e4SLinus TorvaldsOUTPUT_FORMAT("elf64-ia64-little")
141da177e4SLinus TorvaldsOUTPUT_ARCH(ia64)
151da177e4SLinus TorvaldsENTRY(phys_start)
161da177e4SLinus Torvaldsjiffies = jiffies_64;
177b313fdfSSam Ravnborg
181da177e4SLinus TorvaldsPHDRS {
19430c6b26SKees Cook	text   PT_LOAD;
201da177e4SLinus Torvalds	percpu PT_LOAD;
211da177e4SLinus Torvalds	data   PT_LOAD;
22336cdba8SDavid Mosberger-Tang	note   PT_NOTE;
239bf77d0eSDavid Mosberger-Tang	unwind 0x70000001; /* PT_IA_64_UNWIND, but ld doesn't match the name */
241da177e4SLinus Torvalds}
257b313fdfSSam Ravnborg
267b313fdfSSam RavnborgSECTIONS {
277b313fdfSSam Ravnborg	/*
287b313fdfSSam Ravnborg	 * unwind exit sections must be discarded before
297b313fdfSSam Ravnborg	 * the rest of the sections get included.
307b313fdfSSam Ravnborg	 */
311da177e4SLinus Torvalds	/DISCARD/ : {
321da177e4SLinus Torvalds		*(.IA_64.unwind.exit.text)
331da177e4SLinus Torvalds		*(.IA_64.unwind_info.exit.text)
34023bf6f1STejun Heo		*(.comment)
35023bf6f1STejun Heo		*(.note)
361da177e4SLinus Torvalds	}
371da177e4SLinus Torvalds
381da177e4SLinus Torvalds	v = PAGE_OFFSET; /* this symbol is here to make debugging easier... */
391da177e4SLinus Torvalds	phys_start = _start - LOAD_OFFSET;
401da177e4SLinus Torvalds
417b313fdfSSam Ravnborg	code : {
42430c6b26SKees Cook	} :text
431da177e4SLinus Torvalds	. = KERNEL_START;
441da177e4SLinus Torvalds
451da177e4SLinus Torvalds	_text = .;
461da177e4SLinus Torvalds	_stext = .;
471da177e4SLinus Torvalds
487b313fdfSSam Ravnborg	.text : AT(ADDR(.text) - LOAD_OFFSET) {
497b313fdfSSam Ravnborg		__start_ivt_text = .;
507b313fdfSSam Ravnborg		*(.text..ivt)
517b313fdfSSam Ravnborg		__end_ivt_text = .;
527664709bSSam Ravnborg		TEXT_TEXT
531da177e4SLinus Torvalds		SCHED_TEXT
541da177e4SLinus Torvalds		LOCK_TEXT
551f7ad57bSPrasanna S Panchamukhi		KPROBES_TEXT
56505a0ef1SAlexander Potapenko		IRQENTRY_TEXT
57505a0ef1SAlexander Potapenko		SOFTIRQENTRY_TEXT
581da177e4SLinus Torvalds		*(.gnu.linkonce.t*)
591da177e4SLinus Torvalds	}
607b313fdfSSam Ravnborg
617b313fdfSSam Ravnborg	.text2 : AT(ADDR(.text2) - LOAD_OFFSET)	{
627b313fdfSSam Ravnborg		*(.text2)
637b313fdfSSam Ravnborg	}
647b313fdfSSam Ravnborg
651da177e4SLinus Torvalds#ifdef CONFIG_SMP
667b313fdfSSam Ravnborg	.text..lock : AT(ADDR(.text..lock) - LOAD_OFFSET) {
677b313fdfSSam Ravnborg		*(.text..lock)
687b313fdfSSam Ravnborg	}
691da177e4SLinus Torvalds#endif
701da177e4SLinus Torvalds	_etext = .;
711da177e4SLinus Torvalds
727b313fdfSSam Ravnborg	/*
737b313fdfSSam Ravnborg	 * Read-only data
747b313fdfSSam Ravnborg	 */
751da177e4SLinus Torvalds
76d89cfe7fSRuss Anderson	/* MCA table */
77d89cfe7fSRuss Anderson	. = ALIGN(16);
787b313fdfSSam Ravnborg	__mca_table : AT(ADDR(__mca_table) - LOAD_OFFSET) {
79d89cfe7fSRuss Anderson		__start___mca_table = .;
80d89cfe7fSRuss Anderson		*(__mca_table)
81d89cfe7fSRuss Anderson		__stop___mca_table = .;
82d89cfe7fSRuss Anderson	}
83d89cfe7fSRuss Anderson
847b313fdfSSam Ravnborg	.data..patch.phys_stack_reg : AT(ADDR(.data..patch.phys_stack_reg) - LOAD_OFFSET) {
85a0776ec8SChen, Kenneth W		__start___phys_stack_reg_patchlist = .;
86dafb9320SDenys Vlasenko		*(.data..patch.phys_stack_reg)
87a0776ec8SChen, Kenneth W		__end___phys_stack_reg_patchlist = .;
88a0776ec8SChen, Kenneth W	}
89a0776ec8SChen, Kenneth W
907b313fdfSSam Ravnborg	/*
917b313fdfSSam Ravnborg	 * Global data
927b313fdfSSam Ravnborg	 */
931da177e4SLinus Torvalds	_data = .;
941da177e4SLinus Torvalds
951da177e4SLinus Torvalds	/* Unwind info & table: */
961da177e4SLinus Torvalds	. = ALIGN(8);
977b313fdfSSam Ravnborg	.IA_64.unwind_info : AT(ADDR(.IA_64.unwind_info) - LOAD_OFFSET) {
987b313fdfSSam Ravnborg		*(.IA_64.unwind_info*)
997b313fdfSSam Ravnborg	}
1007b313fdfSSam Ravnborg	.IA_64.unwind : AT(ADDR(.IA_64.unwind) - LOAD_OFFSET) {
1011da177e4SLinus Torvalds		__start_unwind = .;
1021da177e4SLinus Torvalds		*(.IA_64.unwind*)
1031da177e4SLinus Torvalds		__end_unwind = .;
104430c6b26SKees Cook	} :text :unwind
1057b313fdfSSam Ravnborg	code_continues2 : {
106430c6b26SKees Cook	} :text
1071da177e4SLinus Torvalds
108c8231825SKees Cook	RO_DATA(4096)
1091da177e4SLinus Torvalds
1107b313fdfSSam Ravnborg	.opd : AT(ADDR(.opd) - LOAD_OFFSET) {
1118e307888SSergey Senozhatsky		__start_opd = .;
1127b313fdfSSam Ravnborg		*(.opd)
1138e307888SSergey Senozhatsky		__end_opd = .;
1147b313fdfSSam Ravnborg	}
1151da177e4SLinus Torvalds
1167b313fdfSSam Ravnborg	/*
1177b313fdfSSam Ravnborg	 * Initialization code and data:
1187b313fdfSSam Ravnborg	 */
1191da177e4SLinus Torvalds	. = ALIGN(PAGE_SIZE);
1201da177e4SLinus Torvalds	__init_begin = .;
1211da177e4SLinus Torvalds
1226ae86350SNelson Elhage	INIT_TEXT_SECTION(PAGE_SIZE)
1236ae86350SNelson Elhage	INIT_DATA_SECTION(16)
12439e18de8SChen, Kenneth W
1257b313fdfSSam Ravnborg	.data..patch.vtop : AT(ADDR(.data..patch.vtop) - LOAD_OFFSET) {
12639e18de8SChen, Kenneth W		__start___vtop_patchlist = .;
127dafb9320SDenys Vlasenko		*(.data..patch.vtop)
12839e18de8SChen, Kenneth W		__end___vtop_patchlist = .;
12939e18de8SChen, Kenneth W	}
13039e18de8SChen, Kenneth W
1317b313fdfSSam Ravnborg	.data..patch.rse : AT(ADDR(.data..patch.rse) - LOAD_OFFSET) {
1324dcc29e1STony Luck		__start___rse_patchlist = .;
133dafb9320SDenys Vlasenko		*(.data..patch.rse)
1344dcc29e1STony Luck		__end___rse_patchlist = .;
1354dcc29e1STony Luck	}
1364dcc29e1STony Luck
1377b313fdfSSam Ravnborg	.data..patch.mckinley_e9 : AT(ADDR(.data..patch.mckinley_e9) - LOAD_OFFSET) {
13839e18de8SChen, Kenneth W		__start___mckinley_e9_bundles = .;
139dafb9320SDenys Vlasenko		*(.data..patch.mckinley_e9)
14039e18de8SChen, Kenneth W		__end___mckinley_e9_bundles = .;
14139e18de8SChen, Kenneth W	}
14239e18de8SChen, Kenneth W
14336886478STejun Heo#ifdef	CONFIG_SMP
14436886478STejun Heo	. = ALIGN(PERCPU_PAGE_SIZE);
14536886478STejun Heo	__cpu0_per_cpu = .;
14636886478STejun Heo	. = . + PERCPU_PAGE_SIZE;   /* cpu0 per-cpu space */
14736886478STejun Heo#endif
14836886478STejun Heo
1491da177e4SLinus Torvalds	. = ALIGN(PAGE_SIZE);
1501da177e4SLinus Torvalds	__init_end = .;
1511da177e4SLinus Torvalds
1527b313fdfSSam Ravnborg	.data..page_aligned : AT(ADDR(.data..page_aligned) - LOAD_OFFSET) {
153ed7af3e6SNelson Elhage		PAGE_ALIGNED_DATA(PAGE_SIZE)
154ed7af3e6SNelson Elhage		. = ALIGN(PAGE_SIZE);
1551da177e4SLinus Torvalds		__start_gate_section = .;
156e1cb14b8SDenys Vlasenko		*(.data..gate)
1571da177e4SLinus Torvalds		__stop_gate_section = .;
1581da177e4SLinus Torvalds	}
1597b313fdfSSam Ravnborg	/*
1607b313fdfSSam Ravnborg	 * make sure the gate page doesn't expose
161df8f0ec1SAl Stone	 * kernel data
162df8f0ec1SAl Stone	 */
1637b313fdfSSam Ravnborg	. = ALIGN(PAGE_SIZE);
1641da177e4SLinus Torvalds
1651da177e4SLinus Torvalds	/* Per-cpu data: */
1661da177e4SLinus Torvalds	. = ALIGN(PERCPU_PAGE_SIZE);
16719df0c2fSTejun Heo	PERCPU_VADDR(SMP_CACHE_BYTES, PERCPU_ADDR, :percpu)
16819390c4dSTejun Heo	__phys_per_cpu_start = __per_cpu_load;
1697b313fdfSSam Ravnborg	/*
1707b313fdfSSam Ravnborg	 * ensure percpu data fits
171df8f0ec1SAl Stone	 * into percpu page size
172df8f0ec1SAl Stone	 */
1737b313fdfSSam Ravnborg	. = __phys_per_cpu_start + PERCPU_PAGE_SIZE;
1741da177e4SLinus Torvalds
1757b313fdfSSam Ravnborg	data : {
1767b313fdfSSam Ravnborg	} :data
1777b313fdfSSam Ravnborg	.data : AT(ADDR(.data) - LOAD_OFFSET) {
17830f7276cSTony Luck		_sdata  =  .;
1796ae86350SNelson Elhage		INIT_TASK_DATA(PAGE_SIZE)
1806ae86350SNelson Elhage		CACHELINE_ALIGNED_DATA(SMP_CACHE_BYTES)
1816ae86350SNelson Elhage		READ_MOSTLY_DATA(SMP_CACHE_BYTES)
182ca967258SSam Ravnborg		DATA_DATA
183ca967258SSam Ravnborg		*(.data1)
184ca967258SSam Ravnborg		*(.gnu.linkonce.d*)
185ca967258SSam Ravnborg		CONSTRUCTORS
186ca967258SSam Ravnborg	}
1871da177e4SLinus Torvalds
188b5effd38SPeter Zijlstra	BUG_TABLE
189b5effd38SPeter Zijlstra
1901da177e4SLinus Torvalds	. = ALIGN(16);	/* gp must be 16-byte aligned for exc. table */
1917b313fdfSSam Ravnborg	.got : AT(ADDR(.got) - LOAD_OFFSET) {
1927b313fdfSSam Ravnborg		*(.got.plt)
1937b313fdfSSam Ravnborg		*(.got)
1947b313fdfSSam Ravnborg	}
1951da177e4SLinus Torvalds	__gp = ADDR(.got) + 0x200000;
1967b313fdfSSam Ravnborg
1977b313fdfSSam Ravnborg	/*
1987b313fdfSSam Ravnborg	 * We want the small data sections together,
1997b313fdfSSam Ravnborg	 * so single-instruction offsets can access
2007b313fdfSSam Ravnborg	 * them all, and initialized data all before
2017b313fdfSSam Ravnborg	 * uninitialized, so we can shorten the
2027b313fdfSSam Ravnborg	 * on-disk segment size.
2037b313fdfSSam Ravnborg	 */
2047b313fdfSSam Ravnborg	.sdata : AT(ADDR(.sdata) - LOAD_OFFSET) {
2057b313fdfSSam Ravnborg		*(.sdata)
2067b313fdfSSam Ravnborg		*(.sdata1)
2077b313fdfSSam Ravnborg		*(.srdata)
2087b313fdfSSam Ravnborg	}
2091da177e4SLinus Torvalds	_edata  =  .;
2106ae86350SNelson Elhage
2116ae86350SNelson Elhage	BSS_SECTION(0, 0, 0)
2121da177e4SLinus Torvalds
2131da177e4SLinus Torvalds	_end = .;
2141da177e4SLinus Torvalds
2157b313fdfSSam Ravnborg	code : {
216430c6b26SKees Cook	} :text
2176ae86350SNelson Elhage
2186ae86350SNelson Elhage	STABS_DEBUG
2196ae86350SNelson Elhage	DWARF_DEBUG
220*c604abc3SKees Cook	ELF_DETAILS
221023bf6f1STejun Heo
222023bf6f1STejun Heo	/* Default discards */
223023bf6f1STejun Heo	DISCARDS
2241da177e4SLinus Torvalds}
225