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