[PATCH] ppc32: discard *.exit.text and *.exit.data sections
[linux-2.6.git] / arch / ppc / kernel / vmlinux.lds.S
1 #include <asm-generic/vmlinux.lds.h>
2
3 OUTPUT_ARCH(powerpc:common)
4 jiffies = jiffies_64 + 4;
5 SECTIONS
6 {
7   /* Read-only sections, merged into text segment: */
8   . = + SIZEOF_HEADERS;
9   .interp : { *(.interp) }
10   .hash          : { *(.hash)           }
11   .dynsym        : { *(.dynsym)         }
12   .dynstr        : { *(.dynstr)         }
13   .rel.text      : { *(.rel.text)               }
14   .rela.text     : { *(.rela.text)      }
15   .rel.data      : { *(.rel.data)               }
16   .rela.data     : { *(.rela.data)      }
17   .rel.rodata    : { *(.rel.rodata)     }
18   .rela.rodata   : { *(.rela.rodata)    }
19   .rel.got       : { *(.rel.got)                }
20   .rela.got      : { *(.rela.got)               }
21   .rel.ctors     : { *(.rel.ctors)      }
22   .rela.ctors    : { *(.rela.ctors)     }
23   .rel.dtors     : { *(.rel.dtors)      }
24   .rela.dtors    : { *(.rela.dtors)     }
25   .rel.bss       : { *(.rel.bss)                }
26   .rela.bss      : { *(.rela.bss)               }
27   .rel.plt       : { *(.rel.plt)                }
28   .rela.plt      : { *(.rela.plt)               }
29 /*  .init          : { *(.init) } =0*/
30   .plt : { *(.plt) }
31   .text      :
32   {
33     *(.text)
34     SCHED_TEXT
35     LOCK_TEXT
36     *(.fixup)
37     *(.got1)
38     __got2_start = .;
39     *(.got2)
40     __got2_end = .;
41   }
42   _etext = .;
43   PROVIDE (etext = .);
44
45   RODATA
46   .fini      : { *(.fini)    } =0
47   .ctors     : { *(.ctors)   }
48   .dtors     : { *(.dtors)   }
49
50   .fixup   : { *(.fixup) }
51
52         __ex_table : {
53                 __start___ex_table = .;
54                 *(__ex_table)
55                 __stop___ex_table = .;
56         }
57
58         __bug_table : {
59                 __start___bug_table = .;
60                 *(__bug_table)
61                 __stop___bug_table = .;
62         }
63
64   /* Read-write section, merged into data segment: */
65   . = ALIGN(4096);
66   .data    :
67   {
68     *(.data)
69     *(.data1)
70     *(.sdata)
71     *(.sdata2)
72     *(.got.plt) *(.got)
73     *(.dynamic)
74     CONSTRUCTORS
75   }
76
77   . = ALIGN(4096);
78   __nosave_begin = .;
79   .data_nosave : { *(.data.nosave) }
80   . = ALIGN(4096);
81   __nosave_end = .;
82
83   . = ALIGN(32);
84   .data.cacheline_aligned : { *(.data.cacheline_aligned) }
85
86   _edata  =  .;
87   PROVIDE (edata = .);
88
89   . = ALIGN(8192);
90   .data.init_task : { *(.data.init_task) }
91
92   . = ALIGN(4096);
93   __init_begin = .;
94   .init.text : {
95         _sinittext = .;
96         *(.init.text)
97         _einittext = .;
98   }
99   /* .exit.text is discarded at runtime, not link time,
100      to deal with references from __bug_table */
101   .exit.text : { *(.exit.text) }
102   .init.data : {
103     *(.init.data);
104     __vtop_table_begin = .;
105     *(.vtop_fixup);
106     __vtop_table_end = .;
107     __ptov_table_begin = .;
108     *(.ptov_fixup);
109     __ptov_table_end = .;
110   }
111   . = ALIGN(16);
112   __setup_start = .;
113   .init.setup : { *(.init.setup) }
114   __setup_end = .;
115   __initcall_start = .;
116   .initcall.init : {
117         *(.initcall1.init)
118         *(.initcall2.init)
119         *(.initcall3.init)
120         *(.initcall4.init)
121         *(.initcall5.init)
122         *(.initcall6.init)
123         *(.initcall7.init)
124   }
125   __initcall_end = .;
126
127   __con_initcall_start = .;
128   .con_initcall.init : { *(.con_initcall.init) }
129   __con_initcall_end = .;
130
131   SECURITY_INIT
132
133   __start___ftr_fixup = .;
134   __ftr_fixup : { *(__ftr_fixup) }
135   __stop___ftr_fixup = .;
136
137   . = ALIGN(32);
138   __per_cpu_start = .;
139   .data.percpu  : { *(.data.percpu) }
140   __per_cpu_end = .;
141
142   . = ALIGN(4096);
143   __initramfs_start = .;
144   .init.ramfs : { *(.init.ramfs) }
145   __initramfs_end = .;
146
147   . = ALIGN(4096);
148   __init_end = .;
149
150   . = ALIGN(4096);
151   _sextratext = .;
152   __pmac_begin = .;
153   .pmac.text : { *(.pmac.text) }
154   .pmac.data : { *(.pmac.data) }
155   . = ALIGN(4096);
156   __pmac_end = .;
157
158   . = ALIGN(4096);
159   __prep_begin = .;
160   .prep.text : { *(.prep.text) }
161   .prep.data : { *(.prep.data) }
162   . = ALIGN(4096);
163   __prep_end = .;
164
165   . = ALIGN(4096);
166   __chrp_begin = .;
167   .chrp.text : { *(.chrp.text) }
168   .chrp.data : { *(.chrp.data) }
169   . = ALIGN(4096);
170   __chrp_end = .;
171
172   . = ALIGN(4096);
173   __openfirmware_begin = .;
174   .openfirmware.text : { *(.openfirmware.text) }
175   .openfirmware.data : { *(.openfirmware.data) }
176   . = ALIGN(4096);
177   __openfirmware_end = .;
178   _eextratext = .;
179
180   __bss_start = .;
181   .bss       :
182   {
183    *(.sbss) *(.scommon)
184    *(.dynbss)
185    *(.bss)
186    *(COMMON)
187   }
188   __bss_stop = .;
189
190   _end = . ;
191   PROVIDE (end = .);
192
193   /* Sections to be discarded. */
194   /DISCARD/ : {
195     *(.exitcall.exit)
196     *(.exit.data)
197   }
198 }