150acfb2bSThomas 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> 1200cb41d5SZong Li#include <asm/set_memory.h> 13fbe934d6SPalmer Dabbelt 14e011995eSAtish Patra#include <linux/sizes.h> 15fbe934d6SPalmer DabbeltOUTPUT_ARCH(riscv) 16fbe934d6SPalmer DabbeltENTRY(_start) 17fbe934d6SPalmer Dabbelt 18fbe934d6SPalmer Dabbeltjiffies = jiffies_64; 19fbe934d6SPalmer Dabbelt 20fbe934d6SPalmer DabbeltSECTIONS 21fbe934d6SPalmer Dabbelt{ 22fbe934d6SPalmer Dabbelt /* Beginning of code and text segment */ 23fbe934d6SPalmer Dabbelt . = LOAD_OFFSET; 24fbe934d6SPalmer Dabbelt _start = .; 25fbe934d6SPalmer Dabbelt HEAD_TEXT_SECTION 26e011995eSAtish Patra . = ALIGN(PAGE_SIZE); 27e011995eSAtish Patra 28e011995eSAtish Patra __init_begin = .; 29fbe934d6SPalmer Dabbelt INIT_TEXT_SECTION(PAGE_SIZE) 30fbe934d6SPalmer Dabbelt INIT_DATA_SECTION(16) 31*335b1390SDamien Le Moal . = ALIGN(8); 32*335b1390SDamien Le Moal __soc_early_init_table : { 33*335b1390SDamien Le Moal __soc_early_init_table_start = .; 34*335b1390SDamien Le Moal KEEP(*(__soc_early_init_table)) 35*335b1390SDamien Le Moal __soc_early_init_table_end = .; 36*335b1390SDamien Le Moal } 37fbe934d6SPalmer Dabbelt /* we have to discard exit text and such at runtime, not link time */ 38fbe934d6SPalmer Dabbelt .exit.text : 39fbe934d6SPalmer Dabbelt { 40fbe934d6SPalmer Dabbelt EXIT_TEXT 41fbe934d6SPalmer Dabbelt } 42fbe934d6SPalmer Dabbelt .exit.data : 43fbe934d6SPalmer Dabbelt { 44fbe934d6SPalmer Dabbelt EXIT_DATA 45fbe934d6SPalmer Dabbelt } 46fbe934d6SPalmer Dabbelt PERCPU_SECTION(L1_CACHE_BYTES) 47fbe934d6SPalmer Dabbelt __init_end = .; 48fbe934d6SPalmer Dabbelt 4900cb41d5SZong Li . = ALIGN(SECTION_ALIGN); 50fbe934d6SPalmer Dabbelt .text : { 51fbe934d6SPalmer Dabbelt _text = .; 52fbe934d6SPalmer Dabbelt _stext = .; 53fbe934d6SPalmer Dabbelt TEXT_TEXT 54fbe934d6SPalmer Dabbelt SCHED_TEXT 55fbe934d6SPalmer Dabbelt CPUIDLE_TEXT 56fbe934d6SPalmer Dabbelt LOCK_TEXT 57fbe934d6SPalmer Dabbelt KPROBES_TEXT 58fbe934d6SPalmer Dabbelt ENTRY_TEXT 59fbe934d6SPalmer Dabbelt IRQENTRY_TEXT 608ad8b727SNick Hu SOFTIRQENTRY_TEXT 61fbe934d6SPalmer Dabbelt *(.fixup) 62fbe934d6SPalmer Dabbelt _etext = .; 63fbe934d6SPalmer Dabbelt } 64fbe934d6SPalmer Dabbelt 65fbe934d6SPalmer Dabbelt /* Start of data section */ 66fbe934d6SPalmer Dabbelt _sdata = .; 6700cb41d5SZong Li RO_DATA(SECTION_ALIGN) 68fbe934d6SPalmer Dabbelt .srodata : { 69fbe934d6SPalmer Dabbelt *(.srodata*) 70fbe934d6SPalmer Dabbelt } 71fbe934d6SPalmer Dabbelt 72bd3d914dSZong Li EXCEPTION_TABLE(0x10) 73bd3d914dSZong Li 7400cb41d5SZong Li . = ALIGN(SECTION_ALIGN); 75bd3d914dSZong Li _data = .; 76bd3d914dSZong Li 77c9174047SKees Cook RW_DATA(L1_CACHE_BYTES, PAGE_SIZE, THREAD_SIZE) 78fbe934d6SPalmer Dabbelt .sdata : { 79fbe934d6SPalmer Dabbelt __global_pointer$ = . + 0x800; 80fbe934d6SPalmer Dabbelt *(.sdata*) 81fbe934d6SPalmer Dabbelt /* End of data section */ 82fbe934d6SPalmer Dabbelt _edata = .; 83fbe934d6SPalmer Dabbelt } 84fbe934d6SPalmer Dabbelt 8541fb9d54SPalmer Dabbelt BSS_SECTION(PAGE_SIZE, PAGE_SIZE, 0) 8641fb9d54SPalmer Dabbelt 87fbe934d6SPalmer Dabbelt .rel.dyn : { 88fbe934d6SPalmer Dabbelt *(.rel.dyn*) 89fbe934d6SPalmer Dabbelt } 90fbe934d6SPalmer Dabbelt 91fbe934d6SPalmer Dabbelt _end = .; 92fbe934d6SPalmer Dabbelt 93fbe934d6SPalmer Dabbelt STABS_DEBUG 94fbe934d6SPalmer Dabbelt DWARF_DEBUG 95fbe934d6SPalmer Dabbelt 96fbe934d6SPalmer Dabbelt DISCARDS 97fbe934d6SPalmer Dabbelt} 98