11da177e4SLinus Torvalds #ifndef LOAD_OFFSET
21da177e4SLinus Torvalds #define LOAD_OFFSET 0
31da177e4SLinus Torvalds #endif
41da177e4SLinus Torvalds 
51da177e4SLinus Torvalds #ifndef VMLINUX_SYMBOL
61da177e4SLinus Torvalds #define VMLINUX_SYMBOL(_sym_) _sym_
71da177e4SLinus Torvalds #endif
81da177e4SLinus Torvalds 
96d30e3a8SSam Ravnborg /* Align . to a 8 byte boundary equals to maximum function alignment. */
106d30e3a8SSam Ravnborg #define ALIGN_FUNCTION()  . = ALIGN(8)
116d30e3a8SSam Ravnborg 
121da177e4SLinus Torvalds #define RODATA								\
1337b73c82SArjan van de Ven 	. = ALIGN(4096);						\
1437b73c82SArjan van de Ven 	__start_rodata = .;						\
151da177e4SLinus Torvalds 	.rodata           : AT(ADDR(.rodata) - LOAD_OFFSET) {		\
161da177e4SLinus Torvalds 		*(.rodata) *(.rodata.*)					\
171da177e4SLinus Torvalds 		*(__vermagic)		/* Kernel version magic */	\
181da177e4SLinus Torvalds 	}								\
191da177e4SLinus Torvalds 									\
201da177e4SLinus Torvalds 	.rodata1          : AT(ADDR(.rodata1) - LOAD_OFFSET) {		\
211da177e4SLinus Torvalds 		*(.rodata1)						\
221da177e4SLinus Torvalds 	}								\
231da177e4SLinus Torvalds 									\
241da177e4SLinus Torvalds 	/* PCI quirks */						\
251da177e4SLinus Torvalds 	.pci_fixup        : AT(ADDR(.pci_fixup) - LOAD_OFFSET) {	\
261da177e4SLinus Torvalds 		VMLINUX_SYMBOL(__start_pci_fixups_early) = .;		\
271da177e4SLinus Torvalds 		*(.pci_fixup_early)					\
281da177e4SLinus Torvalds 		VMLINUX_SYMBOL(__end_pci_fixups_early) = .;		\
291da177e4SLinus Torvalds 		VMLINUX_SYMBOL(__start_pci_fixups_header) = .;		\
301da177e4SLinus Torvalds 		*(.pci_fixup_header)					\
311da177e4SLinus Torvalds 		VMLINUX_SYMBOL(__end_pci_fixups_header) = .;		\
321da177e4SLinus Torvalds 		VMLINUX_SYMBOL(__start_pci_fixups_final) = .;		\
331da177e4SLinus Torvalds 		*(.pci_fixup_final)					\
341da177e4SLinus Torvalds 		VMLINUX_SYMBOL(__end_pci_fixups_final) = .;		\
351da177e4SLinus Torvalds 		VMLINUX_SYMBOL(__start_pci_fixups_enable) = .;		\
361da177e4SLinus Torvalds 		*(.pci_fixup_enable)					\
371da177e4SLinus Torvalds 		VMLINUX_SYMBOL(__end_pci_fixups_enable) = .;		\
381da177e4SLinus Torvalds 	}								\
391da177e4SLinus Torvalds 									\
40394b701cSMatt Porter 	/* RapidIO route ops */						\
41394b701cSMatt Porter 	.rio_route        : AT(ADDR(.rio_route) - LOAD_OFFSET) {	\
42394b701cSMatt Porter 		VMLINUX_SYMBOL(__start_rio_route_ops) = .;		\
43394b701cSMatt Porter 		*(.rio_route_ops)					\
44394b701cSMatt Porter 		VMLINUX_SYMBOL(__end_rio_route_ops) = .;		\
45394b701cSMatt Porter 	}								\
46394b701cSMatt Porter 									\
471da177e4SLinus Torvalds 	/* Kernel symbol table: Normal symbols */			\
481da177e4SLinus Torvalds 	__ksymtab         : AT(ADDR(__ksymtab) - LOAD_OFFSET) {		\
491da177e4SLinus Torvalds 		VMLINUX_SYMBOL(__start___ksymtab) = .;			\
501da177e4SLinus Torvalds 		*(__ksymtab)						\
511da177e4SLinus Torvalds 		VMLINUX_SYMBOL(__stop___ksymtab) = .;			\
521da177e4SLinus Torvalds 	}								\
531da177e4SLinus Torvalds 									\
541da177e4SLinus Torvalds 	/* Kernel symbol table: GPL-only symbols */			\
551da177e4SLinus Torvalds 	__ksymtab_gpl     : AT(ADDR(__ksymtab_gpl) - LOAD_OFFSET) {	\
561da177e4SLinus Torvalds 		VMLINUX_SYMBOL(__start___ksymtab_gpl) = .;		\
571da177e4SLinus Torvalds 		*(__ksymtab_gpl)					\
581da177e4SLinus Torvalds 		VMLINUX_SYMBOL(__stop___ksymtab_gpl) = .;		\
591da177e4SLinus Torvalds 	}								\
601da177e4SLinus Torvalds 									\
61f71d20e9SArjan van de Ven 	/* Kernel symbol table: Normal unused symbols */		\
62f71d20e9SArjan van de Ven 	__ksymtab_unused  : AT(ADDR(__ksymtab_unused) - LOAD_OFFSET) {	\
63f71d20e9SArjan van de Ven 		VMLINUX_SYMBOL(__start___ksymtab_unused) = .;		\
64f71d20e9SArjan van de Ven 		*(__ksymtab_unused)					\
65f71d20e9SArjan van de Ven 		VMLINUX_SYMBOL(__stop___ksymtab_unused) = .;		\
66f71d20e9SArjan van de Ven 	}								\
67f71d20e9SArjan van de Ven 									\
68f71d20e9SArjan van de Ven 	/* Kernel symbol table: GPL-only unused symbols */		\
69f71d20e9SArjan van de Ven 	__ksymtab_unused_gpl : AT(ADDR(__ksymtab_unused_gpl) - LOAD_OFFSET) { \
70f71d20e9SArjan van de Ven 		VMLINUX_SYMBOL(__start___ksymtab_unused_gpl) = .;	\
71f71d20e9SArjan van de Ven 		*(__ksymtab_unused_gpl)					\
72f71d20e9SArjan van de Ven 		VMLINUX_SYMBOL(__stop___ksymtab_unused_gpl) = .;	\
73f71d20e9SArjan van de Ven 	}								\
74f71d20e9SArjan van de Ven 									\
759f28bb7eSGreg Kroah-Hartman 	/* Kernel symbol table: GPL-future-only symbols */		\
769f28bb7eSGreg Kroah-Hartman 	__ksymtab_gpl_future : AT(ADDR(__ksymtab_gpl_future) - LOAD_OFFSET) { \
779f28bb7eSGreg Kroah-Hartman 		VMLINUX_SYMBOL(__start___ksymtab_gpl_future) = .;	\
789f28bb7eSGreg Kroah-Hartman 		*(__ksymtab_gpl_future)					\
799f28bb7eSGreg Kroah-Hartman 		VMLINUX_SYMBOL(__stop___ksymtab_gpl_future) = .;	\
809f28bb7eSGreg Kroah-Hartman 	}								\
819f28bb7eSGreg Kroah-Hartman 									\
821da177e4SLinus Torvalds 	/* Kernel symbol table: Normal symbols */			\
831da177e4SLinus Torvalds 	__kcrctab         : AT(ADDR(__kcrctab) - LOAD_OFFSET) {		\
841da177e4SLinus Torvalds 		VMLINUX_SYMBOL(__start___kcrctab) = .;			\
851da177e4SLinus Torvalds 		*(__kcrctab)						\
861da177e4SLinus Torvalds 		VMLINUX_SYMBOL(__stop___kcrctab) = .;			\
871da177e4SLinus Torvalds 	}								\
881da177e4SLinus Torvalds 									\
891da177e4SLinus Torvalds 	/* Kernel symbol table: GPL-only symbols */			\
901da177e4SLinus Torvalds 	__kcrctab_gpl     : AT(ADDR(__kcrctab_gpl) - LOAD_OFFSET) {	\
911da177e4SLinus Torvalds 		VMLINUX_SYMBOL(__start___kcrctab_gpl) = .;		\
921da177e4SLinus Torvalds 		*(__kcrctab_gpl)					\
931da177e4SLinus Torvalds 		VMLINUX_SYMBOL(__stop___kcrctab_gpl) = .;		\
941da177e4SLinus Torvalds 	}								\
951da177e4SLinus Torvalds 									\
96f71d20e9SArjan van de Ven 	/* Kernel symbol table: Normal unused symbols */		\
97f71d20e9SArjan van de Ven 	__kcrctab_unused  : AT(ADDR(__kcrctab_unused) - LOAD_OFFSET) {	\
98f71d20e9SArjan van de Ven 		VMLINUX_SYMBOL(__start___kcrctab_unused) = .;		\
99f71d20e9SArjan van de Ven 		*(__kcrctab_unused)					\
100f71d20e9SArjan van de Ven 		VMLINUX_SYMBOL(__stop___kcrctab_unused) = .;		\
101f71d20e9SArjan van de Ven 	}								\
102f71d20e9SArjan van de Ven 									\
103f71d20e9SArjan van de Ven 	/* Kernel symbol table: GPL-only unused symbols */		\
104f71d20e9SArjan van de Ven 	__kcrctab_unused_gpl : AT(ADDR(__kcrctab_unused_gpl) - LOAD_OFFSET) { \
105f71d20e9SArjan van de Ven 		VMLINUX_SYMBOL(__start___kcrctab_unused_gpl) = .;	\
106f71d20e9SArjan van de Ven 		*(__kcrctab_unused_gpl)					\
107f71d20e9SArjan van de Ven 		VMLINUX_SYMBOL(__stop___kcrctab_unused_gpl) = .;	\
108f71d20e9SArjan van de Ven 	}								\
109f71d20e9SArjan van de Ven 									\
1109f28bb7eSGreg Kroah-Hartman 	/* Kernel symbol table: GPL-future-only symbols */		\
1119f28bb7eSGreg Kroah-Hartman 	__kcrctab_gpl_future : AT(ADDR(__kcrctab_gpl_future) - LOAD_OFFSET) { \
1129f28bb7eSGreg Kroah-Hartman 		VMLINUX_SYMBOL(__start___kcrctab_gpl_future) = .;	\
1139f28bb7eSGreg Kroah-Hartman 		*(__kcrctab_gpl_future)					\
1149f28bb7eSGreg Kroah-Hartman 		VMLINUX_SYMBOL(__stop___kcrctab_gpl_future) = .;	\
1159f28bb7eSGreg Kroah-Hartman 	}								\
1169f28bb7eSGreg Kroah-Hartman 									\
1171da177e4SLinus Torvalds 	/* Kernel symbol table: strings */				\
1181da177e4SLinus Torvalds         __ksymtab_strings : AT(ADDR(__ksymtab_strings) - LOAD_OFFSET) {	\
1191da177e4SLinus Torvalds 		*(__ksymtab_strings)					\
1201da177e4SLinus Torvalds 	}								\
1211da177e4SLinus Torvalds 									\
1221da177e4SLinus Torvalds 	/* Built-in module parameters. */				\
1231da177e4SLinus Torvalds 	__param : AT(ADDR(__param) - LOAD_OFFSET) {			\
1241da177e4SLinus Torvalds 		VMLINUX_SYMBOL(__start___param) = .;			\
1251da177e4SLinus Torvalds 		*(__param)						\
1261da177e4SLinus Torvalds 		VMLINUX_SYMBOL(__stop___param) = .;			\
1277583ddfdSMarcelo Tosatti 	}								\
1287583ddfdSMarcelo Tosatti 	__end_rodata = .;						\
1297583ddfdSMarcelo Tosatti 	. = ALIGN(4096);
1301da177e4SLinus Torvalds 
1311da177e4SLinus Torvalds #define SECURITY_INIT							\
13260bad7faSEric W. Biederman 	.security_initcall.init : AT(ADDR(.security_initcall.init) - LOAD_OFFSET) { \
1331da177e4SLinus Torvalds 		VMLINUX_SYMBOL(__security_initcall_start) = .;		\
1341da177e4SLinus Torvalds 		*(.security_initcall.init) 				\
1351da177e4SLinus Torvalds 		VMLINUX_SYMBOL(__security_initcall_end) = .;		\
1361da177e4SLinus Torvalds 	}
1371da177e4SLinus Torvalds 
1386d30e3a8SSam Ravnborg /* sched.text is aling to function alignment to secure we have same
1396d30e3a8SSam Ravnborg  * address even at second ld pass when generating System.map */
1401da177e4SLinus Torvalds #define SCHED_TEXT							\
1416d30e3a8SSam Ravnborg 		ALIGN_FUNCTION();					\
1421da177e4SLinus Torvalds 		VMLINUX_SYMBOL(__sched_text_start) = .;			\
1431da177e4SLinus Torvalds 		*(.sched.text)						\
1441da177e4SLinus Torvalds 		VMLINUX_SYMBOL(__sched_text_end) = .;
1451da177e4SLinus Torvalds 
1466d30e3a8SSam Ravnborg /* spinlock.text is aling to function alignment to secure we have same
1476d30e3a8SSam Ravnborg  * address even at second ld pass when generating System.map */
1481da177e4SLinus Torvalds #define LOCK_TEXT							\
1496d30e3a8SSam Ravnborg 		ALIGN_FUNCTION();					\
1501da177e4SLinus Torvalds 		VMLINUX_SYMBOL(__lock_text_start) = .;			\
1511da177e4SLinus Torvalds 		*(.spinlock.text)					\
1521da177e4SLinus Torvalds 		VMLINUX_SYMBOL(__lock_text_end) = .;
153d0aaff97SPrasanna S Panchamukhi 
154d0aaff97SPrasanna S Panchamukhi #define KPROBES_TEXT							\
155d0aaff97SPrasanna S Panchamukhi 		ALIGN_FUNCTION();					\
156d0aaff97SPrasanna S Panchamukhi 		VMLINUX_SYMBOL(__kprobes_text_start) = .;		\
157d0aaff97SPrasanna S Panchamukhi 		*(.kprobes.text)					\
158d0aaff97SPrasanna S Panchamukhi 		VMLINUX_SYMBOL(__kprobes_text_end) = .;
159a7d0c210SPaolo 'Blaisorblade' Giarrusso 
160a7d0c210SPaolo 'Blaisorblade' Giarrusso 		/* DWARF debug sections.
161a7d0c210SPaolo 'Blaisorblade' Giarrusso 		Symbols in the DWARF debugging sections are relative to
162a7d0c210SPaolo 'Blaisorblade' Giarrusso 		the beginning of the section so we begin them at 0.  */
163a7d0c210SPaolo 'Blaisorblade' Giarrusso #define DWARF_DEBUG							\
164a7d0c210SPaolo 'Blaisorblade' Giarrusso 		/* DWARF 1 */						\
165a7d0c210SPaolo 'Blaisorblade' Giarrusso 		.debug          0 : { *(.debug) }			\
166a7d0c210SPaolo 'Blaisorblade' Giarrusso 		.line           0 : { *(.line) }			\
167a7d0c210SPaolo 'Blaisorblade' Giarrusso 		/* GNU DWARF 1 extensions */				\
168a7d0c210SPaolo 'Blaisorblade' Giarrusso 		.debug_srcinfo  0 : { *(.debug_srcinfo) }		\
169a7d0c210SPaolo 'Blaisorblade' Giarrusso 		.debug_sfnames  0 : { *(.debug_sfnames) }		\
170a7d0c210SPaolo 'Blaisorblade' Giarrusso 		/* DWARF 1.1 and DWARF 2 */				\
171a7d0c210SPaolo 'Blaisorblade' Giarrusso 		.debug_aranges  0 : { *(.debug_aranges) }		\
172a7d0c210SPaolo 'Blaisorblade' Giarrusso 		.debug_pubnames 0 : { *(.debug_pubnames) }		\
173a7d0c210SPaolo 'Blaisorblade' Giarrusso 		/* DWARF 2 */						\
174a7d0c210SPaolo 'Blaisorblade' Giarrusso 		.debug_info     0 : { *(.debug_info			\
175a7d0c210SPaolo 'Blaisorblade' Giarrusso 				.gnu.linkonce.wi.*) }			\
176a7d0c210SPaolo 'Blaisorblade' Giarrusso 		.debug_abbrev   0 : { *(.debug_abbrev) }		\
177a7d0c210SPaolo 'Blaisorblade' Giarrusso 		.debug_line     0 : { *(.debug_line) }			\
178a7d0c210SPaolo 'Blaisorblade' Giarrusso 		.debug_frame    0 : { *(.debug_frame) }			\
179a7d0c210SPaolo 'Blaisorblade' Giarrusso 		.debug_str      0 : { *(.debug_str) }			\
180a7d0c210SPaolo 'Blaisorblade' Giarrusso 		.debug_loc      0 : { *(.debug_loc) }			\
181a7d0c210SPaolo 'Blaisorblade' Giarrusso 		.debug_macinfo  0 : { *(.debug_macinfo) }		\
182a7d0c210SPaolo 'Blaisorblade' Giarrusso 		/* SGI/MIPS DWARF 2 extensions */			\
183a7d0c210SPaolo 'Blaisorblade' Giarrusso 		.debug_weaknames 0 : { *(.debug_weaknames) }		\
184a7d0c210SPaolo 'Blaisorblade' Giarrusso 		.debug_funcnames 0 : { *(.debug_funcnames) }		\
185a7d0c210SPaolo 'Blaisorblade' Giarrusso 		.debug_typenames 0 : { *(.debug_typenames) }		\
186a7d0c210SPaolo 'Blaisorblade' Giarrusso 		.debug_varnames  0 : { *(.debug_varnames) }		\
187a7d0c210SPaolo 'Blaisorblade' Giarrusso 
188a7d0c210SPaolo 'Blaisorblade' Giarrusso 		/* Stabs debugging sections.  */
189a7d0c210SPaolo 'Blaisorblade' Giarrusso #define STABS_DEBUG							\
190a7d0c210SPaolo 'Blaisorblade' Giarrusso 		.stab 0 : { *(.stab) }					\
191a7d0c210SPaolo 'Blaisorblade' Giarrusso 		.stabstr 0 : { *(.stabstr) }				\
192a7d0c210SPaolo 'Blaisorblade' Giarrusso 		.stab.excl 0 : { *(.stab.excl) }			\
193a7d0c210SPaolo 'Blaisorblade' Giarrusso 		.stab.exclstr 0 : { *(.stab.exclstr) }			\
194a7d0c210SPaolo 'Blaisorblade' Giarrusso 		.stab.index 0 : { *(.stab.index) }			\
195a7d0c210SPaolo 'Blaisorblade' Giarrusso 		.stab.indexstr 0 : { *(.stab.indexstr) }		\
196a7d0c210SPaolo 'Blaisorblade' Giarrusso 		.comment 0 : { *(.comment) }
1979c9b8b38SJeremy Fitzhardinge 
1989c9b8b38SJeremy Fitzhardinge #define NOTES								\
1999c9b8b38SJeremy Fitzhardinge 		.notes : { *(.note.*) } :note
200