blob: 7910d41eb886358981cd32bfc5b36ba215d4b636 [file] [log] [blame]
Haavard Skinnemoen5f97f7f2006-09-25 23:32:13 -07001/*
2 * AVR32 linker script for the Linux kernel
3 *
4 * Copyright (C) 2004-2006 Atmel Corporation
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
9 */
10#define LOAD_OFFSET 0x00000000
11#include <asm-generic/vmlinux.lds.h>
Haavard Skinnemoen7cf6ac22007-09-17 11:08:28 +020012#include <asm/cache.h>
13#include <asm/thread_info.h>
Haavard Skinnemoen5f97f7f2006-09-25 23:32:13 -070014
15OUTPUT_FORMAT("elf32-avr32", "elf32-avr32", "elf32-avr32")
16OUTPUT_ARCH(avr32)
17ENTRY(_start)
18
19/* Big endian */
20jiffies = jiffies_64 + 4;
21
22SECTIONS
23{
24 . = CONFIG_ENTRY_ADDRESS;
25 .init : AT(ADDR(.init) - LOAD_OFFSET) {
26 _stext = .;
27 __init_begin = .;
28 _sinittext = .;
29 *(.text.reset)
Sam Ravnborg01ba2bd2008-01-20 14:15:03 +010030 INIT_TEXT
Haavard Skinnemoen623b0352007-03-13 17:59:11 +010031 /*
32 * .exit.text is discarded at runtime, not
33 * link time, to deal with references from
34 * __bug_table
35 */
Sam Ravnborg01ba2bd2008-01-20 14:15:03 +010036 EXIT_TEXT
Haavard Skinnemoen5f97f7f2006-09-25 23:32:13 -070037 _einittext = .;
38 . = ALIGN(4);
39 __tagtable_begin = .;
Haavard Skinnemoenb3cfe0c2007-05-09 09:26:18 +020040 *(.taglist.init)
Haavard Skinnemoen5f97f7f2006-09-25 23:32:13 -070041 __tagtable_end = .;
Sam Ravnborg01ba2bd2008-01-20 14:15:03 +010042 INIT_DATA
Haavard Skinnemoen5f97f7f2006-09-25 23:32:13 -070043 . = ALIGN(16);
44 __setup_start = .;
45 *(.init.setup)
46 __setup_end = .;
47 . = ALIGN(4);
48 __initcall_start = .;
Andrew Morton61ce1ef2006-10-27 11:41:44 -070049 INITCALLS
Haavard Skinnemoen5f97f7f2006-09-25 23:32:13 -070050 __initcall_end = .;
51 __con_initcall_start = .;
52 *(.con_initcall.init)
53 __con_initcall_end = .;
54 __security_initcall_start = .;
55 *(.security_initcall.init)
56 __security_initcall_end = .;
Jean-Paul Saman67d38222007-02-10 01:44:44 -080057#ifdef CONFIG_BLK_DEV_INITRD
Haavard Skinnemoen5f97f7f2006-09-25 23:32:13 -070058 . = ALIGN(32);
59 __initramfs_start = .;
60 *(.init.ramfs)
61 __initramfs_end = .;
Jean-Paul Saman67d38222007-02-10 01:44:44 -080062#endif
Haavard Skinnemoen7cf6ac22007-09-17 11:08:28 +020063 . = ALIGN(PAGE_SIZE);
Haavard Skinnemoen5f97f7f2006-09-25 23:32:13 -070064 __init_end = .;
65 }
66
Haavard Skinnemoen5f97f7f2006-09-25 23:32:13 -070067 .text : AT(ADDR(.text) - LOAD_OFFSET) {
68 _evba = .;
69 _text = .;
70 *(.ex.text)
Haavard Skinnemoen5f97f7f2006-09-25 23:32:13 -070071 *(.irq.text)
Haavard Skinnemoen2507bc12007-11-28 15:04:01 +010072 KPROBES_TEXT
Sam Ravnborg76647092007-05-13 00:31:33 +020073 TEXT_TEXT
Haavard Skinnemoen5f97f7f2006-09-25 23:32:13 -070074 SCHED_TEXT
75 LOCK_TEXT
Haavard Skinnemoen5f97f7f2006-09-25 23:32:13 -070076 *(.fixup)
77 *(.gnu.warning)
78 _etext = .;
79 } = 0xd703d703
80
81 . = ALIGN(4);
82 __ex_table : AT(ADDR(__ex_table) - LOAD_OFFSET) {
83 __start___ex_table = .;
84 *(__ex_table)
85 __stop___ex_table = .;
86 }
87
88 RODATA
89
Haavard Skinnemoen7cf6ac22007-09-17 11:08:28 +020090 . = ALIGN(THREAD_SIZE);
Haavard Skinnemoen5f97f7f2006-09-25 23:32:13 -070091
92 .data : AT(ADDR(.data) - LOAD_OFFSET) {
93 _data = .;
94 _sdata = .;
95 /*
96 * First, the init task union, aligned to an 8K boundary.
97 */
98 *(.data.init_task)
99
Haavard Skinnemoencfd23e92008-01-14 22:15:05 +0100100 /* Then, the page-aligned data */
101 . = ALIGN(PAGE_SIZE);
102 *(.data.page_aligned)
103
Haavard Skinnemoen5f97f7f2006-09-25 23:32:13 -0700104 /* Then, the cacheline aligned data */
Haavard Skinnemoen7cf6ac22007-09-17 11:08:28 +0200105 . = ALIGN(L1_CACHE_BYTES);
Haavard Skinnemoen5f97f7f2006-09-25 23:32:13 -0700106 *(.data.cacheline_aligned)
107
108 /* And the rest... */
109 *(.data.rel*)
Sam Ravnborgca967252007-05-17 13:38:44 +0200110 DATA_DATA
Haavard Skinnemoen5f97f7f2006-09-25 23:32:13 -0700111 CONSTRUCTORS
112
113 _edata = .;
114 }
115
116
117 . = ALIGN(8);
118 .bss : AT(ADDR(.bss) - LOAD_OFFSET) {
119 __bss_start = .;
120 *(.bss)
121 *(COMMON)
122 . = ALIGN(8);
123 __bss_stop = .;
124 _end = .;
125 }
126
127 /* When something in the kernel is NOT compiled as a module, the module
128 * cleanup code and data are put into these segments. Both can then be
129 * thrown away, as cleanup code is never called unless it's a module.
130 */
131 /DISCARD/ : {
Sam Ravnborg01ba2bd2008-01-20 14:15:03 +0100132 EXIT_DATA
Haavard Skinnemoen5f97f7f2006-09-25 23:32:13 -0700133 *(.exitcall.exit)
134 }
135
136 DWARF_DEBUG
137}