| 1 | cat << EOF | 
|---|
| 2 | OUTPUT_FORMAT("elf32-ip2k", "elf32-ip2k", "elf32-ip2k") | 
|---|
| 3 | OUTPUT_ARCH(ip2k) | 
|---|
| 4 | ENTRY(_start) | 
|---|
| 5 | SEARCH_DIR(.); | 
|---|
| 6 |  | 
|---|
| 7 | /* IP2022 default linker script.  */ | 
|---|
| 8 |  | 
|---|
| 9 | MEMORY | 
|---|
| 10 | { | 
|---|
| 11 | D_GPR    : org = 0x01000080, len = 128 | 
|---|
| 12 | D_RAM    : org = 0x01000100, len = 4K - 256 | 
|---|
| 13 | P_RAM    : org = 0x02000000, len = 16K | 
|---|
| 14 | P_ROM    : org = 0x02010000, len = 64K - 32 | 
|---|
| 15 | P_RESET  : org = 0x0201FFE0, len = 32 | 
|---|
| 16 | P_CONFIG : org = 0x02020000, len = 128 | 
|---|
| 17 | } | 
|---|
| 18 |  | 
|---|
| 19 | SECTIONS | 
|---|
| 20 | { | 
|---|
| 21 | /* Allocated memory end markers | 
|---|
| 22 | (initialized to start of appropiate memory address).  */ | 
|---|
| 23 | __data_end  = 0x01000100; | 
|---|
| 24 | __pram_end  = 0x02000000; | 
|---|
| 25 | __flash_end = 0x02010000; | 
|---|
| 26 |  | 
|---|
| 27 | /* Global general purpose registers in direct addressing range.  */ | 
|---|
| 28 | .gpr 0x01000080 : | 
|---|
| 29 | { | 
|---|
| 30 | *(.gpr) | 
|---|
| 31 | } >D_GPR | 
|---|
| 32 |  | 
|---|
| 33 | /* Pre-allocated, pre-initialized data memory.  */ | 
|---|
| 34 | __data_run_begin = __data_end; | 
|---|
| 35 | __data_load_begin = (__flash_end + 1) & 0xFFFFFFFE; | 
|---|
| 36 | .data __data_run_begin : AT (__data_load_begin) | 
|---|
| 37 | { | 
|---|
| 38 | * (.data); | 
|---|
| 39 | * (.rodata) | 
|---|
| 40 | } >D_RAM | 
|---|
| 41 | __data_run_end  = __data_run_begin  + SIZEOF(.data); | 
|---|
| 42 | __data_load_end = __data_load_begin + SIZEOF(.data); | 
|---|
| 43 | __data_end      = __data_run_end; | 
|---|
| 44 | __flash_end     = __data_load_end; | 
|---|
| 45 |  | 
|---|
| 46 | /* Pre-allocated, uninitialized data memory.  */ | 
|---|
| 47 | __bss_begin = __data_end; | 
|---|
| 48 | .bss __bss_begin : | 
|---|
| 49 | { | 
|---|
| 50 | * (.bss) | 
|---|
| 51 | } >D_RAM | 
|---|
| 52 | __bss_end  = __bss_begin + SIZEOF(.bss); | 
|---|
| 53 | __data_end = __bss_end; | 
|---|
| 54 |  | 
|---|
| 55 | /* Pre-allocated PRAM data memory.  */ | 
|---|
| 56 | __pram_data_begin = (__pram_end + 1) & 0xFFFFFFFE; | 
|---|
| 57 | .pram_data __pram_data_begin : | 
|---|
| 58 | { | 
|---|
| 59 | * (.pram_data) | 
|---|
| 60 | } >P_RAM | 
|---|
| 61 | __pram_data_end = __pram_data_begin + SIZEOF(.pram_data); | 
|---|
| 62 | __pram_end      = __pram_data_end; | 
|---|
| 63 |  | 
|---|
| 64 | /* PRAM code.  */ | 
|---|
| 65 | __pram_run_begin  = (__pram_end + 1) & 0xFFFFFFFE; | 
|---|
| 66 | __pram_load_begin = (__flash_end + 1) & 0xFFFFFFFE; | 
|---|
| 67 | .pram __pram_run_begin : AT (__pram_load_begin) | 
|---|
| 68 | { | 
|---|
| 69 | * (.pram) | 
|---|
| 70 | } >P_RAM | 
|---|
| 71 | __pram_run_end  = __pram_run_begin  + SIZEOF(.pram); | 
|---|
| 72 | __pram_load_end = __pram_load_begin + SIZEOF(.pram); | 
|---|
| 73 |  | 
|---|
| 74 | __pram_load_shift = ((__pram_run_begin - __pram_load_begin) & 0x1FFFF) | 0x02000000; | 
|---|
| 75 | __pram_end  = __pram_run_end; | 
|---|
| 76 | __flash_end = __pram_load_end; | 
|---|
| 77 |  | 
|---|
| 78 | /* PRAM overlay code.  */ | 
|---|
| 79 | __pram_overlay_run_start  = (__pram_end  + 1) & 0xFFFFFFFE; | 
|---|
| 80 | __pram_overlay_load_start = (__flash_end + 1) & 0xFFFFFFFE; | 
|---|
| 81 | OVERLAY __pram_overlay_run_start : AT (__pram_overlay_load_start) | 
|---|
| 82 | { | 
|---|
| 83 | .pram1 { */overlay1/* (.pram); * (.pram1) } | 
|---|
| 84 | .pram2 { */overlay2/* (.pram); * (.pram2) } | 
|---|
| 85 | } >P_RAM | 
|---|
| 86 | __pram_overlay_run_end = .; | 
|---|
| 87 | __pram_overlay_load_end = __pram_overlay_load_start + SIZEOF(.pram1) + SIZEOF(.pram2); | 
|---|
| 88 | __pram_end  = __pram_overlay_run_end; | 
|---|
| 89 | __flash_end = __pram_overlay_load_end; | 
|---|
| 90 |  | 
|---|
| 91 | /* Flash code.  */ | 
|---|
| 92 | __text_begin = (__flash_end + 1) & 0xFFFFFFFE; | 
|---|
| 93 | .text __text_begin : | 
|---|
| 94 | { | 
|---|
| 95 | * (.text); | 
|---|
| 96 | * (.text.libgcc) | 
|---|
| 97 | } >P_ROM = 0xffff | 
|---|
| 98 | __text_end  = __text_begin + SIZEOF(.text); | 
|---|
| 99 | __flash_end = __text_end; | 
|---|
| 100 |  | 
|---|
| 101 | /* Strings.  */ | 
|---|
| 102 | __strings_begin = (__flash_end + 1) & 0xFFFFFFFE; | 
|---|
| 103 | .strings __strings_begin : | 
|---|
| 104 | { | 
|---|
| 105 | * (strings); | 
|---|
| 106 | * (.progmem.data) | 
|---|
| 107 | } >P_ROM = 0xffff | 
|---|
| 108 | __strings_end = __strings_begin + SIZEOF (.strings); | 
|---|
| 109 | __flash_end   = __strings_end; | 
|---|
| 110 |  | 
|---|
| 111 | .ctors : { * (.ctors) } > P_ROM | 
|---|
| 112 | .dtors : { * (.dtors) } > P_ROM | 
|---|
| 113 |  | 
|---|
| 114 | /* Reset code.  */ | 
|---|
| 115 | .reset  : { * (.reset)  } >P_RESET  = 0xffff | 
|---|
| 116 |  | 
|---|
| 117 | /* Configuration block.  */ | 
|---|
| 118 | .config : { * (.config) } >P_CONFIG = 0xffff | 
|---|
| 119 |  | 
|---|
| 120 | /* Stack.  */ | 
|---|
| 121 | PROVIDE (__stack = 0x01000FFF); | 
|---|
| 122 |  | 
|---|
| 123 | /* Stabs debugging sections.  */ | 
|---|
| 124 | .stab           0 : { *(.stab) } | 
|---|
| 125 | .stabstr        0 : { *(.stabstr) } | 
|---|
| 126 | .stab.excl      0 : { *(.stab.excl) } | 
|---|
| 127 | .stab.exclstr   0 : { *(.stab.exclstr) } | 
|---|
| 128 | .stab.index     0 : { *(.stab.index) } | 
|---|
| 129 | .stab.indexstr  0 : { *(.stab.indexstr) } | 
|---|
| 130 | .comment        0 : { *(.comment) } | 
|---|
| 131 |  | 
|---|
| 132 | /* DWARF 1.  */ | 
|---|
| 133 | .debug          0 : { *(.debug) } | 
|---|
| 134 | .line           0 : { *(.line) } | 
|---|
| 135 | /* GNU DWARF 1 extensions.  */ | 
|---|
| 136 | .debug_srcinfo  0 : { *(.debug_srcinfo) } | 
|---|
| 137 | .debug_sfnames  0 : { *(.debug_sfnames) } | 
|---|
| 138 | /* DWARF 1.1 and DWARF 2.  */ | 
|---|
| 139 | .debug_aranges  0 : { *(.debug_aranges) } | 
|---|
| 140 | .debug_pubnames 0 : { *(.debug_pubnames) } | 
|---|
| 141 | /* DWARF 2.  */ | 
|---|
| 142 | .debug_info     0 : { *(.debug_info) *(.gnu.linkonce.wi.*) } | 
|---|
| 143 | .debug_abbrev   0 : { *(.debug_abbrev) } | 
|---|
| 144 | .debug_line     0 : { *(.debug_line) } | 
|---|
| 145 | .debug_frame    0 : { *(.debug_frame) } | 
|---|
| 146 | .debug_str      0 : { *(.debug_str) } | 
|---|
| 147 | .debug_loc      0 : { *(.debug_loc) } | 
|---|
| 148 | .debug_macinfo  0 : { *(.debug_macinfo) } | 
|---|
| 149 | } | 
|---|
| 150 | EOF | 
|---|