1 /* SPDX-License-Identifier: GPL-2.0 */ 1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* !! 2 /* ld script for sparc32/sparc64 kernel */ 3 * ld script to make SuperH Linux kernel !! 3 4 * Written by Niibe Yutaka and Paul Mundt !! 4 #include <asm-generic/vmlinux.lds.h> 5 */ !! 5 6 OUTPUT_ARCH(sh) !! 6 #include <asm/page.h> 7 #define RUNTIME_DISCARD_EXIT << 8 #include <asm/thread_info.h> 7 #include <asm/thread_info.h> 9 #include <asm/cache.h> << 10 #include <asm/vmlinux.lds.h> << 11 8 12 #ifdef CONFIG_PMB !! 9 #ifdef CONFIG_SPARC32 13 #define MEMORY_OFFSET 0 !! 10 #define INITIAL_ADDRESS 0x10000 + SIZEOF_HEADERS >> 11 #define TEXTSTART 0xf0004000 >> 12 >> 13 #define SMP_CACHE_BYTES_SHIFT 5 >> 14 14 #else 15 #else 15 #define MEMORY_OFFSET __MEMORY_START !! 16 #define SMP_CACHE_BYTES_SHIFT 6 >> 17 #define INITIAL_ADDRESS 0x4000 >> 18 #define TEXTSTART 0x0000000000404000 >> 19 16 #endif 20 #endif 17 21 18 ENTRY(_start) !! 22 #define SMP_CACHE_BYTES (1 << SMP_CACHE_BYTES_SHIFT) 19 SECTIONS << 20 { << 21 . = PAGE_OFFSET + MEMORY_OFFSET + PHYS << 22 23 23 _text = .; /* Text and re !! 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) >> 34 jiffies = jiffies_64; >> 35 #endif 24 36 25 .empty_zero_page : AT(ADDR(.empty_zero !! 37 #ifdef CONFIG_SPARC64 26 *(.empty_zero_page) !! 38 ASSERT((swapper_tsb == 0x0000000000408000), "Error: sparc64 early assembler too large") 27 } = 0 !! 39 #endif 28 40 29 .text : AT(ADDR(.text)) { !! 41 SECTIONS >> 42 { >> 43 #ifdef CONFIG_SPARC64 >> 44 swapper_pg_dir = 0x0000000000402000; >> 45 #endif >> 46 . = INITIAL_ADDRESS; >> 47 .text TEXTSTART : >> 48 { >> 49 _text = .; 30 HEAD_TEXT 50 HEAD_TEXT 31 TEXT_TEXT 51 TEXT_TEXT 32 SCHED_TEXT 52 SCHED_TEXT 33 LOCK_TEXT 53 LOCK_TEXT 34 KPROBES_TEXT 54 KPROBES_TEXT 35 IRQENTRY_TEXT 55 IRQENTRY_TEXT 36 SOFTIRQENTRY_TEXT 56 SOFTIRQENTRY_TEXT 37 *(.fixup) << 38 *(.gnu.warning) 57 *(.gnu.warning) 39 _etext = .; /* End !! 58 } = 0 40 } = 0x0009 !! 59 _etext = .; 41 60 42 EXCEPTION_TABLE(16) !! 61 RO_DATA(PAGE_SIZE) 43 62 >> 63 /* Start of data section */ 44 _sdata = .; 64 _sdata = .; 45 RO_DATA(PAGE_SIZE) !! 65 46 RW_DATA(L1_CACHE_BYTES, PAGE_SIZE, THR !! 66 .data1 : { >> 67 *(.data1) >> 68 } >> 69 RW_DATA(SMP_CACHE_BYTES, 0, THREAD_SIZE) >> 70 >> 71 /* End of data section */ 47 _edata = .; 72 _edata = .; 48 73 49 DWARF_EH_FRAME !! 74 .fixup : { >> 75 __start___fixup = .; >> 76 *(.fixup) >> 77 __stop___fixup = .; >> 78 } >> 79 EXCEPTION_TABLE(16) 50 80 51 . = ALIGN(PAGE_SIZE); /* Ini !! 81 . = ALIGN(PAGE_SIZE); 52 __init_begin = .; !! 82 __init_begin = ALIGN(PAGE_SIZE); 53 INIT_TEXT_SECTION(PAGE_SIZE) 83 INIT_TEXT_SECTION(PAGE_SIZE) >> 84 __init_text_end = .; 54 INIT_DATA_SECTION(16) 85 INIT_DATA_SECTION(16) 55 86 56 . = ALIGN(4); 87 . = ALIGN(4); 57 .machvec.init : AT(ADDR(.machvec.init) !! 88 .tsb_ldquad_phys_patch : { 58 __machvec_start = .; !! 89 __tsb_ldquad_phys_patch = .; 59 *(.machvec.init) !! 90 *(.tsb_ldquad_phys_patch) 60 __machvec_end = .; !! 91 __tsb_ldquad_phys_patch_end = .; >> 92 } >> 93 >> 94 .tsb_phys_patch : { >> 95 __tsb_phys_patch = .; >> 96 *(.tsb_phys_patch) >> 97 __tsb_phys_patch_end = .; >> 98 } >> 99 >> 100 .cpuid_patch : { >> 101 __cpuid_patch = .; >> 102 *(.cpuid_patch) >> 103 __cpuid_patch_end = .; 61 } 104 } 62 105 63 PERCPU_SECTION(L1_CACHE_BYTES) !! 106 .sun4v_1insn_patch : { 64 !! 107 __sun4v_1insn_patch = .; 65 /* !! 108 *(.sun4v_1insn_patch) 66 * .exit.text is discarded at runtime, !! 109 __sun4v_1insn_patch_end = .; 67 * references from __bug_table !! 110 } 68 */ !! 111 .sun4v_2insn_patch : { 69 .exit.text : AT(ADDR(.exit.text)) { EX !! 112 __sun4v_2insn_patch = .; 70 .exit.data : AT(ADDR(.exit.data)) { EX !! 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 = .; >> 170 } >> 171 PERCPU_SECTION(SMP_CACHE_BYTES) >> 172 >> 173 . = ALIGN(PAGE_SIZE); >> 174 .exit.text : { >> 175 EXIT_TEXT >> 176 } >> 177 >> 178 .exit.data : { >> 179 EXIT_DATA >> 180 } 71 181 72 . = ALIGN(PAGE_SIZE); 182 . = ALIGN(PAGE_SIZE); 73 __init_end = .; 183 __init_end = .; 74 BSS_SECTION(0, PAGE_SIZE, 4) !! 184 BSS_SECTION(0, 0, 0) 75 _end = . ; 185 _end = . ; 76 186 77 STABS_DEBUG 187 STABS_DEBUG 78 DWARF_DEBUG 188 DWARF_DEBUG 79 ELF_DETAILS 189 ELF_DETAILS 80 190 81 DISCARDS 191 DISCARDS 82 } 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.