xref: /openbmc/linux/arch/openrisc/kernel/vmlinux.lds.S (revision 9a87ffc99ec8eb8d35eed7c4f816d75f5cc9662e)
12874c5fdSThomas Gleixner/* SPDX-License-Identifier: GPL-2.0-or-later */
2f8c4a270SJonas Bonn/*
3f8c4a270SJonas Bonn * OpenRISC vmlinux.lds.S
4f8c4a270SJonas Bonn *
5f8c4a270SJonas Bonn * Linux architectural port borrowing liberally from similar works of
6f8c4a270SJonas Bonn * others.  All original copyrights apply as per the original source
7f8c4a270SJonas Bonn * declaration.
8f8c4a270SJonas Bonn *
9f8c4a270SJonas Bonn * Modifications for the OpenRISC architecture:
10f8c4a270SJonas Bonn * Copyright (C) 2003 Matjaz Breskvar <phoenix@bsemi.com>
11f8c4a270SJonas Bonn * Copyright (C) 2010-2011 Jonas Bonn <jonas@southpole.se>
12f8c4a270SJonas Bonn *
13f8c4a270SJonas Bonn * ld script for OpenRISC architecture
14f8c4a270SJonas Bonn */
15f8c4a270SJonas Bonn
16f8c4a270SJonas Bonn/* TODO
17f8c4a270SJonas Bonn *		- clean up __offset & stuff
18550116d2SMasahiro Yamada *		- change all 8192 alignment to PAGE !!!
19550116d2SMasahiro Yamada *		- recheck if all alignments are really needed
20f8c4a270SJonas Bonn */
21f8c4a270SJonas Bonn
22f8c4a270SJonas Bonn#  define LOAD_OFFSET  PAGE_OFFSET
23f8c4a270SJonas Bonn#  define LOAD_BASE    PAGE_OFFSET
24f8c4a270SJonas Bonn
25f8c4a270SJonas Bonn#include <asm/page.h>
26f8c4a270SJonas Bonn#include <asm/cache.h>
2713810193SDavid Howells#include <asm/thread_info.h>
28f8c4a270SJonas Bonn#include <asm-generic/vmlinux.lds.h>
29f8c4a270SJonas Bonn
301f43e235SGuenter Roeck#ifdef __OR1K__
311f43e235SGuenter Roeck#define __OUTPUT_FORMAT        "elf32-or1k"
321f43e235SGuenter Roeck#else
331f43e235SGuenter Roeck#define __OUTPUT_FORMAT        "elf32-or32"
341f43e235SGuenter Roeck#endif
351f43e235SGuenter Roeck
361f43e235SGuenter RoeckOUTPUT_FORMAT(__OUTPUT_FORMAT, __OUTPUT_FORMAT, __OUTPUT_FORMAT)
37f8c4a270SJonas Bonnjiffies = jiffies_64 + 4;
38f8c4a270SJonas Bonn
39f8c4a270SJonas BonnSECTIONS
40f8c4a270SJonas Bonn{
41f8c4a270SJonas Bonn        /* Read-only sections, merged into text segment: */
42f8c4a270SJonas Bonn        . = LOAD_BASE ;
43f8c4a270SJonas Bonn
44086cc1c3SStafford Horne	_text = .;
45086cc1c3SStafford Horne
46f8c4a270SJonas Bonn	/* _s_kernel_ro must be page aligned */
47f8c4a270SJonas Bonn	. = ALIGN(PAGE_SIZE);
48f8c4a270SJonas Bonn	_s_kernel_ro = .;
49f8c4a270SJonas Bonn
50f8c4a270SJonas Bonn        .text                   : AT(ADDR(.text) - LOAD_OFFSET)
51f8c4a270SJonas Bonn	{
52f8c4a270SJonas Bonn          _stext = .;
53f8c4a270SJonas Bonn	  TEXT_TEXT
54f8c4a270SJonas Bonn	  SCHED_TEXT
55f8c4a270SJonas Bonn	  LOCK_TEXT
56f8c4a270SJonas Bonn	  KPROBES_TEXT
57f8c4a270SJonas Bonn	  IRQENTRY_TEXT
58be7635e7SAlexander Potapenko	  SOFTIRQENTRY_TEXT
59f8c4a270SJonas Bonn	  *(.fixup)
60f8c4a270SJonas Bonn	  *(.text.__*)
61f8c4a270SJonas Bonn	  _etext = .;
62f8c4a270SJonas Bonn	}
63f8c4a270SJonas Bonn	/* TODO: Check if fixup and text.__* are really necessary
64f8c4a270SJonas Bonn	 * fixup is definitely necessary
65f8c4a270SJonas Bonn	 */
66f8c4a270SJonas Bonn
67f8c4a270SJonas Bonn	_sdata = .;
68f8c4a270SJonas Bonn
6993240b32SKees Cook	/* Page alignment required for RO_DATA */
7093240b32SKees Cook	RO_DATA(PAGE_SIZE)
71f8c4a270SJonas Bonn	_e_kernel_ro = .;
72f8c4a270SJonas Bonn
73f8c4a270SJonas Bonn	/* Whatever comes after _e_kernel_ro had better be page-aligend, too */
74f8c4a270SJonas Bonn
75f8c4a270SJonas Bonn	/* 32 here is cacheline size... recheck this */
76c9174047SKees Cook	RW_DATA(32, PAGE_SIZE, PAGE_SIZE)
77f8c4a270SJonas Bonn
78f8c4a270SJonas Bonn        _edata  =  .;
79f8c4a270SJonas Bonn
80f8c4a270SJonas Bonn	EXCEPTION_TABLE(4)
81f8c4a270SJonas Bonn
82f8c4a270SJonas Bonn	/* Init code and data */
83f8c4a270SJonas Bonn	. = ALIGN(PAGE_SIZE);
84f8c4a270SJonas Bonn	__init_begin = .;
85f8c4a270SJonas Bonn
86f8c4a270SJonas Bonn	HEAD_TEXT_SECTION
87f8c4a270SJonas Bonn
88f8c4a270SJonas Bonn	/* Page aligned */
89f8c4a270SJonas Bonn	INIT_TEXT_SECTION(PAGE_SIZE)
90f8c4a270SJonas Bonn
91f8c4a270SJonas Bonn	/* Align __setup_start on 16 byte boundary */
92f8c4a270SJonas Bonn	INIT_DATA_SECTION(16)
93f8c4a270SJonas Bonn
94f8c4a270SJonas Bonn	PERCPU_SECTION(L1_CACHE_BYTES)
95f8c4a270SJonas Bonn
96f8c4a270SJonas Bonn        __init_end = .;
97f8c4a270SJonas Bonn
98f8c4a270SJonas Bonn	BSS_SECTION(0, 0, 0x20)
99f8c4a270SJonas Bonn
100f8c4a270SJonas Bonn        _end = .;
101f8c4a270SJonas Bonn
102f8c4a270SJonas Bonn	/* Throw in the debugging sections */
103f8c4a270SJonas Bonn	STABS_DEBUG
104f8c4a270SJonas Bonn	DWARF_DEBUG
105*c604abc3SKees Cook	ELF_DETAILS
106f8c4a270SJonas Bonn
107f8c4a270SJonas Bonn        /* Sections to be discarded -- must be last */
108f8c4a270SJonas Bonn	DISCARDS
109f8c4a270SJonas Bonn}
110