| 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
|
|---|