1 /* SPDX-License-Identifier: GPL-2.0-only */ !! 1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* !! 2 3 * Copyright (C) 2004, 2007-2010, 2011-2012 Sy !! 3 #define EMITS_PT_NOTE 4 */ !! 4 #define RO_EXCEPTION_TABLE_ALIGN 16 5 5 6 #include <asm-generic/vmlinux.lds.h> 6 #include <asm-generic/vmlinux.lds.h> >> 7 #include <asm/thread_info.h> 7 #include <asm/cache.h> 8 #include <asm/cache.h> 8 #include <asm/page.h> 9 #include <asm/page.h> 9 #include <asm/thread_info.h> !! 10 #include <asm/setup.h> 10 11 11 OUTPUT_ARCH(arc) !! 12 OUTPUT_FORMAT("elf64-alpha") 12 ENTRY(res_service) !! 13 OUTPUT_ARCH(alpha) 13 !! 14 ENTRY(__start) 14 #ifdef CONFIG_CPU_BIG_ENDIAN !! 15 PHDRS { text PT_LOAD; note PT_NOTE; } 15 jiffies = jiffies_64 + 4; << 16 #else << 17 jiffies = jiffies_64; 16 jiffies = jiffies_64; 18 #endif << 19 << 20 SECTIONS 17 SECTIONS 21 { 18 { 22 /* !! 19 #ifdef CONFIG_ALPHA_LEGACY_START_ADDRESS 23 * ICCM starts at 0x8000_0000. So if k !! 20 . = 0xfffffc0000310000; 24 * address, make sure peripheral at 0x !! 21 #else 25 * Essentially vector is also in ICCM. !! 22 . = 0xfffffc0001010000; 26 */ << 27 << 28 . = CONFIG_LINUX_LINK_BASE; << 29 << 30 _int_vec_base_lds = .; << 31 .vector : { << 32 *(.vector) << 33 . = ALIGN(PAGE_SIZE); << 34 } << 35 << 36 #ifdef CONFIG_ARC_HAS_ICCM << 37 .text.arcfp : { << 38 *(.text.arcfp) << 39 . = ALIGN(CONFIG_ARC_ICCM_SZ * << 40 } << 41 #endif 23 #endif 42 24 43 /* !! 25 _text = .; /* Text and read-only data */ 44 * The reason for having a separate su << 45 * prevent objdump from including it i << 46 * << 47 * Reason for having .init.ramfs above << 48 * binary blob is tucked away to one s << 49 * between .init.text and .text, avoid << 50 * errors because of calls from .init. << 51 * Yes such calls do exist. e.g. << 52 * decompress_inflate.c:gunzip( ) << 53 */ << 54 << 55 __init_begin = .; << 56 << 57 .init.ramfs : { INIT_RAM_FS } << 58 << 59 . = ALIGN(PAGE_SIZE); << 60 << 61 HEAD_TEXT_SECTION << 62 INIT_TEXT_SECTION(L1_CACHE_BYTES) << 63 << 64 /* INIT_DATA_SECTION open-coded: speci << 65 .init.data : { << 66 INIT_DATA << 67 INIT_SETUP(L1_CACHE_BYTES) << 68 INIT_CALLS << 69 CON_INITCALL << 70 } << 71 << 72 .init.arch.info : { << 73 __arch_info_begin = .; << 74 *(.arch.info.init) << 75 __arch_info_end = .; << 76 } << 77 << 78 PERCPU_SECTION(L1_CACHE_BYTES) << 79 << 80 . = ALIGN(PAGE_SIZE); << 81 __init_end = .; << 82 << 83 .text : { 26 .text : { 84 _text = .; !! 27 HEAD_TEXT 85 _stext = .; << 86 TEXT_TEXT 28 TEXT_TEXT 87 SCHED_TEXT 29 SCHED_TEXT 88 LOCK_TEXT 30 LOCK_TEXT 89 KPROBES_TEXT << 90 IRQENTRY_TEXT << 91 SOFTIRQENTRY_TEXT << 92 *(.fixup) 31 *(.fixup) 93 *(.gnu.warning) 32 *(.gnu.warning) 94 } !! 33 } :text 95 EXCEPTION_TABLE(L1_CACHE_BYTES) !! 34 swapper_pg_dir = SWAPPER_PGD; 96 _etext = .; !! 35 _etext = .; /* End of text section */ 97 !! 36 98 _sdata = .; !! 37 RO_DATA(4096) 99 RO_DATA(PAGE_SIZE) !! 38 >> 39 /* Will be freed after init */ >> 40 __init_begin = ALIGN(PAGE_SIZE); >> 41 INIT_TEXT_SECTION(PAGE_SIZE) >> 42 INIT_DATA_SECTION(16) >> 43 PERCPU_SECTION(L1_CACHE_BYTES) >> 44 /* Align to THREAD_SIZE rather than PAGE_SIZE here so any padding page >> 45 needed for the THREAD_SIZE aligned init_task gets freed after init */ >> 46 . = ALIGN(THREAD_SIZE); >> 47 __init_end = .; >> 48 /* Freed after init ends here */ 100 49 101 /* !! 50 _sdata = .; /* Start of rw data section */ 102 * 1. this is .data essentially !! 51 _data = .; 103 * 2. THREAD_SIZE for init.task, must << 104 */ << 105 RW_DATA(L1_CACHE_BYTES, PAGE_SIZE, THR 52 RW_DATA(L1_CACHE_BYTES, PAGE_SIZE, THREAD_SIZE) 106 53 107 _edata = .; !! 54 .got : { >> 55 *(.got) >> 56 } >> 57 .sdata : { >> 58 *(.sdata) >> 59 } >> 60 _edata = .; /* End of data section */ 108 61 109 BSS_SECTION(4, 4, 4) !! 62 BSS_SECTION(0, 0, 0) >> 63 _end = .; 110 64 111 #ifdef CONFIG_ARC_DW2_UNWIND !! 65 .mdebug 0 : { 112 . = ALIGN(PAGE_SIZE); !! 66 *(.mdebug) 113 .eh_frame : { !! 67 } 114 __start_unwind = .; !! 68 .note 0 : { 115 *(.eh_frame) !! 69 *(.note) 116 __end_unwind = .; << 117 } 70 } 118 #else << 119 /DISCARD/ : { *(.eh_frame) } << 120 #endif << 121 << 122 . = ALIGN(PAGE_SIZE); << 123 _end = . ; << 124 71 125 STABS_DEBUG 72 STABS_DEBUG >> 73 DWARF_DEBUG 126 ELF_DETAILS 74 ELF_DETAILS 127 DISCARDS << 128 75 129 .arcextmap 0 : { !! 76 DISCARDS 130 *(.gnu.linkonce.arcextmap.*) << 131 *(.arcextmap.*) << 132 } << 133 << 134 #ifndef CONFIG_DEBUG_INFO << 135 /DISCARD/ : { *(.debug_frame) } << 136 /DISCARD/ : { *(.debug_aranges) } << 137 /DISCARD/ : { *(.debug_pubnames) } << 138 /DISCARD/ : { *(.debug_info) } << 139 /DISCARD/ : { *(.debug_abbrev) } << 140 /DISCARD/ : { *(.debug_line) } << 141 /DISCARD/ : { *(.debug_str) } << 142 /DISCARD/ : { *(.debug_loc) } << 143 /DISCARD/ : { *(.debug_macinfo) } << 144 /DISCARD/ : { *(.debug_ranges) } << 145 #endif << 146 << 147 #ifdef CONFIG_ARC_HAS_DCCM << 148 . = CONFIG_ARC_DCCM_BASE; << 149 __arc_dccm_base = .; << 150 .data.arcfp : { << 151 *(.data.arcfp) << 152 } << 153 . = ALIGN(CONFIG_ARC_DCCM_SZ * 1024); << 154 #endif << 155 } 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.