1 /* SPDX-License-Identifier: GPL-2.0-only */ !! 1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* << 3 * Copyright (C) 2012 Regents of the Universit << 4 * Copyright (C) 2017 SiFive << 5 */ << 6 2 7 #define RO_EXCEPTION_TABLE_ALIGN 4 !! 3 #define EMITS_PT_NOTE 8 #define RUNTIME_DISCARD_EXIT !! 4 #define RO_EXCEPTION_TABLE_ALIGN 16 9 5 10 #ifdef CONFIG_XIP_KERNEL !! 6 #include <asm-generic/vmlinux.lds.h> 11 #include "vmlinux-xip.lds.S" << 12 #else << 13 << 14 #include <asm/pgtable.h> << 15 #define LOAD_OFFSET KERNEL_LINK_ADDR << 16 << 17 #include <asm/vmlinux.lds.h> << 18 #include <asm/page.h> << 19 #include <asm/cache.h> << 20 #include <asm/thread_info.h> 7 #include <asm/thread_info.h> 21 #include <asm/set_memory.h> !! 8 #include <asm/cache.h> 22 #include "image-vars.h" !! 9 #include <asm/page.h> 23 !! 10 #include <asm/setup.h> 24 #include <linux/sizes.h> << 25 OUTPUT_ARCH(riscv) << 26 ENTRY(_start) << 27 11 >> 12 OUTPUT_FORMAT("elf64-alpha") >> 13 OUTPUT_ARCH(alpha) >> 14 ENTRY(__start) >> 15 PHDRS { text PT_LOAD; note PT_NOTE; } 28 jiffies = jiffies_64; 16 jiffies = jiffies_64; 29 << 30 SECTIONS 17 SECTIONS 31 { 18 { 32 /* Beginning of code and text segment !! 19 #ifdef CONFIG_ALPHA_LEGACY_START_ADDRESS 33 . = LOAD_OFFSET; !! 20 . = 0xfffffc0000310000; 34 _start = .; !! 21 #else 35 HEAD_TEXT_SECTION !! 22 . = 0xfffffc0001010000; 36 . = ALIGN(PAGE_SIZE); !! 23 #endif 37 24 >> 25 _text = .; /* Text and read-only data */ 38 .text : { 26 .text : { 39 _text = .; !! 27 HEAD_TEXT 40 _stext = .; << 41 TEXT_TEXT 28 TEXT_TEXT 42 SCHED_TEXT 29 SCHED_TEXT 43 LOCK_TEXT 30 LOCK_TEXT 44 KPROBES_TEXT !! 31 *(.fixup) 45 ENTRY_TEXT !! 32 *(.gnu.warning) 46 IRQENTRY_TEXT !! 33 } :text 47 SOFTIRQENTRY_TEXT !! 34 swapper_pg_dir = SWAPPER_PGD; 48 _etext = .; !! 35 _etext = .; /* End of text section */ 49 } !! 36 50 !! 37 RO_DATA(4096) 51 . = ALIGN(SECTION_ALIGN); !! 38 52 __init_begin = .; !! 39 /* Will be freed after init */ 53 __init_text_begin = .; !! 40 __init_begin = ALIGN(PAGE_SIZE); 54 .init.text : AT(ADDR(.init.text) - LOA !! 41 INIT_TEXT_SECTION(PAGE_SIZE) 55 _sinittext = .; << 56 INIT_TEXT << 57 _einittext = .; << 58 } << 59 << 60 . = ALIGN(8); << 61 __soc_early_init_table : { << 62 __soc_early_init_table_start = << 63 KEEP(*(__soc_early_init_table) << 64 __soc_early_init_table_end = . << 65 } << 66 __soc_builtin_dtb_table : { << 67 __soc_builtin_dtb_table_start << 68 KEEP(*(__soc_builtin_dtb_table << 69 __soc_builtin_dtb_table_end = << 70 } << 71 /* we have to discard exit text and su << 72 __exittext_begin = .; << 73 .exit.text : << 74 { << 75 EXIT_TEXT << 76 } << 77 __exittext_end = .; << 78 << 79 __init_text_end = .; << 80 . = ALIGN(SECTION_ALIGN); << 81 #ifdef CONFIG_EFI << 82 . = ALIGN(PECOFF_SECTION_ALIGNMENT); << 83 __pecoff_text_end = .; << 84 #endif << 85 /* Start of init data section */ << 86 __init_data_begin = .; << 87 INIT_DATA_SECTION(16) 42 INIT_DATA_SECTION(16) 88 << 89 .init.pi : { << 90 KEEP(*(.init.pi*)) << 91 } << 92 << 93 .init.bss : { << 94 KEEP(*(.init.bss*)) /* fro << 95 } << 96 .exit.data : << 97 { << 98 EXIT_DATA << 99 } << 100 PERCPU_SECTION(L1_CACHE_BYTES) 43 PERCPU_SECTION(L1_CACHE_BYTES) 101 !! 44 /* Align to THREAD_SIZE rather than PAGE_SIZE here so any padding page 102 .rel.dyn : { !! 45 needed for the THREAD_SIZE aligned init_task gets freed after init */ 103 *(.rel.dyn*) !! 46 . = ALIGN(THREAD_SIZE); 104 } << 105 << 106 .rela.dyn : ALIGN(8) { << 107 __rela_dyn_start = .; << 108 *(.rela .rela*) << 109 __rela_dyn_end = .; << 110 } << 111 << 112 __init_data_end = .; << 113 << 114 . = ALIGN(8); << 115 .alternative : { << 116 __alt_start = .; << 117 KEEP(*(.alternative)) << 118 __alt_end = .; << 119 } << 120 __init_end = .; 47 __init_end = .; >> 48 /* Freed after init ends here */ 121 49 122 /* Start of data section */ !! 50 _sdata = .; /* Start of rw data section */ 123 _sdata = .; << 124 RO_DATA(SECTION_ALIGN) << 125 .srodata : { << 126 *(.srodata*) << 127 } << 128 << 129 . = ALIGN(SECTION_ALIGN); << 130 _data = .; 51 _data = .; >> 52 RW_DATA(L1_CACHE_BYTES, PAGE_SIZE, THREAD_SIZE) 131 53 132 RW_DATA(L1_CACHE_BYTES, PAGE_SIZE, THR !! 54 .got : { >> 55 *(.got) >> 56 } 133 .sdata : { 57 .sdata : { 134 __global_pointer$ = . + 0x800; !! 58 *(.sdata) 135 *(.sdata*) << 136 } 59 } >> 60 _edata = .; /* End of data section */ 137 61 138 .got : { *(.got*) } !! 62 BSS_SECTION(0, 0, 0) 139 << 140 #ifdef CONFIG_RELOCATABLE << 141 .data.rel : { *(.data.rel*) } << 142 .plt : { *(.plt) } << 143 .dynamic : { *(.dynamic) } << 144 .dynsym : { *(.dynsym) } << 145 .dynstr : { *(.dynstr) } << 146 .hash : { *(.hash) } << 147 .gnu.hash : { *(.gnu.hash) } << 148 #endif << 149 << 150 #ifdef CONFIG_EFI << 151 .pecoff_edata_padding : { BYTE(0); . = << 152 __pecoff_data_raw_size = ABSOLUTE(. - << 153 __pecoff_data_raw_end = ABSOLUTE(.); << 154 #endif << 155 << 156 /* End of data section */ << 157 _edata = .; << 158 << 159 BSS_SECTION(PAGE_SIZE, PAGE_SIZE, 0) << 160 << 161 #ifdef CONFIG_EFI << 162 . = ALIGN(PECOFF_SECTION_ALIGNMENT); << 163 __pecoff_data_virt_size = ABSOLUTE(. - << 164 __pecoff_data_virt_end = ABSOLUTE(.); << 165 #endif << 166 _end = .; 63 _end = .; 167 64 >> 65 .mdebug 0 : { >> 66 *(.mdebug) >> 67 } >> 68 .note 0 : { >> 69 *(.note) >> 70 } >> 71 168 STABS_DEBUG 72 STABS_DEBUG 169 DWARF_DEBUG 73 DWARF_DEBUG 170 ELF_DETAILS 74 ELF_DETAILS 171 .riscv.attributes 0 : { *(.riscv.attri << 172 75 173 DISCARDS 76 DISCARDS 174 } 77 } 175 #endif /* CONFIG_XIP_KERNEL */ <<
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.