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