1 /* SPDX-License-Identifier: GPL-2.0-only */ !! 1 /* ld script to make UltraLinux kernel */ 2 /* << 3 * Copyright (C) 2004, 2007-2010, 2011-2012 Sy << 4 */ << 5 2 6 #include <asm-generic/vmlinux.lds.h> 3 #include <asm-generic/vmlinux.lds.h> 7 #include <asm/cache.h> << 8 #include <asm/page.h> << 9 #include <asm/thread_info.h> << 10 << 11 OUTPUT_ARCH(arc) << 12 ENTRY(res_service) << 13 << 14 #ifdef CONFIG_CPU_BIG_ENDIAN << 15 jiffies = jiffies_64 + 4; << 16 #else << 17 jiffies = jiffies_64; << 18 #endif << 19 4 >> 5 OUTPUT_FORMAT("elf64-sparc", "elf64-sparc", "elf64-sparc") >> 6 OUTPUT_ARCH(sparc:v9a) >> 7 ENTRY(_start) >> 8 >> 9 jiffies = jiffies_64; 20 SECTIONS 10 SECTIONS 21 { 11 { 22 /* !! 12 swapper_pmd_dir = 0x0000000000402000; 23 * ICCM starts at 0x8000_0000. So if k !! 13 empty_pg_dir = 0x0000000000403000; 24 * address, make sure peripheral at 0x !! 14 . = 0x4000; 25 * Essentially vector is also in ICCM. !! 15 .text 0x0000000000404000 : 26 */ !! 16 { 27 !! 17 *(.text) 28 . = CONFIG_LINUX_LINK_BASE; !! 18 *(.gnu.warning) 29 !! 19 } =0 30 _int_vec_base_lds = .; !! 20 _etext = .; 31 .vector : { !! 21 PROVIDE (etext = .); 32 *(.vector) !! 22 33 . = ALIGN(PAGE_SIZE); !! 23 RODATA 34 } !! 24 35 !! 25 .data : 36 #ifdef CONFIG_ARC_HAS_ICCM !! 26 { 37 .text.arcfp : { !! 27 *(.data) 38 *(.text.arcfp) !! 28 CONSTRUCTORS 39 . = ALIGN(CONFIG_ARC_ICCM_SZ * !! 29 } 40 } !! 30 .data1 : { *(.data1) } 41 #endif !! 31 . = ALIGN(64); 42 !! 32 .data.cacheline_aligned : { *(.data.cacheline_aligned) } 43 /* !! 33 _edata = .; 44 * The reason for having a separate su !! 34 PROVIDE (edata = .); 45 * prevent objdump from including it i !! 35 .fixup : { *(.fixup) } 46 * !! 36 47 * Reason for having .init.ramfs above !! 37 . = ALIGN(16); 48 * binary blob is tucked away to one s !! 38 __start___ex_table = .; 49 * between .init.text and .text, avoid !! 39 __ex_table : { *(__ex_table) } 50 * errors because of calls from .init. !! 40 __stop___ex_table = .; 51 * Yes such calls do exist. e.g. !! 41 52 * decompress_inflate.c:gunzip( ) !! 42 . = ALIGN(8192); 53 */ !! 43 __init_begin = .; 54 !! 44 .init.text : { 55 __init_begin = .; !! 45 _sinittext = .; 56 !! 46 *(.init.text) 57 .init.ramfs : { INIT_RAM_FS } !! 47 _einittext = .; 58 !! 48 } 59 . = ALIGN(PAGE_SIZE); !! 49 .init.data : { *(.init.data) } 60 !! 50 . = ALIGN(16); 61 HEAD_TEXT_SECTION !! 51 __setup_start = .; 62 INIT_TEXT_SECTION(L1_CACHE_BYTES) !! 52 .init.setup : { *(.init.setup) } 63 !! 53 __setup_end = .; 64 /* INIT_DATA_SECTION open-coded: speci !! 54 __start___param = .; 65 .init.data : { !! 55 __param : { *(__param) } 66 INIT_DATA !! 56 __stop___param = .; 67 INIT_SETUP(L1_CACHE_BYTES) !! 57 __initcall_start = .; 68 INIT_CALLS !! 58 .initcall.init : { 69 CON_INITCALL !! 59 *(.initcall1.init) 70 } !! 60 *(.initcall2.init) 71 !! 61 *(.initcall3.init) 72 .init.arch.info : { !! 62 *(.initcall4.init) 73 __arch_info_begin = .; !! 63 *(.initcall5.init) 74 *(.arch.info.init) !! 64 *(.initcall6.init) 75 __arch_info_end = .; !! 65 *(.initcall7.init) 76 } !! 66 } 77 !! 67 __initcall_end = .; 78 PERCPU_SECTION(L1_CACHE_BYTES) !! 68 __con_initcall_start = .; 79 !! 69 .con_initcall.init : { *(.con_initcall.init) } 80 . = ALIGN(PAGE_SIZE); !! 70 __con_initcall_end = .; 81 __init_end = .; !! 71 SECURITY_INIT 82 !! 72 . = ALIGN(8192); 83 .text : { !! 73 __initramfs_start = .; 84 _text = .; !! 74 .init.ramfs : { *(.init.ramfs) } 85 _stext = .; !! 75 __initramfs_end = .; 86 TEXT_TEXT !! 76 . = ALIGN(32); 87 SCHED_TEXT !! 77 __per_cpu_start = .; 88 LOCK_TEXT !! 78 .data.percpu : { *(.data.percpu) } 89 KPROBES_TEXT !! 79 __per_cpu_end = .; 90 IRQENTRY_TEXT !! 80 . = ALIGN(8192); 91 SOFTIRQENTRY_TEXT !! 81 __init_end = .; 92 *(.fixup) !! 82 __bss_start = .; 93 *(.gnu.warning) !! 83 .sbss : { *(.sbss) *(.scommon) } 94 } !! 84 .bss : 95 EXCEPTION_TABLE(L1_CACHE_BYTES) !! 85 { 96 _etext = .; !! 86 *(.dynbss) 97 !! 87 *(.bss) 98 _sdata = .; !! 88 *(COMMON) 99 RO_DATA(PAGE_SIZE) !! 89 } 100 !! 90 _end = . ; 101 /* !! 91 PROVIDE (end = .); 102 * 1. this is .data essentially !! 92 /* Stabs debugging sections. */ 103 * 2. THREAD_SIZE for init.task, must !! 93 .stab 0 : { *(.stab) } 104 */ !! 94 .stabstr 0 : { *(.stabstr) } 105 RW_DATA(L1_CACHE_BYTES, PAGE_SIZE, THR !! 95 .stab.excl 0 : { *(.stab.excl) } 106 !! 96 .stab.exclstr 0 : { *(.stab.exclstr) } 107 _edata = .; !! 97 .stab.index 0 : { *(.stab.index) } 108 !! 98 .stab.indexstr 0 : { *(.stab.indexstr) } 109 BSS_SECTION(4, 4, 4) !! 99 .comment 0 : { *(.comment) } 110 !! 100 .debug 0 : { *(.debug) } 111 #ifdef CONFIG_ARC_DW2_UNWIND !! 101 .debug_srcinfo 0 : { *(.debug_srcinfo) } 112 . = ALIGN(PAGE_SIZE); !! 102 .debug_aranges 0 : { *(.debug_aranges) } 113 .eh_frame : { !! 103 .debug_pubnames 0 : { *(.debug_pubnames) } 114 __start_unwind = .; !! 104 .debug_sfnames 0 : { *(.debug_sfnames) } 115 *(.eh_frame) !! 105 .line 0 : { *(.line) } 116 __end_unwind = .; !! 106 /DISCARD/ : { *(.exit.text) *(.exit.data) *(.exitcall.exit) } 117 } << 118 #else << 119 /DISCARD/ : { *(.eh_frame) } << 120 #endif << 121 << 122 . = ALIGN(PAGE_SIZE); << 123 _end = . ; << 124 << 125 STABS_DEBUG << 126 ELF_DETAILS << 127 DISCARDS << 128 << 129 .arcextmap 0 : { << 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 } 107 }
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.