1/* 2 * Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved. 3 * Copyright (c) 2020-2022 Huawei Device Co., Ltd. All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without modification, 6 * are permitted provided that the following conditions are met: 7 * 8 * 1. Redistributions of source code must retain the above copyright notice, this list of 9 * conditions and the following disclaimer. 10 * 11 * 2. Redistributions in binary form must reproduce the above copyright notice, this list 12 * of conditions and the following disclaimer in the documentation and/or other materials 13 * provided with the distribution. 14 * 15 * 3. Neither the name of the copyright holder nor the names of its contributors may be used 16 * to endorse or promote products derived from this software without specific prior written 17 * permission. 18 * 19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 21 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 22 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 23 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 24 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 25 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 26 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 27 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 28 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 29 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 */ 31 32OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", "elf32-littlearm") 33OUTPUT_ARCH(arm) 34ENTRY(Vector_Table) 35 36SVC_IRQ_STACK_SIZE = 4K; 37FLASH_START = 0x00000000; 38FLASH_SIZE = 3M; 39PS_RAM_START = 0x21000000; 40PS_RAM_SIZE = 16M; 41 42MEMORY 43{ 44 flash(rx) : ORIGIN = FLASH_START, LENGTH = FLASH_SIZE 45 ram(rwx) : ORIGIN = PS_RAM_START, LENGTH = PS_RAM_SIZE 46} 47 48SECTIONS 49{ 50 .vector : { 51 KEEP (*(SORT_NONE(.Vector_Table))) 52 } > flash 53 54 .got : { 55 *(.got.plt) 56 *(.igot.plt) 57 *(.got) 58 *(.igot) 59 } > flash 60 61 .text : { 62 . = ALIGN(0x4); 63 __text_start = .; 64 _stext = .; 65 *(.text.*) 66 . = ALIGN(0x4); 67 _etext = .; 68 *(.rodata .rodata.* .gnu.linkonce.r.*) 69 *(.rodata1) 70 } > ram 71 72 .data : { 73 __data_start = . ; 74 *(.data .data.* .gnu.linkonce.d.*) 75 } > ram 76 77 .bss : ALIGN(0x4) { 78 __bss_start = .; 79 *(.dynbss) 80 *(.bss .bss.* .gnu.linkonce.b.*) 81 *(COMMON) 82 . = ALIGN(0x4); 83 __bss_end = .; 84 } > ram 85 86 _sstack = .; 87 .stack : ALIGN(0x8) { 88 _stack = .; 89 __irq_stack_bootom = .; 90 . += SVC_IRQ_STACK_SIZE; 91 __irq_stack_top = .; 92 _estack = .; 93 } > ram 94 95 .heap (NOLOAD): ALIGN(0x40) { 96 __heap_start = .; 97 } > ram 98 99 __heap_size = PS_RAM_SIZE - (__heap_start - __text_start); 100 end = .; 101 /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } 102} 103