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