/******************************************************************************************************** * * Name: app_zos_zpu.tmpl * Created: April 2020 * Author(s): Philip Smart * Description: ZPUTA/zOS application linker map. * This is the linker map for application programs to be run under zOS/ZPUTA. It defines * where an application is loaded and the memory locations of the various components * such as code (.text), static data (.data), uninitialised variables (.bss) etc. * * Credits: * Copyright: (c) 2019-20 Philip Smart * * History: April 2020 - Initial script based on ZPU linker script. * ******************************************************************************************************** * This source file is free software: you can redistribute it and#or modify * it under the terms of the GNU General Public License as published * by the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This source file is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . ********************************************************************************************************/ /* Memory Definitions for a ZPU application running within RAM (either a block of BRAM, DRAM) seperate to tbe Boot BRAM.*/ MEMORY { BOOT (rx) : ORIGIN = BOOTADDR, LENGTH = BOOTLEN /* Boot section which shouldnt exist in an app, so a link trap as warning */ CODE (rx) : ORIGIN = APPSTART, LENGTH = APPLEN /* Up to the end of the RAM first less stack space */ } /* Section Definitions */ SECTIONS { /* first section is .fixed_vectors which is used for startup code */ . = BOOTADDR ; _ramstart = . ; __boot_start__ = . ; .fixed_vectors : { KEEP(*(.fixed_vectors)) /* Seed section - allows -gc-sections */ }>BOOT __boot_end__ = . ; /* Remaining code sections */ . = ALIGN(4); __text_start__ = . ; .text : { *(.text) /* remaining code */ *(.text.*) /* remaining code */ . = ALIGN(4); __ctors_start__ = . ; KEEP(*(.ctors)) KEEP(*(.ctors.*)) __ctors_end__ = . ; . = ALIGN(4); __dtors_start__ = . ; KEEP(*(.dtors)) KEEP(*(.dtors.*)) __dtors_end__ = . ; } >CODE __text_end__ = . ; /* .rodata section which is used for read-only data (constants) */ . = ALIGN(4); __rodata_start__ = . ; .rodata : { *(.rodata) *(.rodata.*) } >CODE . = ALIGN(4); __rodata_end__ = . ; _ramend = . ; /* .data section which is used for initialized data. */ . = ALIGN(4); _datastart = . ; .data : { _data = . ; __data_start__ = . ; *(.data) *(.data.*) SORT(CONSTRUCTORS) . = ALIGN(4); __data_end__ = . ; } >CODE /* .bss section which is used for uninitialized data */ . = ALIGN(4); .bss : { __bss_start = . ; __bss_start__ = . ; *(.bss) *(.bss.*) *(COMMON) _ebss = .; __bss_end__ = . ; _end = . ; } >CODE _dataend = . ; /* Top of stack pointer, used for sbrk validation. */ _stack = APP_STACK_STARTADDR; /* Debug information */ .debug_loc 0 : { *(.debug_loc) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_str 0 : { *(.debug_str) } .debug_info 0 : { *(.debug_info) } .debug_line 0 : { *(.debug_line) } .debug_frame 0 : { *(.debug_frame) } .debug_pubnames 0 : { *(.debug_pubnames) } .debug_aranges 0 : { *(.debug_aranges) } .comment : { *(.comment) } }