1*1424dfb3Schristos# Copyright (C) 2014-2020 Free Software Foundation, Inc. 2*1424dfb3Schristos# 3*1424dfb3Schristos# Copying and distribution of this file, with or without modification, 4*1424dfb3Schristos# are permitted in any medium without royalty provided the copyright 5*1424dfb3Schristos# notice and this notice are preserved. 6*1424dfb3Schristos 7*1424dfb3Schristos# Using an empty script for ld -r is better than mashing together 8*1424dfb3Schristos# sections. This hack likely leaves ld -Ur broken. 9*1424dfb3Schristostest -n "${RELOCATING}" || exit 0 10*1424dfb3Schristoscat << EOF 11*1424dfb3Schristos/* Copyright (C) 2014-2020 Free Software Foundation, Inc. 12*1424dfb3Schristos 13*1424dfb3Schristos Copying and distribution of this script, with or without modification, 14*1424dfb3Schristos are permitted in any medium without royalty provided the copyright 15*1424dfb3Schristos notice and this notice are preserved. */ 16*1424dfb3Schristos 17*1424dfb3SchristosOUTPUT_FORMAT("elf32-ip2k", "elf32-ip2k", "elf32-ip2k") 18*1424dfb3SchristosOUTPUT_ARCH(ip2k) 19*1424dfb3Schristos${RELOCATING+ENTRY(_start)} 20*1424dfb3SchristosSEARCH_DIR(.); 21*1424dfb3Schristos 22*1424dfb3Schristos/* IP2022 default linker script. */ 23*1424dfb3Schristos 24*1424dfb3SchristosMEMORY 25*1424dfb3Schristos{ 26*1424dfb3Schristos D_GPR : org = 0x01000080, len = 128 27*1424dfb3Schristos D_RAM : org = 0x01000100, len = 4K - 256 28*1424dfb3Schristos P_RAM : org = 0x02000000, len = 16K 29*1424dfb3Schristos P_ROM : org = 0x02010000, len = 64K - 32 30*1424dfb3Schristos P_RESET : org = 0x0201FFE0, len = 32 31*1424dfb3Schristos P_CONFIG : org = 0x02020000, len = 128 32*1424dfb3Schristos} 33*1424dfb3Schristos 34*1424dfb3SchristosSECTIONS 35*1424dfb3Schristos{ 36*1424dfb3Schristos /* Allocated memory end markers 37*1424dfb3Schristos (initialized to start of appropriate memory address). */ 38*1424dfb3Schristos __data_end = 0x01000100; 39*1424dfb3Schristos __pram_end = 0x02000000; 40*1424dfb3Schristos __flash_end = 0x02010000; 41*1424dfb3Schristos 42*1424dfb3Schristos /* Global general purpose registers in direct addressing range. */ 43*1424dfb3Schristos .gpr 0x01000080 : 44*1424dfb3Schristos { 45*1424dfb3Schristos *(.gpr) 46*1424dfb3Schristos } >D_GPR 47*1424dfb3Schristos 48*1424dfb3Schristos /* Pre-allocated, pre-initialized data memory. */ 49*1424dfb3Schristos __data_run_begin = __data_end; 50*1424dfb3Schristos __data_load_begin = (__flash_end + 1) & 0xFFFFFFFE; 51*1424dfb3Schristos .data __data_run_begin : AT (__data_load_begin) 52*1424dfb3Schristos { 53*1424dfb3Schristos * (.data); 54*1424dfb3Schristos * (.rodata) 55*1424dfb3Schristos } >D_RAM 56*1424dfb3Schristos __data_run_end = __data_run_begin + SIZEOF(.data); 57*1424dfb3Schristos __data_load_end = __data_load_begin + SIZEOF(.data); 58*1424dfb3Schristos __data_end = __data_run_end; 59*1424dfb3Schristos __flash_end = __data_load_end; 60*1424dfb3Schristos 61*1424dfb3Schristos /* Pre-allocated, uninitialized data memory. */ 62*1424dfb3Schristos __bss_begin = __data_end; 63*1424dfb3Schristos .bss __bss_begin : 64*1424dfb3Schristos { 65*1424dfb3Schristos * (.bss) 66*1424dfb3Schristos } >D_RAM 67*1424dfb3Schristos __bss_end = __bss_begin + SIZEOF(.bss); 68*1424dfb3Schristos __data_end = __bss_end; 69*1424dfb3Schristos 70*1424dfb3Schristos /* Pre-allocated PRAM data memory. */ 71*1424dfb3Schristos __pram_data_begin = (__pram_end + 1) & 0xFFFFFFFE; 72*1424dfb3Schristos .pram_data __pram_data_begin : 73*1424dfb3Schristos { 74*1424dfb3Schristos * (.pram_data) 75*1424dfb3Schristos } >P_RAM 76*1424dfb3Schristos __pram_data_end = __pram_data_begin + SIZEOF(.pram_data); 77*1424dfb3Schristos __pram_end = __pram_data_end; 78*1424dfb3Schristos 79*1424dfb3Schristos /* PRAM code. */ 80*1424dfb3Schristos __pram_run_begin = (__pram_end + 1) & 0xFFFFFFFE; 81*1424dfb3Schristos __pram_load_begin = (__flash_end + 1) & 0xFFFFFFFE; 82*1424dfb3Schristos .pram __pram_run_begin : AT (__pram_load_begin) 83*1424dfb3Schristos { 84*1424dfb3Schristos * (.pram) 85*1424dfb3Schristos } >P_RAM 86*1424dfb3Schristos __pram_run_end = __pram_run_begin + SIZEOF(.pram); 87*1424dfb3Schristos __pram_load_end = __pram_load_begin + SIZEOF(.pram); 88*1424dfb3Schristos 89*1424dfb3Schristos __pram_load_shift = ((__pram_run_begin - __pram_load_begin) & 0x1FFFF) | 0x02000000; 90*1424dfb3Schristos __pram_end = __pram_run_end; 91*1424dfb3Schristos __flash_end = __pram_load_end; 92*1424dfb3Schristos 93*1424dfb3Schristos /* PRAM overlay code. */ 94*1424dfb3Schristos __pram_overlay_run_start = (__pram_end + 1) & 0xFFFFFFFE; 95*1424dfb3Schristos __pram_overlay_load_start = (__flash_end + 1) & 0xFFFFFFFE; 96*1424dfb3Schristos OVERLAY __pram_overlay_run_start : AT (__pram_overlay_load_start) 97*1424dfb3Schristos { 98*1424dfb3Schristos .pram1 { */overlay1/* (.pram); * (.pram1) } 99*1424dfb3Schristos .pram2 { */overlay2/* (.pram); * (.pram2) } 100*1424dfb3Schristos } >P_RAM 101*1424dfb3Schristos __pram_overlay_run_end = .; 102*1424dfb3Schristos __pram_overlay_load_end = __pram_overlay_load_start + SIZEOF(.pram1) + SIZEOF(.pram2); 103*1424dfb3Schristos __pram_end = __pram_overlay_run_end; 104*1424dfb3Schristos __flash_end = __pram_overlay_load_end; 105*1424dfb3Schristos 106*1424dfb3Schristos /* Flash code. */ 107*1424dfb3Schristos __text_begin = (__flash_end + 1) & 0xFFFFFFFE; 108*1424dfb3Schristos .text __text_begin : 109*1424dfb3Schristos { 110*1424dfb3Schristos * (.text); 111*1424dfb3Schristos * (.text.libgcc) 112*1424dfb3Schristos } >P_ROM = 0xffff 113*1424dfb3Schristos __text_end = __text_begin + SIZEOF(.text); 114*1424dfb3Schristos __flash_end = __text_end; 115*1424dfb3Schristos 116*1424dfb3Schristos /* Strings. */ 117*1424dfb3Schristos __strings_begin = (__flash_end + 1) & 0xFFFFFFFE; 118*1424dfb3Schristos .strings __strings_begin : 119*1424dfb3Schristos { 120*1424dfb3Schristos * (strings); 121*1424dfb3Schristos * (.progmem.data) 122*1424dfb3Schristos } >P_ROM = 0xffff 123*1424dfb3Schristos __strings_end = __strings_begin + SIZEOF (.strings); 124*1424dfb3Schristos __flash_end = __strings_end; 125*1424dfb3Schristos 126*1424dfb3Schristos .ctors : { * (.ctors) } > P_ROM 127*1424dfb3Schristos .dtors : { * (.dtors) } > P_ROM 128*1424dfb3Schristos 129*1424dfb3Schristos /* Reset code. */ 130*1424dfb3Schristos .reset : { * (.reset) } >P_RESET = 0xffff 131*1424dfb3Schristos 132*1424dfb3Schristos /* Configuration block. */ 133*1424dfb3Schristos .config : { * (.config) } >P_CONFIG = 0xffff 134*1424dfb3Schristos 135*1424dfb3Schristos /* Stack. */ 136*1424dfb3Schristos PROVIDE (__stack = 0x01000FFF); 137*1424dfb3Schristos 138*1424dfb3Schristos /* Stabs debugging sections. */ 139*1424dfb3Schristos .stab 0 : { *(.stab) } 140*1424dfb3Schristos .stabstr 0 : { *(.stabstr) } 141*1424dfb3Schristos .stab.excl 0 : { *(.stab.excl) } 142*1424dfb3Schristos .stab.exclstr 0 : { *(.stab.exclstr) } 143*1424dfb3Schristos .stab.index 0 : { *(.stab.index) } 144*1424dfb3Schristos .stab.indexstr 0 : { *(.stab.indexstr) } 145*1424dfb3Schristos .comment 0 : { *(.comment) } 146*1424dfb3Schristos 147*1424dfb3SchristosEOF 148*1424dfb3Schristos 149*1424dfb3Schristos. $srcdir/scripttempl/DWARF.sc 150*1424dfb3Schristos 151*1424dfb3Schristoscat <<EOF 152*1424dfb3Schristos} 153*1424dfb3SchristosEOF 154