1/* 2 * Copyright (C) 2017-2019 Alibaba Group Holding Limited 3 */ 4 5/****************************************************************************** 6 * @file gcc_csky.ld 7 * @brief csky linker file 8 * @version V1.0 9 * @date 02. June 2017 10 ******************************************************************************/ 11MEMORY 12{ 13 I-SRAM : ORIGIN = 0x00000000 , LENGTH = 0x40000 /* I-SRAM 256KB */ 14 D-SRAM : ORIGIN = 0x20000000 , LENGTH = 0x8000 /* D-SRAM 32KB */ 15 O-SRAM : ORIGIN = 0x50000000 , LENGTH = 0x800000 /* off-chip SRAM 8MB */ 16 SRAM : ORIGIN = 0x60000000 , LENGTH = 0x20000 /* on-chip SRAM 128KB */ 17} 18 19__min_heap_size = 0x200; 20__rt_rvstack_bss_size = 0x400; 21PROVIDE (__ram_end = 0x20007FFF); 22PROVIDE (__heap_end = __ram_end); 23 24REGION_ALIAS("REGION_TEXT", I-SRAM); 25REGION_ALIAS("REGION_RODATA", I-SRAM); 26REGION_ALIAS("REGION_DATA", D-SRAM); 27REGION_ALIAS("REGION_BSS", D-SRAM); 28 29ENTRY(Reset_Handler) 30SECTIONS 31{ 32 .text : { 33 . = ALIGN(0x4) ; 34 __stext = . ; 35 KEEP(*startup_es32vf2264.o(*.text*)) 36 *(.text) 37 *(.text*) 38 *(.text.*) 39 *(.gnu.warning) 40 *(.stub) 41 *(.gnu.linkonce.t*) 42 *(.glue_7t) 43 *(.glue_7) 44 *(.jcr) 45 KEEP (*(.init)) 46 KEEP (*(.fini)) 47 48 . = ALIGN (4) ; 49 PROVIDE(__ctors_start__ = .); 50 KEEP (*(SORT(.init_array.*))) 51 KEEP (*(.init_array)) 52 PROVIDE(__ctors_end__ = .); 53 54 . = ALIGN(0x40) ; 55 KEEP(*startup_es32vf2264.o(*.vectors*)) 56 57 /* section information for finsh shell */ 58 . = ALIGN(4); 59 __fsymtab_start = .; 60 KEEP(*(FSymTab)) 61 __fsymtab_end = .; 62 63 . = ALIGN (4) ; 64 PROVIDE(__ctbp = .); 65 *(.call_table_data) 66 *(.call_table_text) 67 . = ALIGN(0x10) ; 68 __etext = . ; 69 } > REGION_TEXT 70 71 72 .eh_frame_hdr : { 73 *(.eh_frame_hdr) 74 } > REGION_TEXT 75 76 77 .eh_frame : ONLY_IF_RO { 78 KEEP (*(.eh_frame)) 79 } > REGION_TEXT 80 81 82 .gcc_except_table : ONLY_IF_RO { 83 *(.gcc_except_table .gcc_except_table.*) 84 } > REGION_TEXT 85 86 87 .rodata : { 88 . = ALIGN(0x4) ; 89 __srodata = .; 90 *(.rdata) 91 *(.rdata*) 92 *(.rdata1) 93 *(.rdata.*) 94 KEEP (*(.rti_fn.0)) 95 KEEP (*(.rti_fn.0.end)) 96 KEEP (*(.rti_fn.1)) 97 KEEP (*(.rti_fn.1.end)) 98 KEEP (*(.rti_fn.2)) 99 KEEP (*(.rti_fn.2.end)) 100 KEEP (*(.rti_fn.3)) 101 KEEP (*(.rti_fn.3.end)) 102 KEEP (*(.rti_fn.4)) 103 KEEP (*(.rti_fn.4.end)) 104 KEEP (*(.rti_fn.5)) 105 KEEP (*(.rti_fn.5.end)) 106 KEEP (*(.rti_fn.6)) 107 KEEP (*(.rti_fn.6.end)) 108 *(.rodata) 109 *(.rodata1) 110 *(.rodata*) 111 *(.rodata.*) 112 *(.rodata.str1.4) 113 *(.srodata*) 114 . = ALIGN(0x4) ; 115 __erodata = .; 116 __rodata_end__ = .; 117 } > REGION_RODATA 118 119 120 121 .data : { 122 . = ALIGN(0x4) ; 123 __sdata = . ; 124 __data_start__ = . ; 125 data_start = . ; 126 *(.got.plt) 127 *(.got) 128 *(.gnu.linkonce.r*) 129 *(.data) 130 *(.data*) 131 *(.data1) 132 *(.data.*) 133 *(.gnu.linkonce.d*) 134 *(.data1) 135 *(.gcc_except_table) 136 *(.gcc_except_table*) 137 __start_init_call = .; 138 *(.initcall.init) 139 __stop_init_call = .; 140 __start_cmd = .; 141 *(.bootloaddata.cmd) 142 . = ALIGN(4) ; 143 PROVIDE(__dtors_start__ = .); 144 KEEP(*(SORT(.dtors.*))) 145 KEEP(*(.dtors)) 146 PROVIDE(__dtors_end__ = .); 147 __stop_cmd = .; 148 __global_pointer$ = .; 149 *(.sdata) 150 *(.sdata.*) 151 *(.sdata2.*) 152 *(.gnu.linkonce.s.*) 153 *(__libc_atexit) 154 *(__libc_subinit) 155 *(__libc_subfreeres) 156 *(.note.ABI-tag) 157 __edata = .; 158 __data_end__ = .; 159 . = ALIGN(0x4) ; 160 } > REGION_DATA AT > REGION_RODATA 161 162 163 164 .eh_frame : ONLY_IF_RW { 165 KEEP (*(.eh_frame)) 166 } > REGION_DATA AT > REGION_RODATA 167 168 169 170 .gcc_except_table : ONLY_IF_RW { 171 *(.gcc_except_table .gcc_except_table.*) 172 __edata = .; 173 __data_end__ = .; 174 } > REGION_DATA AT > REGION_RODATA 175 176 177 178 .bss : { 179 . = ALIGN(0x4) ; 180 __sbss = ALIGN(0x4) ; 181 __bss_start__ = . ; 182 *(.dynsbss) 183 *(.sbss) 184 *(.sbss.*) 185 *(.scommon) 186 *(.dynbss) 187 *(.bss) 188 *(.bss.*) 189 *(COMMON) 190 . = ALIGN(0x4) ; 191 __ebss = . ; 192 __bss_end__ = .; 193 __end = . ; 194 end = . ; 195 } > REGION_BSS AT > REGION_BSS 196 197 198 199 ._user_heap : { 200 . = ALIGN(0x4) ; 201 __heap_start = .; 202 . += __min_heap_size; 203 . = ALIGN(0x4) ; 204 } > REGION_BSS AT > REGION_BSS 205 206 ._rtt_v5_use_stack1 : { 207 . = ALIGN(0x4) ; 208 . += __rt_rvstack_bss_size; 209 __rt_rvstack = .; 210 . = ALIGN(0x4) ; 211 } > REGION_BSS AT > REGION_BSS 212 213 214 215} 216