xref: /openbsd-src/gnu/usr.bin/binutils/ld/scripttempl/ip2k.sc (revision d2201f2f89f0be1a0be6f7568000ed297414a06d)
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