1 /* SPDX-License-Identifier: GPL-2.0 */ 1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* Kernel link layout for various "sections !! 2 /* ld script for sparc32/sparc64 kernel */ 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 << 21 #define CC_USING_PATCHABLE_FUNCTION_ENTRY << 22 #define RO_EXCEPTION_TABLE_ALIGN 8 << 23 3 24 #include <asm-generic/vmlinux.lds.h> 4 #include <asm-generic/vmlinux.lds.h> 25 5 26 /* needed for the processor specific cache ali << 27 #include <asm/cache.h> << 28 #include <asm/page.h> 6 #include <asm/page.h> 29 #include <asm/asm-offsets.h> << 30 #include <asm/thread_info.h> 7 #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 8 41 #define EXIT_TEXT_SECTIONS() .exit.text : { !! 9 #ifdef CONFIG_SPARC32 42 #if !defined(CONFIG_64BIT) || defined(CONFIG_M !! 10 #define INITIAL_ADDRESS 0x10000 + SIZEOF_HEADERS 43 #define MLONGCALL_KEEP(x) !! 11 #define TEXTSTART 0xf0004000 44 #define MLONGCALL_DISCARD(x) x !! 12 >> 13 #define SMP_CACHE_BYTES_SHIFT 5 >> 14 45 #else 15 #else 46 #define MLONGCALL_KEEP(x) x !! 16 #define SMP_CACHE_BYTES_SHIFT 6 47 #define MLONGCALL_DISCARD(x) !! 17 #define INITIAL_ADDRESS 0x4000 >> 18 #define TEXTSTART 0x0000000000404000 >> 19 48 #endif 20 #endif 49 21 50 ENTRY(parisc_kernel_start) !! 22 #define SMP_CACHE_BYTES (1 << SMP_CACHE_BYTES_SHIFT) 51 #ifndef CONFIG_64BIT !! 23 >> 24 #ifdef CONFIG_SPARC32 >> 25 OUTPUT_FORMAT("elf32-sparc", "elf32-sparc", "elf32-sparc") >> 26 OUTPUT_ARCH(sparc) >> 27 ENTRY(_start) 52 jiffies = jiffies_64 + 4; 28 jiffies = jiffies_64 + 4; 53 #else 29 #else >> 30 /* sparc64 */ >> 31 OUTPUT_FORMAT("elf64-sparc", "elf64-sparc", "elf64-sparc") >> 32 OUTPUT_ARCH(sparc:v9a) >> 33 ENTRY(_start) 54 jiffies = jiffies_64; 34 jiffies = jiffies_64; 55 #endif 35 #endif 56 SECTIONS << 57 { << 58 . = KERNEL_BINARY_TEXT_START; << 59 36 60 __init_begin = .; !! 37 #ifdef CONFIG_SPARC64 61 HEAD_TEXT_SECTION !! 38 ASSERT((swapper_tsb == 0x0000000000408000), "Error: sparc64 early assembler too large") 62 MLONGCALL_DISCARD(INIT_TEXT_SECTION(8) !! 39 #endif 63 40 64 . = ALIGN(PAGE_SIZE); !! 41 SECTIONS 65 INIT_DATA_SECTION(PAGE_SIZE) !! 42 { 66 MLONGCALL_DISCARD(EXIT_TEXT_SECTIONS() !! 43 #ifdef CONFIG_SPARC64 67 .exit.data : !! 44 swapper_pg_dir = 0x0000000000402000; >> 45 #endif >> 46 . = INITIAL_ADDRESS; >> 47 .text TEXTSTART : 68 { 48 { 69 EXIT_DATA !! 49 _text = .; 70 } !! 50 HEAD_TEXT 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 << 82 _text = .; /* Text and re << 83 _stext = .; << 84 MLONGCALL_KEEP(INIT_TEXT_SECTION(8)) << 85 .text ALIGN(PAGE_SIZE) : { << 86 TEXT_TEXT 51 TEXT_TEXT 87 LOCK_TEXT << 88 SCHED_TEXT 52 SCHED_TEXT >> 53 LOCK_TEXT 89 KPROBES_TEXT 54 KPROBES_TEXT 90 IRQENTRY_TEXT 55 IRQENTRY_TEXT 91 SOFTIRQENTRY_TEXT 56 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) << 100 *(.lock.text) /* out << 101 *(.gnu.warning) 57 *(.gnu.warning) 102 } !! 58 } = 0 103 MLONGCALL_KEEP(EXIT_TEXT_SECTIONS()) << 104 . = ALIGN(PAGE_SIZE); << 105 _etext = .; 59 _etext = .; 106 /* End of text section */ !! 60 >> 61 RO_DATA(PAGE_SIZE) 107 62 108 /* Start of data section */ 63 /* Start of data section */ 109 _sdata = .; 64 _sdata = .; 110 65 111 /* Architecturally we need to keep __g !! 66 .data1 : { 112 * in front of RO_DATA() which stores !! 67 *(.data1) 113 * and ftrace symbols. */ << 114 #ifdef CONFIG_64BIT << 115 . = ALIGN(16); << 116 /* Linkage tables */ << 117 .opd : { << 118 __start_opd = .; << 119 *(.opd) << 120 __end_opd = .; << 121 } PROVIDE (__gp = .); << 122 .plt : { << 123 *(.plt) << 124 } 68 } 125 .dlt : { !! 69 RW_DATA(SMP_CACHE_BYTES, 0, THREAD_SIZE) 126 *(.dlt) !! 70 >> 71 /* End of data section */ >> 72 _edata = .; >> 73 >> 74 .fixup : { >> 75 __start___fixup = .; >> 76 *(.fixup) >> 77 __stop___fixup = .; 127 } 78 } 128 #endif !! 79 EXCEPTION_TABLE(16) 129 80 130 RO_DATA(PAGE_SIZE) !! 81 . = ALIGN(PAGE_SIZE); >> 82 __init_begin = ALIGN(PAGE_SIZE); >> 83 INIT_TEXT_SECTION(PAGE_SIZE) >> 84 __init_text_end = .; >> 85 INIT_DATA_SECTION(16) 131 86 132 /* unwind info */ << 133 . = ALIGN(4); 87 . = ALIGN(4); 134 .PARISC.unwind : { !! 88 .tsb_ldquad_phys_patch : { 135 __start___unwind = .; !! 89 __tsb_ldquad_phys_patch = .; 136 *(.PARISC.unwind) !! 90 *(.tsb_ldquad_phys_patch) 137 __stop___unwind = .; !! 91 __tsb_ldquad_phys_patch_end = .; 138 } !! 92 } 139 !! 93 140 /* writeable */ !! 94 .tsb_phys_patch : { 141 /* Make sure this is page aligned so !! 95 __tsb_phys_patch = .; 142 * that we can properly leave these !! 96 *(.tsb_phys_patch) 143 * as writable !! 97 __tsb_phys_patch_end = .; 144 */ !! 98 } 145 . = ALIGN(HUGEPAGE_SIZE); !! 99 146 data_start = .; !! 100 .cpuid_patch : { 147 !! 101 __cpuid_patch = .; 148 /* Data */ !! 102 *(.cpuid_patch) 149 RW_DATA(L1_CACHE_BYTES, PAGE_SIZE, PAG !! 103 __cpuid_patch_end = .; 150 !! 104 } 151 /* PA-RISC locks requires 16-byte alig !! 105 152 . = ALIGN(16); !! 106 .sun4v_1insn_patch : { 153 .data..lock_aligned : { !! 107 __sun4v_1insn_patch = .; 154 *(.data..lock_aligned) !! 108 *(.sun4v_1insn_patch) >> 109 __sun4v_1insn_patch_end = .; >> 110 } >> 111 .sun4v_2insn_patch : { >> 112 __sun4v_2insn_patch = .; >> 113 *(.sun4v_2insn_patch) >> 114 __sun4v_2insn_patch_end = .; >> 115 } >> 116 .leon_1insn_patch : { >> 117 __leon_1insn_patch = .; >> 118 *(.leon_1insn_patch) >> 119 __leon_1insn_patch_end = .; >> 120 } >> 121 .swapper_tsb_phys_patch : { >> 122 __swapper_tsb_phys_patch = .; >> 123 *(.swapper_tsb_phys_patch) >> 124 __swapper_tsb_phys_patch_end = .; >> 125 } >> 126 .swapper_4m_tsb_phys_patch : { >> 127 __swapper_4m_tsb_phys_patch = .; >> 128 *(.swapper_4m_tsb_phys_patch) >> 129 __swapper_4m_tsb_phys_patch_end = .; >> 130 } >> 131 .popc_3insn_patch : { >> 132 __popc_3insn_patch = .; >> 133 *(.popc_3insn_patch) >> 134 __popc_3insn_patch_end = .; >> 135 } >> 136 .popc_6insn_patch : { >> 137 __popc_6insn_patch = .; >> 138 *(.popc_6insn_patch) >> 139 __popc_6insn_patch_end = .; >> 140 } >> 141 .pause_3insn_patch : { >> 142 __pause_3insn_patch = .; >> 143 *(.pause_3insn_patch) >> 144 __pause_3insn_patch_end = .; >> 145 } >> 146 .sun_m7_1insn_patch : { >> 147 __sun_m7_1insn_patch = .; >> 148 *(.sun_m7_1insn_patch) >> 149 __sun_m7_1insn_patch_end = .; >> 150 } >> 151 .sun_m7_2insn_patch : { >> 152 __sun_m7_2insn_patch = .; >> 153 *(.sun_m7_2insn_patch) >> 154 __sun_m7_2insn_patch_end = .; >> 155 } >> 156 .get_tick_patch : { >> 157 __get_tick_patch = .; >> 158 *(.get_tick_patch) >> 159 __get_tick_patch_end = .; >> 160 } >> 161 .pud_huge_patch : { >> 162 __pud_huge_patch = .; >> 163 *(.pud_huge_patch) >> 164 __pud_huge_patch_end = .; >> 165 } >> 166 .fast_win_ctrl_1insn_patch : { >> 167 __fast_win_ctrl_1insn_patch = .; >> 168 *(.fast_win_ctrl_1insn_patch) >> 169 __fast_win_ctrl_1insn_patch_end = .; 155 } 170 } >> 171 PERCPU_SECTION(SMP_CACHE_BYTES) 156 172 157 /* End of data section */ << 158 . = ALIGN(PAGE_SIZE); 173 . = ALIGN(PAGE_SIZE); 159 _edata = .; !! 174 .exit.text : { >> 175 EXIT_TEXT >> 176 } 160 177 161 /* BSS */ !! 178 .exit.data : { 162 BSS_SECTION(PAGE_SIZE, PAGE_SIZE, PAGE !! 179 EXIT_DATA >> 180 } 163 181 164 . = ALIGN(HUGEPAGE_SIZE); !! 182 . = ALIGN(PAGE_SIZE); >> 183 __init_end = .; >> 184 BSS_SECTION(0, 0, 0) 165 _end = . ; 185 _end = . ; 166 186 167 STABS_DEBUG 187 STABS_DEBUG >> 188 DWARF_DEBUG 168 ELF_DETAILS 189 ELF_DETAILS 169 .note 0 : { *(.note) } << 170 190 171 /* Sections to be discarded */ << 172 DISCARDS 191 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 } 192 }
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.