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