1 /* SPDX-License-Identifier: GPL-2.0 */ 1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* Kernel link layout for various "sections << 3 * << 4 * Copyright (C) 1999-2003 Matthew Wilcox < << 5 * Copyright (C) 2000-2003 Paul Bame <bame << 6 * Copyright (C) 2000 John Marvin <jsm at p << 7 * Copyright (C) 2000 Michael Ang <mang wit << 8 * Copyright (C) 2002 Randolph Chung <tausq << 9 * Copyright (C) 2003 James Bottomley <jejb << 10 * Copyright (C) 2006-2013 Helge Deller <del << 11 */ << 12 << 13 /* << 14 * Put page table entries (swapper_pg_dir) as << 15 * will ensure that it has .bss alignment (PAG << 16 */ << 17 #define BSS_FIRST_SECTIONS *(.data..vm0.p << 18 *(.data..vm0.p << 19 *(.data..vm0.p << 20 2 21 #define CC_USING_PATCHABLE_FUNCTION_ENTRY !! 3 #define EMITS_PT_NOTE 22 #define RO_EXCEPTION_TABLE_ALIGN 8 !! 4 #define RO_EXCEPTION_TABLE_ALIGN 16 23 5 24 #include <asm-generic/vmlinux.lds.h> 6 #include <asm-generic/vmlinux.lds.h> 25 !! 7 #include <asm/thread_info.h> 26 /* needed for the processor specific cache ali << 27 #include <asm/cache.h> 8 #include <asm/cache.h> 28 #include <asm/page.h> 9 #include <asm/page.h> 29 #include <asm/asm-offsets.h> !! 10 #include <asm/setup.h> 30 #include <asm/thread_info.h> << 31 << 32 /* ld script to make hppa Linux kernel */ << 33 #ifndef CONFIG_64BIT << 34 OUTPUT_FORMAT("elf32-hppa-linux") << 35 OUTPUT_ARCH(hppa) << 36 #else << 37 OUTPUT_FORMAT("elf64-hppa-linux") << 38 OUTPUT_ARCH(hppa:hppa2.0w) << 39 #endif << 40 << 41 #define EXIT_TEXT_SECTIONS() .exit.text : { << 42 #if !defined(CONFIG_64BIT) || defined(CONFIG_M << 43 #define MLONGCALL_KEEP(x) << 44 #define MLONGCALL_DISCARD(x) x << 45 #else << 46 #define MLONGCALL_KEEP(x) x << 47 #define MLONGCALL_DISCARD(x) << 48 #endif << 49 11 50 ENTRY(parisc_kernel_start) !! 12 OUTPUT_FORMAT("elf64-alpha") 51 #ifndef CONFIG_64BIT !! 13 OUTPUT_ARCH(alpha) 52 jiffies = jiffies_64 + 4; !! 14 ENTRY(__start) 53 #else !! 15 PHDRS { text PT_LOAD; note PT_NOTE; } 54 jiffies = jiffies_64; 16 jiffies = jiffies_64; 55 #endif << 56 SECTIONS 17 SECTIONS 57 { 18 { 58 . = KERNEL_BINARY_TEXT_START; !! 19 #ifdef CONFIG_ALPHA_LEGACY_START_ADDRESS 59 !! 20 . = 0xfffffc0000310000; 60 __init_begin = .; !! 21 #else 61 HEAD_TEXT_SECTION !! 22 . = 0xfffffc0001010000; 62 MLONGCALL_DISCARD(INIT_TEXT_SECTION(8) !! 23 #endif 63 << 64 . = ALIGN(PAGE_SIZE); << 65 INIT_DATA_SECTION(PAGE_SIZE) << 66 MLONGCALL_DISCARD(EXIT_TEXT_SECTIONS() << 67 .exit.data : << 68 { << 69 EXIT_DATA << 70 } << 71 PERCPU_SECTION(8) << 72 . = ALIGN(4); << 73 .altinstructions : { << 74 __alt_instructions = .; << 75 *(.altinstructions) << 76 __alt_instructions_end = .; << 77 } << 78 . = ALIGN(HUGEPAGE_SIZE); << 79 __init_end = .; << 80 /* freed after init ends here */ << 81 24 82 _text = .; /* Text and re !! 25 _text = .; /* Text and read-only data */ 83 _stext = .; !! 26 .text : { 84 MLONGCALL_KEEP(INIT_TEXT_SECTION(8)) !! 27 HEAD_TEXT 85 .text ALIGN(PAGE_SIZE) : { << 86 TEXT_TEXT 28 TEXT_TEXT 87 LOCK_TEXT << 88 SCHED_TEXT 29 SCHED_TEXT 89 KPROBES_TEXT !! 30 LOCK_TEXT 90 IRQENTRY_TEXT << 91 SOFTIRQENTRY_TEXT << 92 *(.text.do_softirq) << 93 *(.text.sys_exit) << 94 *(.text.do_sigaltstack) << 95 *(.text.do_fork) << 96 *(.text.div) << 97 *($$*) /* mil << 98 *(.text.*) << 99 *(.fixup) 31 *(.fixup) 100 *(.lock.text) /* out << 101 *(.gnu.warning) 32 *(.gnu.warning) 102 } !! 33 } :text 103 MLONGCALL_KEEP(EXIT_TEXT_SECTIONS()) !! 34 swapper_pg_dir = SWAPPER_PGD; 104 . = ALIGN(PAGE_SIZE); !! 35 _etext = .; /* End of text section */ 105 _etext = .; !! 36 106 /* End of text section */ !! 37 RO_DATA(4096) 107 !! 38 108 /* Start of data section */ !! 39 /* Will be freed after init */ 109 _sdata = .; !! 40 __init_begin = ALIGN(PAGE_SIZE); 110 !! 41 INIT_TEXT_SECTION(PAGE_SIZE) 111 /* Architecturally we need to keep __g !! 42 INIT_DATA_SECTION(16) 112 * in front of RO_DATA() which stores !! 43 PERCPU_SECTION(L1_CACHE_BYTES) 113 * and ftrace symbols. */ !! 44 /* Align to THREAD_SIZE rather than PAGE_SIZE here so any padding page 114 #ifdef CONFIG_64BIT !! 45 needed for the THREAD_SIZE aligned init_task gets freed after init */ 115 . = ALIGN(16); !! 46 . = ALIGN(THREAD_SIZE); 116 /* Linkage tables */ !! 47 __init_end = .; 117 .opd : { !! 48 /* Freed after init ends here */ 118 __start_opd = .; << 119 *(.opd) << 120 __end_opd = .; << 121 } PROVIDE (__gp = .); << 122 .plt : { << 123 *(.plt) << 124 } << 125 .dlt : { << 126 *(.dlt) << 127 } << 128 #endif << 129 49 130 RO_DATA(PAGE_SIZE) !! 50 _sdata = .; /* Start of rw data section */ >> 51 _data = .; >> 52 RW_DATA(L1_CACHE_BYTES, PAGE_SIZE, THREAD_SIZE) 131 53 132 /* unwind info */ !! 54 .got : { 133 . = ALIGN(4); !! 55 *(.got) 134 .PARISC.unwind : { << 135 __start___unwind = .; << 136 *(.PARISC.unwind) << 137 __stop___unwind = .; << 138 } 56 } 139 !! 57 .sdata : { 140 /* writeable */ !! 58 *(.sdata) 141 /* Make sure this is page aligned so << 142 * that we can properly leave these << 143 * as writable << 144 */ << 145 . = ALIGN(HUGEPAGE_SIZE); << 146 data_start = .; << 147 << 148 /* Data */ << 149 RW_DATA(L1_CACHE_BYTES, PAGE_SIZE, PAG << 150 << 151 /* PA-RISC locks requires 16-byte alig << 152 . = ALIGN(16); << 153 .data..lock_aligned : { << 154 *(.data..lock_aligned) << 155 } 59 } >> 60 _edata = .; /* End of data section */ 156 61 157 /* End of data section */ !! 62 BSS_SECTION(0, 0, 0) 158 . = ALIGN(PAGE_SIZE); !! 63 _end = .; 159 _edata = .; << 160 64 161 /* BSS */ !! 65 .mdebug 0 : { 162 BSS_SECTION(PAGE_SIZE, PAGE_SIZE, PAGE !! 66 *(.mdebug) 163 !! 67 } 164 . = ALIGN(HUGEPAGE_SIZE); !! 68 .note 0 : { 165 _end = . ; !! 69 *(.note) >> 70 } 166 71 167 STABS_DEBUG 72 STABS_DEBUG >> 73 DWARF_DEBUG 168 ELF_DETAILS 74 ELF_DETAILS 169 .note 0 : { *(.note) } << 170 75 171 /* Sections to be discarded */ << 172 DISCARDS 76 DISCARDS 173 /DISCARD/ : { << 174 #ifdef CONFIG_64BIT << 175 /* temporary hack until binuti << 176 * for static binaries << 177 */ << 178 *(.interp) << 179 *(.dynsym) << 180 *(.dynstr) << 181 *(.dynamic) << 182 *(.hash) << 183 *(.gnu.hash) << 184 #endif << 185 } << 186 } 77 }
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.