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> 13*cb7d2dd5SAtish Patra#include "image-vars.h" 14fbe934d6SPalmer Dabbelt 15e011995eSAtish Patra#include <linux/sizes.h> 16fbe934d6SPalmer DabbeltOUTPUT_ARCH(riscv) 17fbe934d6SPalmer DabbeltENTRY(_start) 18fbe934d6SPalmer Dabbelt 19fbe934d6SPalmer Dabbeltjiffies = jiffies_64; 20fbe934d6SPalmer Dabbelt 21*cb7d2dd5SAtish PatraPECOFF_SECTION_ALIGNMENT = 0x1000; 22*cb7d2dd5SAtish PatraPECOFF_FILE_ALIGNMENT = 0x200; 23*cb7d2dd5SAtish Patra 24fbe934d6SPalmer DabbeltSECTIONS 25fbe934d6SPalmer Dabbelt{ 26fbe934d6SPalmer Dabbelt /* Beginning of code and text segment */ 27fbe934d6SPalmer Dabbelt . = LOAD_OFFSET; 28fbe934d6SPalmer Dabbelt _start = .; 296184358dSGuo Ren _stext = .; 30fbe934d6SPalmer Dabbelt HEAD_TEXT_SECTION 31e011995eSAtish Patra . = ALIGN(PAGE_SIZE); 32e011995eSAtish Patra 33e011995eSAtish Patra __init_begin = .; 34fbe934d6SPalmer Dabbelt INIT_TEXT_SECTION(PAGE_SIZE) 35fbe934d6SPalmer Dabbelt INIT_DATA_SECTION(16) 36335b1390SDamien Le Moal . = ALIGN(8); 37335b1390SDamien Le Moal __soc_early_init_table : { 38335b1390SDamien Le Moal __soc_early_init_table_start = .; 39335b1390SDamien Le Moal KEEP(*(__soc_early_init_table)) 40335b1390SDamien Le Moal __soc_early_init_table_end = .; 41335b1390SDamien Le Moal } 422d268251SPalmer Dabbelt __soc_builtin_dtb_table : { 432d268251SPalmer Dabbelt __soc_builtin_dtb_table_start = .; 442d268251SPalmer Dabbelt KEEP(*(__soc_builtin_dtb_table)) 452d268251SPalmer Dabbelt __soc_builtin_dtb_table_end = .; 462d268251SPalmer Dabbelt } 47fbe934d6SPalmer Dabbelt /* we have to discard exit text and such at runtime, not link time */ 48fbe934d6SPalmer Dabbelt .exit.text : 49fbe934d6SPalmer Dabbelt { 50fbe934d6SPalmer Dabbelt EXIT_TEXT 51fbe934d6SPalmer Dabbelt } 52fbe934d6SPalmer Dabbelt .exit.data : 53fbe934d6SPalmer Dabbelt { 54fbe934d6SPalmer Dabbelt EXIT_DATA 55fbe934d6SPalmer Dabbelt } 56fbe934d6SPalmer Dabbelt PERCPU_SECTION(L1_CACHE_BYTES) 57fbe934d6SPalmer Dabbelt __init_end = .; 58fbe934d6SPalmer Dabbelt 5900cb41d5SZong Li . = ALIGN(SECTION_ALIGN); 60fbe934d6SPalmer Dabbelt .text : { 61fbe934d6SPalmer Dabbelt _text = .; 62fbe934d6SPalmer Dabbelt TEXT_TEXT 63fbe934d6SPalmer Dabbelt SCHED_TEXT 64fbe934d6SPalmer Dabbelt CPUIDLE_TEXT 65fbe934d6SPalmer Dabbelt LOCK_TEXT 66fbe934d6SPalmer Dabbelt KPROBES_TEXT 67fbe934d6SPalmer Dabbelt ENTRY_TEXT 68fbe934d6SPalmer Dabbelt IRQENTRY_TEXT 698ad8b727SNick Hu SOFTIRQENTRY_TEXT 70fbe934d6SPalmer Dabbelt *(.fixup) 71fbe934d6SPalmer Dabbelt _etext = .; 72fbe934d6SPalmer Dabbelt } 73fbe934d6SPalmer Dabbelt 74*cb7d2dd5SAtish Patra#ifdef CONFIG_EFI 75*cb7d2dd5SAtish Patra . = ALIGN(PECOFF_SECTION_ALIGNMENT); 76*cb7d2dd5SAtish Patra __pecoff_text_end = .; 77*cb7d2dd5SAtish Patra#endif 78*cb7d2dd5SAtish Patra 79fbe934d6SPalmer Dabbelt /* Start of data section */ 80fbe934d6SPalmer Dabbelt _sdata = .; 8100cb41d5SZong Li RO_DATA(SECTION_ALIGN) 82fbe934d6SPalmer Dabbelt .srodata : { 83fbe934d6SPalmer Dabbelt *(.srodata*) 84fbe934d6SPalmer Dabbelt } 85fbe934d6SPalmer Dabbelt 86bd3d914dSZong Li EXCEPTION_TABLE(0x10) 87bd3d914dSZong Li 8800cb41d5SZong Li . = ALIGN(SECTION_ALIGN); 89bd3d914dSZong Li _data = .; 90bd3d914dSZong Li 91c9174047SKees Cook RW_DATA(L1_CACHE_BYTES, PAGE_SIZE, THREAD_SIZE) 92fbe934d6SPalmer Dabbelt .sdata : { 93fbe934d6SPalmer Dabbelt __global_pointer$ = . + 0x800; 94fbe934d6SPalmer Dabbelt *(.sdata*) 95*cb7d2dd5SAtish Patra } 96*cb7d2dd5SAtish Patra 97*cb7d2dd5SAtish Patra#ifdef CONFIG_EFI 98*cb7d2dd5SAtish Patra .pecoff_edata_padding : { BYTE(0); . = ALIGN(PECOFF_FILE_ALIGNMENT); } 99*cb7d2dd5SAtish Patra __pecoff_data_raw_size = ABSOLUTE(. - __pecoff_text_end); 100*cb7d2dd5SAtish Patra#endif 101*cb7d2dd5SAtish Patra 102fbe934d6SPalmer Dabbelt /* End of data section */ 103fbe934d6SPalmer Dabbelt _edata = .; 104fbe934d6SPalmer Dabbelt 10541fb9d54SPalmer Dabbelt BSS_SECTION(PAGE_SIZE, PAGE_SIZE, 0) 10641fb9d54SPalmer Dabbelt 107fbe934d6SPalmer Dabbelt .rel.dyn : { 108fbe934d6SPalmer Dabbelt *(.rel.dyn*) 109fbe934d6SPalmer Dabbelt } 110fbe934d6SPalmer Dabbelt 111*cb7d2dd5SAtish Patra#ifdef CONFIG_EFI 112*cb7d2dd5SAtish Patra . = ALIGN(PECOFF_SECTION_ALIGNMENT); 113*cb7d2dd5SAtish Patra __pecoff_data_virt_size = ABSOLUTE(. - __pecoff_text_end); 114*cb7d2dd5SAtish Patra#endif 115fbe934d6SPalmer Dabbelt _end = .; 116fbe934d6SPalmer Dabbelt 117fbe934d6SPalmer Dabbelt STABS_DEBUG 118fbe934d6SPalmer Dabbelt DWARF_DEBUG 119fbe934d6SPalmer Dabbelt 120fbe934d6SPalmer Dabbelt DISCARDS 121fbe934d6SPalmer Dabbelt} 122