blob: 728bbd9e7d4c1105b802cbc53558e54c350db93a [file] [log] [blame]
Mikael Starvik51533b62005-07-27 11:44:44 -07001/* ld script to make the Linux/CRIS kernel
2 * Authors: Bjorn Wesen (bjornw@axis.com)
3 *
4 * It is VERY DANGEROUS to fiddle around with the symbols in this
5 * script. It is for example quite vital that all generated sections
6 * that are used are actually named here, otherwise the linker will
7 * put them at the end, where the init stuff is which is FREED after
8 * the kernel has booted.
9 */
10
Mikael Starvik51533b62005-07-27 11:44:44 -070011#include <asm-generic/vmlinux.lds.h>
Jesper Nilssonbaa69b12008-01-30 12:57:31 +010012#include <asm/page.h>
13
14#ifdef CONFIG_ETRAX_VMEM_SIZE
15#define __CONFIG_ETRAX_VMEM_SIZE CONFIG_ETRAX_VMEM_SIZE
16#else
17#define __CONFIG_ETRAX_VMEM_SIZE 0
18#endif
Mikael Starvik51533b62005-07-27 11:44:44 -070019
Jesper Nilssonc5ec6fb2008-10-22 23:57:53 +020020
Mikael Starvik51533b62005-07-27 11:44:44 -070021jiffies = jiffies_64;
22SECTIONS
23{
24 . = DRAM_VIRTUAL_BASE;
25 dram_start = .;
Jesper Nilssonc5ec6fb2008-10-22 23:57:53 +020026#ifdef CONFIG_ETRAX_ARCH_V10
27 ibr_start = .;
28#else
Mikael Starvik51533b62005-07-27 11:44:44 -070029 ebp_start = .;
Jesper Nilssonbaa69b12008-01-30 12:57:31 +010030 /* The boot section is only necessary until the VCS top */
31 /* level testbench includes both flash and DRAM. */
Mikael Starvik51533b62005-07-27 11:44:44 -070032 .boot : { *(.boot) }
Jesper Nilssonc5ec6fb2008-10-22 23:57:53 +020033#endif
Mikael Starvik51533b62005-07-27 11:44:44 -070034
Jesper Nilssonc5ec6fb2008-10-22 23:57:53 +020035 /* see head.S and pages reserved at the start */
Jesper Nilssonbaa69b12008-01-30 12:57:31 +010036 . = DRAM_VIRTUAL_BASE + 0x4000;
Mikael Starvik51533b62005-07-27 11:44:44 -070037
Jesper Nilssonc5ec6fb2008-10-22 23:57:53 +020038 _text = .; /* Text and read-only data. */
39 text_start = .; /* Lots of aliases. */
Mikael Starvik51533b62005-07-27 11:44:44 -070040 _stext = .;
41 __stext = .;
42 .text : {
Jesper Nilssonbaa69b12008-01-30 12:57:31 +010043 TEXT_TEXT
Mikael Starvik51533b62005-07-27 11:44:44 -070044 SCHED_TEXT
45 LOCK_TEXT
46 *(.fixup)
47 *(.text.__*)
48 }
49
Jesper Nilssonc5ec6fb2008-10-22 23:57:53 +020050 _etext = . ; /* End of text section. */
Mikael Starvik51533b62005-07-27 11:44:44 -070051 __etext = .;
52
Jesper Nilsson24924ec2009-09-23 13:21:57 +020053 EXCEPTION_TABLE(4)
Mikael Starvik51533b62005-07-27 11:44:44 -070054
55 RODATA
56
57 . = ALIGN (4);
58 ___data_start = . ;
59 __Sdata = . ;
Jesper Nilssonc5ec6fb2008-10-22 23:57:53 +020060 .data : { /* Data */
Jesper Nilssondcb313c2010-08-04 14:01:28 +020061 CACHELINE_ALIGNED_DATA(32)
62 READ_MOSTLY_DATA(32)
Mathieu Desnoyers5c617c62007-06-16 22:28:26 -040063 DATA_DATA
Mikael Starvik51533b62005-07-27 11:44:44 -070064 }
Jesper Nilssonc5ec6fb2008-10-22 23:57:53 +020065 __edata = . ; /* End of data section. */
Mikael Starvik51533b62005-07-27 11:44:44 -070066 _edata = . ;
67
Jesper Nilsson24924ec2009-09-23 13:21:57 +020068 INIT_TASK_DATA_SECTION(PAGE_SIZE)
Mikael Starvik51533b62005-07-27 11:44:44 -070069
Jesper Nilssonc5ec6fb2008-10-22 23:57:53 +020070 . = ALIGN(PAGE_SIZE); /* Init code and data. */
Jesper Nilssonbaa69b12008-01-30 12:57:31 +010071 __init_begin = .;
Jesper Nilsson24924ec2009-09-23 13:21:57 +020072 INIT_TEXT_SECTION(PAGE_SIZE)
Sam Ravnborg01ba2bd2008-01-20 14:15:03 +010073 .init.data : { INIT_DATA }
Jesper Nilsson24924ec2009-09-23 13:21:57 +020074 .init.setup : { INIT_SETUP(16) }
Jesper Nilssonbaa69b12008-01-30 12:57:31 +010075 .initcall.init : {
Jesper Nilsson24924ec2009-09-23 13:21:57 +020076 INIT_CALLS
Mikael Starvik51533b62005-07-27 11:44:44 -070077 }
78
79 .con_initcall.init : {
Jesper Nilsson24924ec2009-09-23 13:21:57 +020080 CON_INITCALL
Mikael Starvik51533b62005-07-27 11:44:44 -070081 }
82 SECURITY_INIT
83
Jesper Nilsson7c8a25b2010-08-04 14:10:04 +020084 /* .exit.text is discarded at runtime, not link time,
85 * to deal with references from __bug_table
86 */
87 .exit.text : {
88 EXIT_TEXT
89 }
90 .exit.data : {
91 EXIT_DATA
92 }
93
Jesper Nilssonc5ec6fb2008-10-22 23:57:53 +020094#ifdef CONFIG_ETRAX_ARCH_V10
95#ifdef CONFIG_BLK_DEV_INITRD
96 .init.ramfs : {
97 __initramfs_start = .;
98 *(.init.ramfs)
99 __initramfs_end = .;
100 }
101#endif
102#endif
103 __vmlinux_end = .; /* Last address of the physical file. */
104#ifdef CONFIG_ETRAX_ARCH_V32
Tejun Heo19df0c22011-01-25 14:26:50 +0100105 PERCPU(32, PAGE_SIZE)
Mikael Starvik51533b62005-07-27 11:44:44 -0700106
107 .init.ramfs : {
Jesper Nilsson24924ec2009-09-23 13:21:57 +0200108 INIT_RAM_FS
Mikael Starvik51533b62005-07-27 11:44:44 -0700109 }
Jesper Nilssonc5ec6fb2008-10-22 23:57:53 +0200110#endif
Mikael Starvik51533b62005-07-27 11:44:44 -0700111
Jesper Nilssonbaa69b12008-01-30 12:57:31 +0100112 /*
113 * We fill to the next page, so we can discard all init
114 * pages without needing to consider what payload might be
115 * appended to the kernel image.
116 */
Jesper Nilssonc5ec6fb2008-10-22 23:57:53 +0200117 . = ALIGN(PAGE_SIZE);
Jesper Nilssonbaa69b12008-01-30 12:57:31 +0100118
119 __init_end = .;
Mikael Starvik51533b62005-07-27 11:44:44 -0700120
Jesper Nilssonc5ec6fb2008-10-22 23:57:53 +0200121 __data_end = . ; /* Move to _edata ? */
Jesper Nilsson85d98652010-08-04 18:30:01 +0200122 BSS_SECTION(1, 1, 1)
Mikael Starvik51533b62005-07-27 11:44:44 -0700123
124 . = ALIGN (0x20);
125 _end = .;
126 __end = .;
127
Jesper Nilssonbaa69b12008-01-30 12:57:31 +0100128 dram_end = dram_start + (CONFIG_ETRAX_DRAM_SIZE - __CONFIG_ETRAX_VMEM_SIZE)*1024*1024;
Tejun Heo023bf6f2009-07-09 11:27:40 +0900129
130 DISCARDS
Mikael Starvik51533b62005-07-27 11:44:44 -0700131}