/* * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /****************************************************************************** * @file gcc_csky.ld * @brief csky linker file * @version V1.0 * @date 02. June 2017 ******************************************************************************/ MEMORY { I-SRAM : ORIGIN = 0x080d0400 , LENGTH = 0x120000 /* I-SRAM 1M+128KB */ D-SRAM : ORIGIN = 0x20000100 , LENGTH = 0x47f00 /* D-SRAM 288KB */ V-SRAM : ORIGIN = 0x20000000 , LENGTH = 0x100 /* off-chip SRAM 8MB */ } __min_heap_size = 0x18000; PROVIDE (__ram_end = 0x2003A000); PROVIDE (__heap_end = __ram_end); REGION_ALIAS("REGION_TEXT", I-SRAM); REGION_ALIAS("REGION_RODATA", I-SRAM); REGION_ALIAS("REGION_VDATA", V-SRAM); REGION_ALIAS("REGION_DATA", D-SRAM); REGION_ALIAS("REGION_BSS", D-SRAM); ENTRY(Reset_Handler) SECTIONS { .text : { . = ALIGN(0x4) ; KEEP(*startup.o(.vectors)) __stext = . ; *(.text) *(.text*) *(.text.*) *(.gnu.warning) *(.stub) *(.gnu.linkonce.t*) *(.glue_7t) *(.glue_7) *(.jcr) KEEP (*(.init)) KEEP (*(.fini)) . = ALIGN (4) ; PROVIDE(__ctbp = .); *(.call_table_data) *(.call_table_text) . = ALIGN(0x10) ; __etext = . ; } > REGION_TEXT .rodata : { . = ALIGN(0x4) ; __srodata = .; . = ALIGN(0x4) ; *(.rodata.g_hdfConfigEntrySymbol) *(.rdata) *(.rdata*) *(.rdata1) *(.rdata.*) *(.rodata) *(.rodata1) *(.rodata*) *(.rodata.*) *(.rodata.str1.4) . = ALIGN(0x4) ; __ctor_start__ = .; KEEP (*crtbegin.o(.ctors)) KEEP (*crtbegin?.o(.ctors)) KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) __ctor_end__ = .; KEEP (*crtbegin.o(.dtors)) KEEP (*crtbegin?.o(.dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) __dtor_end__ = .; . = ALIGN(0x4) ; __erodata = .; } > REGION_RODATA .vdata : { . = ALIGN(0x4) ; __vdata_start__ = . ; KEEP(*startup.o(.vdata)) . = ALIGN(0x4) ; __vdata_end__ = .; } > REGION_VDATA .data : { . = ALIGN(0x4) ; __sdata = . ; __data_start__ = . ; data_start = . ; *(.got.plt) *(.got) *(.gnu.linkonce.r*) *(.data) *(.data*) *(.data1) *(.data.*) *(.gnu.linkonce.d*) *(.data1) *(.gcc_except_table) *(.gcc_except_table*) __start_init_call = .; *(.initcall.init) __stop_init_call = .; __start_cmd = .; *(.bootloaddata.cmd) . = ALIGN(4) ; __stop_cmd = .; *(.sdata) *(.sdata.*) *(.gnu.linkonce.s.*) *(__libc_atexit) *(__libc_subinit) *(__libc_subfreeres) *(.note.ABI-tag) . = ALIGN(4); _hdf_drivers_start = .; KEEP(*(.hdf.driver)) _hdf_drivers_end = .; . = ALIGN(0x4) ; __edata = .; __data_end__ = .; } > REGION_DATA AT > REGION_RODATA .zinitcall_array : { . = ALIGN(0x4) ; PROVIDE_HIDDEN (__zinitcall_core_start = .); KEEP (*(SORT(.zinitcall.core*))) KEEP (*(.zinitcall.core*)) PROVIDE_HIDDEN (__zinitcall_core_end = .); . = ALIGN(0x4) ; PROVIDE_HIDDEN (__zinitcall_device_start = .); KEEP (*(SORT(.zinitcall.device*))) KEEP (*(.zinitcall.device*)) PROVIDE_HIDDEN (__zinitcall_device_end = .); . = ALIGN(0x4) ; PROVIDE_HIDDEN (__zinitcall_bsp_start = .); KEEP (*(SORT(.zinitcall.bsp*))) KEEP (*(.zinitcall.bsp*)) PROVIDE_HIDDEN (__zinitcall_bsp_end = .); . = ALIGN(0x4) ; PROVIDE_HIDDEN (__zinitcall_sys_service_start = .); KEEP (*(SORT(.zinitcall.sys.service*))) KEEP (*(.zinitcall.sys.service*)) PROVIDE_HIDDEN (__zinitcall_sys_service_end = .); . = ALIGN(0x4) ; PROVIDE_HIDDEN (__zinitcall_app_service_start = .); KEEP (*(SORT(.zinitcall.app.service*))) KEEP (*(.zinitcall.app.service*)) PROVIDE_HIDDEN (__zinitcall_app_service_end = .); . = ALIGN(0x4) ; PROVIDE_HIDDEN (__zinitcall_sys_feature_start = .); KEEP (*(SORT(.zinitcall.sys.feature*))) KEEP (*(.zinitcall.sys.feature*)) PROVIDE_HIDDEN (__zinitcall_sys_feature_end = .); . = ALIGN(0x4) ; PROVIDE_HIDDEN (__zinitcall_app_feature_start = .); KEEP (*(SORT(.zinitcall.app.feature*))) KEEP (*(.zinitcall.app.feature*)) PROVIDE_HIDDEN (__zinitcall_app_feature_end = .); . = ALIGN(0x4) ; PROVIDE_HIDDEN (__zinitcall_run_start = .); KEEP (*(SORT(.zinitcall.run*))) KEEP (*(.zinitcall.run*)) PROVIDE_HIDDEN (__zinitcall_run_end = .); . = ALIGN(0x4) ; PROVIDE_HIDDEN (__zinitcall_test_start = .); KEEP (*(SORT(.zinitcall.test*))) KEEP (*(.zinitcall.test*)) PROVIDE_HIDDEN (__zinitcall_test_end = .); . = ALIGN(0x4) ; PROVIDE_HIDDEN (__zinitcall_exit_start = .); KEEP (*(SORT(.zinitcall.exit*))) KEEP (*(.zinitcall.exit*)) PROVIDE_HIDDEN (__zinitcall_exit_end = .); } > REGION_RODATA .bss : { . = ALIGN(0x4) ; __sbss = ALIGN(0x4) ; __bss_start__ = . ; *(.dynsbss) *(.sbss) *(.sbss.*) *(.scommon) *(.dynbss) *(.bss) *(.bss.*) *(COMMON) . = ALIGN(0x4) ; __ebss = . ; __end = . ; end = . ; __bss_end__ = .; } > REGION_BSS ._user_heap : { . = ALIGN(0x4) ; __heap_start = .; . += __min_heap_size; . = ALIGN(0x4) ; } > REGION_BSS .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) } > REGION_BSS .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } > REGION_BSS .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) } .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } .eh_frame_hdr : { *(.eh_frame_hdr) } .preinit_array : { PROVIDE_HIDDEN (__preinit_array_start = .); KEEP (*(.preinit_array)) PROVIDE_HIDDEN (__preinit_array_end = .); } .init_array : { PROVIDE_HIDDEN (__init_array_start = .); KEEP (*(SORT(.init_array.*))) KEEP (*(.init_array)) PROVIDE_HIDDEN (__init_array_end = .); } .fini_array : { PROVIDE_HIDDEN (__fini_array_start = .); KEEP (*(.fini_array)) KEEP (*(SORT(.fini_array.*))) PROVIDE_HIDDEN (__fini_array_end = .); } .junk 0 : { *(.rel*) *(.rela*) } .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 : { *(.comment) } .debug 0 : { *(.debug) } .line 0 : { *(.line) } .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) } .debug_pubtypes 0 : { *(.debug_pubtypes) } .debug_ranges 0 : { *(.debug_ranges) } .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } }