5d6f29df698cf82f34af81988642c9d5b21b0dc3
[linux-flexiantxendom0-3.2.10.git] / arch / i386 / vmlinux.lds.S
1 /* ld script to make i386 Linux kernel
2  * Written by Martin Mares <mj@atrey.karlin.mff.cuni.cz>;
3  */
4 OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386")
5 OUTPUT_ARCH(i386)
6 ENTRY(_start)
7 jiffies = jiffies_64;
8 SECTIONS
9 {
10   . = 0xC0000000 + 0x100000;
11   /* read-only */
12   _text = .;                    /* Text and read-only data */
13   .text : {
14         *(.text)
15         *(.fixup)
16         *(.gnu.warning)
17         } = 0x9090
18
19   _etext = .;                   /* End of text section */
20
21   .rodata : { *(.rodata) *(.rodata.*) }
22   .kstrtab : { *(.kstrtab) }
23
24   . = ALIGN(16);                /* Exception table */
25   __start___ex_table = .;
26   __ex_table : { *(__ex_table) }
27   __stop___ex_table = .;
28
29   __start___ksymtab = .;        /* Kernel symbol table */
30   __ksymtab : { *(__ksymtab) }
31   __stop___ksymtab = .;
32
33   __start___kallsyms = .;       /* All kernel symbols */
34   __kallsyms : { *(__kallsyms) }
35   __stop___kallsyms = .;
36
37   /* writeable */
38   .data : {                     /* Data */
39         *(.data)
40         CONSTRUCTORS
41         }
42
43   . = ALIGN(4096);
44   __nosave_begin = .;
45   .data_nosave : { *(.data.nosave) }
46   . = ALIGN(4096);
47   __nosave_end = .;
48
49   . = ALIGN(4096);
50   .data.page_aligned : { *(.data.idt) }
51
52   . = ALIGN(32);
53   .data.cacheline_aligned : { *(.data.cacheline_aligned) }
54
55   _edata = .;                   /* End of data section */
56
57   . = ALIGN(8192);              /* init_task */
58   .data.init_task : { *(.data.init_task) }
59
60   /* will be freed after init */
61   . = ALIGN(4096);              /* Init code and data */
62   __init_begin = .;
63   .init.text : { *(.init.text) }
64   .init.data : { *(.init.data) }
65   . = ALIGN(16);
66   __setup_start = .;
67   .init.setup : { *(.init.setup) }
68   __setup_end = .;
69   __initcall_start = .;
70   .initcall.init : {
71         *(.initcall1.init) 
72         *(.initcall2.init) 
73         *(.initcall3.init) 
74         *(.initcall4.init) 
75         *(.initcall5.init) 
76         *(.initcall6.init) 
77         *(.initcall7.init)
78   }
79   __initcall_end = .;
80   . = ALIGN(4096);
81   __initramfs_start = .;
82   .init.ramfs : { *(.init.initramfs) }
83   __initramfs_end = .;
84   . = ALIGN(32);
85   __per_cpu_start = .;
86   .data.percpu  : { *(.data.percpu) }
87   __per_cpu_end = .;
88   . = ALIGN(4096);
89   __init_end = .;
90   /* freed after init ends here */
91         
92   __bss_start = .;              /* BSS */
93   .bss : { *(.bss) }
94   __bss_stop = .; 
95
96   _end = . ;
97
98   /* Sections to be discarded */
99   /DISCARD/ : {
100         *(.exit.text)
101         *(.exit.data)
102         *(.exitcall.exit)
103         }
104
105   /* Stabs debugging sections.  */
106   .stab 0 : { *(.stab) }
107   .stabstr 0 : { *(.stabstr) }
108   .stab.excl 0 : { *(.stab.excl) }
109   .stab.exclstr 0 : { *(.stab.exclstr) }
110   .stab.index 0 : { *(.stab.index) }
111   .stab.indexstr 0 : { *(.stab.indexstr) }
112   .comment 0 : { *(.comment) }
113 }