blob: 8fcd0f1e21deafef6da4a3f32c39b29b4887ce8a [file] [log] [blame]
David Howellsb920de12008-02-08 04:19:31 -08001/* MN10300 Main kernel linker script
2 *
3 * Copyright (C) 2007 Red Hat, Inc. All Rights Reserved.
4 * Written by David Howells (dhowells@redhat.com)
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public Licence
8 * as published by the Free Software Foundation; either version
9 * 2 of the Licence, or (at your option) any later version.
10 */
11#define __VMLINUX_LDS__
12#include <asm-generic/vmlinux.lds.h>
13#include <asm/thread_info.h>
Cyrill Gorcunovcb328982008-12-10 12:43:19 +000014#include <asm/page.h>
David Howellsb920de12008-02-08 04:19:31 -080015
16OUTPUT_FORMAT("elf32-am33lin", "elf32-am33lin", "elf32-am33lin")
17OUTPUT_ARCH(mn10300)
18ENTRY(_start)
19jiffies = jiffies_64;
20#ifndef CONFIG_MN10300_CURRENT_IN_E2
21current = __current;
22#endif
23SECTIONS
24{
25 . = CONFIG_KERNEL_TEXT_ADDRESS;
26 /* read-only */
27 _stext = .;
28 _text = .; /* Text and read-only data */
29 .text : {
Tim Abbott9760f8f2009-04-25 22:11:04 -040030 HEAD_TEXT
David Howellsb920de12008-02-08 04:19:31 -080031 TEXT_TEXT
32 SCHED_TEXT
33 LOCK_TEXT
34 KPROBES_TEXT
35 *(.fixup)
36 *(.gnu.warning)
37 } = 0xcb
38
39 _etext = .; /* End of text section */
40
David Howells2e8b5a02009-06-22 15:32:36 +010041 EXCEPTION_TABLE(16)
David Howellsb920de12008-02-08 04:19:31 -080042 BUG_TABLE
43
David Howells2e8b5a02009-06-22 15:32:36 +010044 RO_DATA(PAGE_SIZE)
David Howellsb920de12008-02-08 04:19:31 -080045
46 /* writeable */
47 .data : { /* Data */
48 DATA_DATA
49 CONSTRUCTORS
50 }
51
David Howells2e8b5a02009-06-22 15:32:36 +010052 .data_nosave : { NOSAVE_DATA; }
David Howellsb920de12008-02-08 04:19:31 -080053
David Howells2e8b5a02009-06-22 15:32:36 +010054 .data.page_aligned : { PAGE_ALIGNED_DATA(PAGE_SIZE); }
55 .data.cacheline_aligned : { CACHELINE_ALIGNED_DATA(32); }
David Howellsb920de12008-02-08 04:19:31 -080056
57 /* rarely changed data like cpu maps */
58 . = ALIGN(32);
59 .data.read_mostly : AT(ADDR(.data.read_mostly)) {
David Howells2e8b5a02009-06-22 15:32:36 +010060 READ_MOSTLY_DATA(32);
David Howellsb920de12008-02-08 04:19:31 -080061 _edata = .; /* End of data section */
62 }
63
David Howells2e8b5a02009-06-22 15:32:36 +010064 .data.init_task : { INIT_TASK(THREAD_SIZE); }
David Howellsb920de12008-02-08 04:19:31 -080065
66 /* might get freed after init */
Cyrill Gorcunovcb328982008-12-10 12:43:19 +000067 . = ALIGN(PAGE_SIZE);
David Howellsb920de12008-02-08 04:19:31 -080068 .smp_locks : AT(ADDR(.smp_locks) - LOAD_OFFSET) {
69 __smp_locks = .;
70 *(.smp_locks)
71 __smp_locks_end = .;
72 }
73
74 /* will be freed after init */
Cyrill Gorcunovcb328982008-12-10 12:43:19 +000075 . = ALIGN(PAGE_SIZE); /* Init code and data */
David Howellsb920de12008-02-08 04:19:31 -080076 __init_begin = .;
77 .init.text : {
78 _sinittext = .;
David Howells2e8b5a02009-06-22 15:32:36 +010079 INIT_TEXT;
David Howellsb920de12008-02-08 04:19:31 -080080 _einittext = .;
81 }
David Howells2e8b5a02009-06-22 15:32:36 +010082 .init.data : { INIT_DATA; }
83 .setup.init : { INIT_SETUP(16); }
David Howellsb920de12008-02-08 04:19:31 -080084
85 __initcall_start = .;
86 .initcall.init : {
87 INITCALLS
88 }
89 __initcall_end = .;
David Howells2e8b5a02009-06-22 15:32:36 +010090 .con_initcall.init : { CON_INITCALL; }
David Howellsb920de12008-02-08 04:19:31 -080091
92 SECURITY_INIT
93 . = ALIGN(4);
94 __alt_instructions = .;
95 .altinstructions : { *(.altinstructions) }
96 __alt_instructions_end = .;
97 .altinstr_replacement : { *(.altinstr_replacement) }
98 /* .exit.text is discard at runtime, not link time, to deal with references
99 from .altinstructions and .eh_frame */
David Howells2e8b5a02009-06-22 15:32:36 +0100100 .exit.text : { EXIT_TEXT; }
101 .exit.data : { EXIT_DATA; }
David Howellsb920de12008-02-08 04:19:31 -0800102
David Howells2e8b5a02009-06-22 15:32:36 +0100103 .init.ramfs : { INIT_RAM_FS; }
David Howellsb920de12008-02-08 04:19:31 -0800104
Cyrill Gorcunovcb328982008-12-10 12:43:19 +0000105 PERCPU(32)
106 . = ALIGN(PAGE_SIZE);
David Howellsb920de12008-02-08 04:19:31 -0800107 __init_end = .;
108 /* freed after init ends here */
109
David Howells2e8b5a02009-06-22 15:32:36 +0100110 BSS(4)
David Howellsb920de12008-02-08 04:19:31 -0800111
112 _end = . ;
113
114 /* This is where the kernel creates the early boot page tables */
Cyrill Gorcunovcb328982008-12-10 12:43:19 +0000115 . = ALIGN(PAGE_SIZE);
David Howellsb920de12008-02-08 04:19:31 -0800116 pg0 = .;
117
David Howellsb920de12008-02-08 04:19:31 -0800118 STABS_DEBUG
119
120 DWARF_DEBUG
Tejun Heo023bf6f2009-07-09 11:27:40 +0900121
122 /* Sections to be discarded */
123 DISCARDS
David Howellsb920de12008-02-08 04:19:31 -0800124}