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 
91da177e4SLinus Torvalds #define RODATA								\
101da177e4SLinus Torvalds 	.rodata           : AT(ADDR(.rodata) - LOAD_OFFSET) {		\
111da177e4SLinus Torvalds 		*(.rodata) *(.rodata.*)					\
121da177e4SLinus Torvalds 		*(__vermagic)		/* Kernel version magic */	\
131da177e4SLinus Torvalds 	}								\
141da177e4SLinus Torvalds 									\
151da177e4SLinus Torvalds 	.rodata1          : AT(ADDR(.rodata1) - LOAD_OFFSET) {		\
161da177e4SLinus Torvalds 		*(.rodata1)						\
171da177e4SLinus Torvalds 	}								\
181da177e4SLinus Torvalds 									\
191da177e4SLinus Torvalds 	/* PCI quirks */						\
201da177e4SLinus Torvalds 	.pci_fixup        : AT(ADDR(.pci_fixup) - LOAD_OFFSET) {	\
211da177e4SLinus Torvalds 		VMLINUX_SYMBOL(__start_pci_fixups_early) = .;		\
221da177e4SLinus Torvalds 		*(.pci_fixup_early)					\
231da177e4SLinus Torvalds 		VMLINUX_SYMBOL(__end_pci_fixups_early) = .;		\
241da177e4SLinus Torvalds 		VMLINUX_SYMBOL(__start_pci_fixups_header) = .;		\
251da177e4SLinus Torvalds 		*(.pci_fixup_header)					\
261da177e4SLinus Torvalds 		VMLINUX_SYMBOL(__end_pci_fixups_header) = .;		\
271da177e4SLinus Torvalds 		VMLINUX_SYMBOL(__start_pci_fixups_final) = .;		\
281da177e4SLinus Torvalds 		*(.pci_fixup_final)					\
291da177e4SLinus Torvalds 		VMLINUX_SYMBOL(__end_pci_fixups_final) = .;		\
301da177e4SLinus Torvalds 		VMLINUX_SYMBOL(__start_pci_fixups_enable) = .;		\
311da177e4SLinus Torvalds 		*(.pci_fixup_enable)					\
321da177e4SLinus Torvalds 		VMLINUX_SYMBOL(__end_pci_fixups_enable) = .;		\
331da177e4SLinus Torvalds 	}								\
341da177e4SLinus Torvalds 									\
351da177e4SLinus Torvalds 	/* Kernel symbol table: Normal symbols */			\
361da177e4SLinus Torvalds 	__ksymtab         : AT(ADDR(__ksymtab) - LOAD_OFFSET) {		\
371da177e4SLinus Torvalds 		VMLINUX_SYMBOL(__start___ksymtab) = .;			\
381da177e4SLinus Torvalds 		*(__ksymtab)						\
391da177e4SLinus Torvalds 		VMLINUX_SYMBOL(__stop___ksymtab) = .;			\
401da177e4SLinus Torvalds 	}								\
411da177e4SLinus Torvalds 									\
421da177e4SLinus Torvalds 	/* Kernel symbol table: GPL-only symbols */			\
431da177e4SLinus Torvalds 	__ksymtab_gpl     : AT(ADDR(__ksymtab_gpl) - LOAD_OFFSET) {	\
441da177e4SLinus Torvalds 		VMLINUX_SYMBOL(__start___ksymtab_gpl) = .;		\
451da177e4SLinus Torvalds 		*(__ksymtab_gpl)					\
461da177e4SLinus Torvalds 		VMLINUX_SYMBOL(__stop___ksymtab_gpl) = .;		\
471da177e4SLinus Torvalds 	}								\
481da177e4SLinus Torvalds 									\
491da177e4SLinus Torvalds 	/* Kernel symbol table: Normal symbols */			\
501da177e4SLinus Torvalds 	__kcrctab         : AT(ADDR(__kcrctab) - LOAD_OFFSET) {		\
511da177e4SLinus Torvalds 		VMLINUX_SYMBOL(__start___kcrctab) = .;			\
521da177e4SLinus Torvalds 		*(__kcrctab)						\
531da177e4SLinus Torvalds 		VMLINUX_SYMBOL(__stop___kcrctab) = .;			\
541da177e4SLinus Torvalds 	}								\
551da177e4SLinus Torvalds 									\
561da177e4SLinus Torvalds 	/* Kernel symbol table: GPL-only symbols */			\
571da177e4SLinus Torvalds 	__kcrctab_gpl     : AT(ADDR(__kcrctab_gpl) - LOAD_OFFSET) {	\
581da177e4SLinus Torvalds 		VMLINUX_SYMBOL(__start___kcrctab_gpl) = .;		\
591da177e4SLinus Torvalds 		*(__kcrctab_gpl)					\
601da177e4SLinus Torvalds 		VMLINUX_SYMBOL(__stop___kcrctab_gpl) = .;		\
611da177e4SLinus Torvalds 	}								\
621da177e4SLinus Torvalds 									\
631da177e4SLinus Torvalds 	/* Kernel symbol table: strings */				\
641da177e4SLinus Torvalds         __ksymtab_strings : AT(ADDR(__ksymtab_strings) - LOAD_OFFSET) {	\
651da177e4SLinus Torvalds 		*(__ksymtab_strings)					\
661da177e4SLinus Torvalds 	}								\
671da177e4SLinus Torvalds 									\
681da177e4SLinus Torvalds 	/* Built-in module parameters. */				\
691da177e4SLinus Torvalds 	__param : AT(ADDR(__param) - LOAD_OFFSET) {			\
701da177e4SLinus Torvalds 		VMLINUX_SYMBOL(__start___param) = .;			\
711da177e4SLinus Torvalds 		*(__param)						\
721da177e4SLinus Torvalds 		VMLINUX_SYMBOL(__stop___param) = .;			\
731da177e4SLinus Torvalds 	}
741da177e4SLinus Torvalds 
751da177e4SLinus Torvalds #define SECURITY_INIT							\
761da177e4SLinus Torvalds 	.security_initcall.init : {					\
771da177e4SLinus Torvalds 		VMLINUX_SYMBOL(__security_initcall_start) = .;		\
781da177e4SLinus Torvalds 		*(.security_initcall.init) 				\
791da177e4SLinus Torvalds 		VMLINUX_SYMBOL(__security_initcall_end) = .;		\
801da177e4SLinus Torvalds 	}
811da177e4SLinus Torvalds 
821da177e4SLinus Torvalds #define SCHED_TEXT							\
831da177e4SLinus Torvalds 		VMLINUX_SYMBOL(__sched_text_start) = .;			\
841da177e4SLinus Torvalds 		*(.sched.text)						\
851da177e4SLinus Torvalds 		VMLINUX_SYMBOL(__sched_text_end) = .;
861da177e4SLinus Torvalds 
871da177e4SLinus Torvalds #define LOCK_TEXT							\
881da177e4SLinus Torvalds 		VMLINUX_SYMBOL(__lock_text_start) = .;			\
891da177e4SLinus Torvalds 		*(.spinlock.text)					\
901da177e4SLinus Torvalds 		VMLINUX_SYMBOL(__lock_text_end) = .;
91