• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/*
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>
12#include <asm/cache.h>
13#include <asm/thread_info.h>
14
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)
30			INIT_TEXT
31			/*
32			 * .exit.text is discarded at runtime, not
33			 * link time, to deal with references from
34			 * __bug_table
35			 */
36			EXIT_TEXT
37			_einittext = .;
38		. = ALIGN(4);
39		__tagtable_begin = .;
40			*(.taglist.init)
41		__tagtable_end = .;
42			INIT_DATA
43		. = ALIGN(16);
44		__setup_start = .;
45			*(.init.setup)
46		__setup_end = .;
47		. = ALIGN(4);
48		__initcall_start = .;
49			INITCALLS
50		__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 = .;
57#ifdef CONFIG_BLK_DEV_INITRD
58		. = ALIGN(32);
59		__initramfs_start = .;
60			*(.init.ramfs)
61		__initramfs_end = .;
62#endif
63		. = ALIGN(PAGE_SIZE);
64		__init_end = .;
65	}
66
67	.text		: AT(ADDR(.text) - LOAD_OFFSET) {
68		_evba = .;
69		_text = .;
70		*(.ex.text)
71		*(.irq.text)
72		KPROBES_TEXT
73		TEXT_TEXT
74		SCHED_TEXT
75		LOCK_TEXT
76		*(.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
90	. = ALIGN(THREAD_SIZE);
91
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
100		/* Then, the page-aligned data */
101		. = ALIGN(PAGE_SIZE);
102		*(.data.page_aligned)
103
104		/* Then, the cacheline aligned data */
105		. = ALIGN(L1_CACHE_BYTES);
106		*(.data.cacheline_aligned)
107
108		/* And the rest... */
109		*(.data.rel*)
110		DATA_DATA
111		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/       	: {
132		EXIT_DATA
133		*(.exitcall.exit)
134	}
135
136	DWARF_DEBUG
137}
138