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