| 1 | /* SPDX-License-Identifier: GPL-2.0-only */
|
| 2 | /*
|
| 3 | * Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com)
|
| 4 | */
|
| 5 |
|
| 6 | |
| 7 | |
| 8 | |
| 9 | |
| 10 |
|
| 11 | OUTPUT_ARCH(arc)
|
| 12 | ENTRY(res_service)
|
| 13 |
|
| 14 | |
| 15 | jiffies = jiffies_64 + 4;
|
| 16 | |
| 17 | jiffies = jiffies_64;
|
| 18 | |
| 19 |
|
| 20 | SECTIONS
|
| 21 | {
|
| 22 | /*
|
| 23 | * ICCM starts at 0x8000_0000. So if kernel is relocated to some other
|
| 24 | * address, make sure peripheral at 0x8z doesn't clash with ICCM
|
| 25 | * Essentially vector is also in ICCM.
|
| 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 * 1024);
|
| 40 | }
|
| 41 | #endif
|
| 42 |
|
| 43 | /*
|
| 44 | * The reason for having a separate subsection .init.ramfs is to
|
| 45 | * prevent objdump from including it in kernel dumps
|
| 46 | *
|
| 47 | * Reason for having .init.ramfs above .init is to make sure that the
|
| 48 | * binary blob is tucked away to one side, reducing the displacement
|
| 49 | * between .init.text and .text, avoiding any possible relocation
|
| 50 | * errors because of calls from .init.text to .text
|
| 51 | * Yes such calls do exist. e.g.
|
| 52 | * decompress_inflate.c:gunzip( ) -> zlib_inflate_workspace( )
|
| 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: special INIT_RAM_FS handling */
|
| 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 : {
|
| 84 | _text = .;
|
| 85 | _stext = .;
|
| 86 | TEXT_TEXT
|
| 87 | SCHED_TEXT
|
| 88 | LOCK_TEXT
|
| 89 | KPROBES_TEXT
|
| 90 | IRQENTRY_TEXT
|
| 91 | SOFTIRQENTRY_TEXT
|
| 92 | *(.fixup)
|
| 93 | *(.gnu.warning)
|
| 94 | }
|
| 95 | EXCEPTION_TABLE(L1_CACHE_BYTES)
|
| 96 | _etext = .;
|
| 97 |
|
| 98 | _sdata = .;
|
| 99 | RO_DATA(PAGE_SIZE)
|
| 100 |
|
| 101 | /*
|
| 102 | * 1. this is .data essentially
|
| 103 | * 2. THREAD_SIZE for init.task, must be kernel-stk sz aligned
|
| 104 | */
|
| 105 | RW_DATA(L1_CACHE_BYTES, PAGE_SIZE, THREAD_SIZE)
|
| 106 |
|
| 107 | _edata = .;
|
| 108 |
|
| 109 | BSS_SECTION(4, 4, 4)
|
| 110 |
|
| 111 | #ifdef CONFIG_ARC_DW2_UNWIND
|
| 112 | . = ALIGN(PAGE_SIZE);
|
| 113 | .eh_frame : {
|
| 114 | __start_unwind = .;
|
| 115 | *(.eh_frame)
|
| 116 | __end_unwind = .;
|
| 117 | }
|
| 118 | #else
|
| 119 | /DISCARD/ : { *(.eh_frame) }
|
| 120 | #endif
|
| 121 |
|
| 122 | . = ALIGN(PAGE_SIZE);
|
| 123 | _end = . ;
|
| 124 |
|
| 125 | STABS_DEBUG
|
| 126 | MODINFO
|
| 127 | ELF_DETAILS
|
| 128 | DISCARDS
|
| 129 |
|
| 130 | .arcextmap 0 : {
|
| 131 | *(.gnu.linkonce.arcextmap.*)
|
| 132 | *(.arcextmap.*)
|
| 133 | }
|
| 134 |
|
| 135 | #ifndef CONFIG_DEBUG_INFO
|
| 136 | /DISCARD/ : { *(.debug_frame) }
|
| 137 | /DISCARD/ : { *(.debug_aranges) }
|
| 138 | /DISCARD/ : { *(.debug_pubnames) }
|
| 139 | /DISCARD/ : { *(.debug_info) }
|
| 140 | /DISCARD/ : { *(.debug_abbrev) }
|
| 141 | /DISCARD/ : { *(.debug_line) }
|
| 142 | /DISCARD/ : { *(.debug_str) }
|
| 143 | /DISCARD/ : { *(.debug_loc) }
|
| 144 | /DISCARD/ : { *(.debug_macinfo) }
|
| 145 | /DISCARD/ : { *(.debug_ranges) }
|
| 146 | #endif
|
| 147 |
|
| 148 | #ifdef CONFIG_ARC_HAS_DCCM
|
| 149 | . = CONFIG_ARC_DCCM_BASE;
|
| 150 | __arc_dccm_base = .;
|
| 151 | .data.arcfp : {
|
| 152 | *(.data.arcfp)
|
| 153 | }
|
| 154 | . = ALIGN(CONFIG_ARC_DCCM_SZ * 1024);
|
| 155 | #endif
|
| 156 | }
|