1 /* SPDX-License-Identifier: GPL-2.0-only */ !! 1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* !! 2 /* ld script for sparc32/sparc64 kernel */ 3 * Linker script for Hexagon kernel << 4 * << 5 * Copyright (c) 2010-2014, The Linux Foundati << 6 */ << 7 3 8 #include <asm-generic/vmlinux.lds.h> 4 #include <asm-generic/vmlinux.lds.h> 9 #include <asm/asm-offsets.h> /* Most of th << 10 #include <asm/mem-layout.h> /* except for << 11 #include <asm/cache.h> /* and now we << 12 #include <asm/thread_info.h> /* and we nee << 13 5 14 OUTPUT_ARCH(hexagon) !! 6 #include <asm/page.h> 15 ENTRY(stext) !! 7 #include <asm/thread_info.h> 16 8 >> 9 #ifdef CONFIG_SPARC32 >> 10 #define INITIAL_ADDRESS 0x10000 + SIZEOF_HEADERS >> 11 #define TEXTSTART 0xf0004000 >> 12 >> 13 #define SMP_CACHE_BYTES_SHIFT 5 >> 14 >> 15 #else >> 16 #define SMP_CACHE_BYTES_SHIFT 6 >> 17 #define INITIAL_ADDRESS 0x4000 >> 18 #define TEXTSTART 0x0000000000404000 >> 19 >> 20 #endif >> 21 >> 22 #define SMP_CACHE_BYTES (1 << SMP_CACHE_BYTES_SHIFT) >> 23 >> 24 #ifdef CONFIG_SPARC32 >> 25 OUTPUT_FORMAT("elf32-sparc", "elf32-sparc", "elf32-sparc") >> 26 OUTPUT_ARCH(sparc) >> 27 ENTRY(_start) >> 28 jiffies = jiffies_64 + 4; >> 29 #else >> 30 /* sparc64 */ >> 31 OUTPUT_FORMAT("elf64-sparc", "elf64-sparc", "elf64-sparc") >> 32 OUTPUT_ARCH(sparc:v9a) >> 33 ENTRY(_start) 17 jiffies = jiffies_64; 34 jiffies = jiffies_64; >> 35 #endif 18 36 19 /* !! 37 #ifdef CONFIG_SPARC64 20 See asm-generic/vmlinux.lds.h for expansion of !! 38 ASSERT((swapper_tsb == 0x0000000000408000), "Error: sparc64 early assembler too large") 21 See asm-generic/sections.h for seemingly requi !! 39 #endif 22 */ << 23 << 24 #define PAGE_SIZE _PAGE_SIZE << 25 40 26 SECTIONS 41 SECTIONS 27 { 42 { 28 . = PAGE_OFFSET; !! 43 #ifdef CONFIG_SPARC64 29 !! 44 swapper_pg_dir = 0x0000000000402000; 30 __init_begin = .; !! 45 #endif 31 HEAD_TEXT_SECTION !! 46 . = INITIAL_ADDRESS; 32 INIT_TEXT_SECTION(PAGE_SIZE) !! 47 .text TEXTSTART : 33 PERCPU_SECTION(L1_CACHE_BYTES) !! 48 { 34 __init_end = .; << 35 << 36 . = ALIGN(_PAGE_SIZE); << 37 _stext = .; << 38 .text : AT(ADDR(.text)) { << 39 _text = .; 49 _text = .; >> 50 HEAD_TEXT 40 TEXT_TEXT 51 TEXT_TEXT 41 IRQENTRY_TEXT << 42 SOFTIRQENTRY_TEXT << 43 SCHED_TEXT 52 SCHED_TEXT >> 53 CPUIDLE_TEXT 44 LOCK_TEXT 54 LOCK_TEXT 45 KPROBES_TEXT 55 KPROBES_TEXT 46 *(.fixup) !! 56 IRQENTRY_TEXT 47 } !! 57 SOFTIRQENTRY_TEXT >> 58 *(.gnu.warning) >> 59 } = 0 48 _etext = .; 60 _etext = .; 49 61 50 INIT_DATA_SECTION(PAGE_SIZE) !! 62 RO_DATA(PAGE_SIZE) 51 63 >> 64 /* Start of data section */ 52 _sdata = .; 65 _sdata = .; 53 RW_DATA(32,PAGE_SIZE,_THREAD_S !! 66 54 RO_DATA(PAGE_SIZE) !! 67 .data1 : { >> 68 *(.data1) >> 69 } >> 70 RW_DATA_SECTION(SMP_CACHE_BYTES, 0, THREAD_SIZE) >> 71 >> 72 /* End of data section */ 55 _edata = .; 73 _edata = .; 56 74 >> 75 .fixup : { >> 76 __start___fixup = .; >> 77 *(.fixup) >> 78 __stop___fixup = .; >> 79 } 57 EXCEPTION_TABLE(16) 80 EXCEPTION_TABLE(16) >> 81 NOTES 58 82 59 BSS_SECTION(_PAGE_SIZE, _PAGE_SIZE, _P !! 83 . = ALIGN(PAGE_SIZE); >> 84 __init_begin = ALIGN(PAGE_SIZE); >> 85 INIT_TEXT_SECTION(PAGE_SIZE) >> 86 __init_text_end = .; >> 87 INIT_DATA_SECTION(16) >> 88 >> 89 . = ALIGN(4); >> 90 .tsb_ldquad_phys_patch : { >> 91 __tsb_ldquad_phys_patch = .; >> 92 *(.tsb_ldquad_phys_patch) >> 93 __tsb_ldquad_phys_patch_end = .; >> 94 } >> 95 >> 96 .tsb_phys_patch : { >> 97 __tsb_phys_patch = .; >> 98 *(.tsb_phys_patch) >> 99 __tsb_phys_patch_end = .; >> 100 } 60 101 61 _end = .; !! 102 .cpuid_patch : { >> 103 __cpuid_patch = .; >> 104 *(.cpuid_patch) >> 105 __cpuid_patch_end = .; >> 106 } >> 107 >> 108 .sun4v_1insn_patch : { >> 109 __sun4v_1insn_patch = .; >> 110 *(.sun4v_1insn_patch) >> 111 __sun4v_1insn_patch_end = .; >> 112 } >> 113 .sun4v_2insn_patch : { >> 114 __sun4v_2insn_patch = .; >> 115 *(.sun4v_2insn_patch) >> 116 __sun4v_2insn_patch_end = .; >> 117 } >> 118 .leon_1insn_patch : { >> 119 __leon_1insn_patch = .; >> 120 *(.leon_1insn_patch) >> 121 __leon_1insn_patch_end = .; >> 122 } >> 123 .swapper_tsb_phys_patch : { >> 124 __swapper_tsb_phys_patch = .; >> 125 *(.swapper_tsb_phys_patch) >> 126 __swapper_tsb_phys_patch_end = .; >> 127 } >> 128 .swapper_4m_tsb_phys_patch : { >> 129 __swapper_4m_tsb_phys_patch = .; >> 130 *(.swapper_4m_tsb_phys_patch) >> 131 __swapper_4m_tsb_phys_patch_end = .; >> 132 } >> 133 .popc_3insn_patch : { >> 134 __popc_3insn_patch = .; >> 135 *(.popc_3insn_patch) >> 136 __popc_3insn_patch_end = .; >> 137 } >> 138 .popc_6insn_patch : { >> 139 __popc_6insn_patch = .; >> 140 *(.popc_6insn_patch) >> 141 __popc_6insn_patch_end = .; >> 142 } >> 143 .pause_3insn_patch : { >> 144 __pause_3insn_patch = .; >> 145 *(.pause_3insn_patch) >> 146 __pause_3insn_patch_end = .; >> 147 } >> 148 .sun_m7_2insn_patch : { >> 149 __sun_m7_2insn_patch = .; >> 150 *(.sun_m7_2insn_patch) >> 151 __sun_m7_2insn_patch_end = .; >> 152 } >> 153 .get_tick_patch : { >> 154 __get_tick_patch = .; >> 155 *(.get_tick_patch) >> 156 __get_tick_patch_end = .; >> 157 } >> 158 .pud_huge_patch : { >> 159 __pud_huge_patch = .; >> 160 *(.pud_huge_patch) >> 161 __pud_huge_patch_end = .; >> 162 } >> 163 .fast_win_ctrl_1insn_patch : { >> 164 __fast_win_ctrl_1insn_patch = .; >> 165 *(.fast_win_ctrl_1insn_patch) >> 166 __fast_win_ctrl_1insn_patch_end = .; >> 167 } >> 168 PERCPU_SECTION(SMP_CACHE_BYTES) >> 169 >> 170 . = ALIGN(PAGE_SIZE); >> 171 .exit.text : { >> 172 EXIT_TEXT >> 173 } >> 174 >> 175 .exit.data : { >> 176 EXIT_DATA >> 177 } >> 178 >> 179 . = ALIGN(PAGE_SIZE); >> 180 __init_end = .; >> 181 BSS_SECTION(0, 0, 0) >> 182 _end = . ; 62 183 63 STABS_DEBUG 184 STABS_DEBUG 64 DWARF_DEBUG 185 DWARF_DEBUG 65 ELF_DETAILS << 66 .hexagon.attributes 0 : { *(.hexagon.a << 67 186 68 DISCARDS 187 DISCARDS 69 } 188 }
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.