1/* SPDX-License-Identifier: GPL-2.0-only */ 2/* 3 * Copyright (C) 2012 Regents of the University of California 4 * Copyright (C) 2017 SiFive 5 */ 6 7#define LOAD_OFFSET PAGE_OFFSET 8#include <asm/vmlinux.lds.h> 9#include <asm/page.h> 10#include <asm/cache.h> 11#include <asm/thread_info.h> 12#include <asm/set_memory.h> 13#include "image-vars.h" 14 15#include <linux/sizes.h> 16OUTPUT_ARCH(riscv) 17ENTRY(_start) 18 19jiffies = jiffies_64; 20 21PECOFF_SECTION_ALIGNMENT = 0x1000; 22PECOFF_FILE_ALIGNMENT = 0x200; 23 24SECTIONS 25{ 26 /* Beginning of code and text segment */ 27 . = LOAD_OFFSET; 28 _start = .; 29 HEAD_TEXT_SECTION 30 . = ALIGN(PAGE_SIZE); 31 32 .text : { 33 _text = .; 34 _stext = .; 35 TEXT_TEXT 36 SCHED_TEXT 37 CPUIDLE_TEXT 38 LOCK_TEXT 39 KPROBES_TEXT 40 ENTRY_TEXT 41 IRQENTRY_TEXT 42 SOFTIRQENTRY_TEXT 43 *(.fixup) 44 _etext = .; 45 } 46 47 . = ALIGN(SECTION_ALIGN); 48 __init_begin = .; 49 __init_text_begin = .; 50 .init.text : AT(ADDR(.init.text) - LOAD_OFFSET) ALIGN(SECTION_ALIGN) { \ 51 _sinittext = .; \ 52 INIT_TEXT \ 53 _einittext = .; \ 54 } 55 56 . = ALIGN(8); 57 __soc_early_init_table : { 58 __soc_early_init_table_start = .; 59 KEEP(*(__soc_early_init_table)) 60 __soc_early_init_table_end = .; 61 } 62 __soc_builtin_dtb_table : { 63 __soc_builtin_dtb_table_start = .; 64 KEEP(*(__soc_builtin_dtb_table)) 65 __soc_builtin_dtb_table_end = .; 66 } 67 /* we have to discard exit text and such at runtime, not link time */ 68 .exit.text : 69 { 70 EXIT_TEXT 71 } 72 73 __init_text_end = .; 74 . = ALIGN(SECTION_ALIGN); 75#ifdef CONFIG_EFI 76 . = ALIGN(PECOFF_SECTION_ALIGNMENT); 77 __pecoff_text_end = .; 78#endif 79 /* Start of init data section */ 80 __init_data_begin = .; 81 INIT_DATA_SECTION(16) 82 .exit.data : 83 { 84 EXIT_DATA 85 } 86 PERCPU_SECTION(L1_CACHE_BYTES) 87 88 .rel.dyn : { 89 *(.rel.dyn*) 90 } 91 92 __init_data_end = .; 93 94 . = ALIGN(8); 95 .alternative : { 96 __alt_start = .; 97 *(.alternative) 98 __alt_end = .; 99 } 100 __init_end = .; 101 102 /* Start of data section */ 103 _sdata = .; 104 RO_DATA(SECTION_ALIGN) 105 .srodata : { 106 *(.srodata*) 107 } 108 109 EXCEPTION_TABLE(0x10) 110 111 . = ALIGN(SECTION_ALIGN); 112 _data = .; 113 114 RW_DATA(L1_CACHE_BYTES, PAGE_SIZE, THREAD_SIZE) 115 .sdata : { 116 __global_pointer$ = . + 0x800; 117 *(.sdata*) 118 } 119 120#ifdef CONFIG_EFI 121 .pecoff_edata_padding : { BYTE(0); . = ALIGN(PECOFF_FILE_ALIGNMENT); } 122 __pecoff_data_raw_size = ABSOLUTE(. - __pecoff_text_end); 123#endif 124 125 /* End of data section */ 126 _edata = .; 127 128 BSS_SECTION(PAGE_SIZE, PAGE_SIZE, 0) 129 130#ifdef CONFIG_EFI 131 . = ALIGN(PECOFF_SECTION_ALIGNMENT); 132 __pecoff_data_virt_size = ABSOLUTE(. - __pecoff_text_end); 133#endif 134 _end = .; 135 136 STABS_DEBUG 137 DWARF_DEBUG 138 ELF_DETAILS 139 140 DISCARDS 141} 142