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