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