Merge branch 'x86/build' into x86/asm, to pick up completed topic branch
Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
		
						commit
						f01ec4fca8
					
				| @ -1,4 +1,8 @@ | ||||
| /* SPDX-License-Identifier: GPL-2.0 */ | ||||
| 
 | ||||
| #define EMITS_PT_NOTE | ||||
| #define RO_EXCEPTION_TABLE_ALIGN	16 | ||||
| 
 | ||||
| #include <asm-generic/vmlinux.lds.h> | ||||
| #include <asm/thread_info.h> | ||||
| #include <asm/cache.h> | ||||
| @ -8,7 +12,7 @@ | ||||
| OUTPUT_FORMAT("elf64-alpha") | ||||
| OUTPUT_ARCH(alpha) | ||||
| ENTRY(__start) | ||||
| PHDRS { kernel PT_LOAD; note PT_NOTE; }
 | ||||
| PHDRS { text PT_LOAD; note PT_NOTE; }
 | ||||
| jiffies = jiffies_64;
 | ||||
| SECTIONS | ||||
| { | ||||
| @ -27,17 +31,11 @@ SECTIONS | ||||
| 		LOCK_TEXT | ||||
| 		*(.fixup) | ||||
| 		*(.gnu.warning) | ||||
| 	} :kernel | ||||
| 	} :text | ||||
| 	swapper_pg_dir = SWAPPER_PGD;
 | ||||
| 	_etext = .;	/* End of text section */
 | ||||
| 
 | ||||
| 	NOTES :kernel :note | ||||
| 	.dummy : { | ||||
| 		*(.dummy) | ||||
| 	} :kernel | ||||
| 
 | ||||
| 	RODATA | ||||
| 	EXCEPTION_TABLE(16) | ||||
| 	RO_DATA(4096) | ||||
| 
 | ||||
| 	/* Will be freed after init */ | ||||
| 	__init_begin = ALIGN(PAGE_SIZE);
 | ||||
| @ -52,7 +50,7 @@ SECTIONS | ||||
| 
 | ||||
| 	_sdata = .;	/* Start of rw data section */
 | ||||
| 	_data = .;
 | ||||
| 	RW_DATA_SECTION(L1_CACHE_BYTES, PAGE_SIZE, THREAD_SIZE) | ||||
| 	RW_DATA(L1_CACHE_BYTES, PAGE_SIZE, THREAD_SIZE) | ||||
| 
 | ||||
| 	.got : { | ||||
| 		*(.got) | ||||
|  | ||||
| @ -95,13 +95,13 @@ SECTIONS | ||||
| 	_etext = .;
 | ||||
| 
 | ||||
| 	_sdata = .;
 | ||||
| 	RO_DATA_SECTION(PAGE_SIZE) | ||||
| 	RO_DATA(PAGE_SIZE) | ||||
| 
 | ||||
| 	/* | ||||
| 	 * 1. this is .data essentially | ||||
| 	 * 2. THREAD_SIZE for init.task, must be kernel-stk sz aligned | ||||
| 	 */ | ||||
| 	RW_DATA_SECTION(L1_CACHE_BYTES, PAGE_SIZE, THREAD_SIZE) | ||||
| 	RW_DATA(L1_CACHE_BYTES, PAGE_SIZE, THREAD_SIZE) | ||||
| 
 | ||||
| 	_edata = .;
 | ||||
| 
 | ||||
| @ -118,8 +118,6 @@ SECTIONS | ||||
| 	/DISCARD/ : {	*(.eh_frame) } | ||||
| #endif | ||||
| 
 | ||||
| 	NOTES | ||||
| 
 | ||||
| 	. = ALIGN(PAGE_SIZE);
 | ||||
| 	_end = . ;
 | ||||
| 
 | ||||
|  | ||||
| @ -70,8 +70,6 @@ SECTIONS | ||||
| 	ARM_UNWIND_SECTIONS | ||||
| #endif | ||||
| 
 | ||||
| 	NOTES | ||||
| 
 | ||||
| 	_etext = .;			/* End of text and rodata section */
 | ||||
| 
 | ||||
| 	ARM_VECTORS | ||||
| @ -114,7 +112,7 @@ SECTIONS | ||||
| 
 | ||||
| 	. = ALIGN(THREAD_SIZE);
 | ||||
| 	_sdata = .;
 | ||||
| 	RW_DATA_SECTION(L1_CACHE_BYTES, PAGE_SIZE, THREAD_SIZE) | ||||
| 	RW_DATA(L1_CACHE_BYTES, PAGE_SIZE, THREAD_SIZE) | ||||
| 	.data.ro_after_init : AT(ADDR(.data.ro_after_init) - LOAD_OFFSET) { | ||||
| 		*(.data..ro_after_init) | ||||
| 	} | ||||
|  | ||||
| @ -81,8 +81,6 @@ SECTIONS | ||||
| 	ARM_UNWIND_SECTIONS | ||||
| #endif | ||||
| 
 | ||||
| 	NOTES | ||||
| 
 | ||||
| #ifdef CONFIG_STRICT_KERNEL_RWX | ||||
| 	. = ALIGN(1<<SECTION_SHIFT);
 | ||||
| #else | ||||
| @ -143,7 +141,7 @@ SECTIONS | ||||
| 	__init_end = .;
 | ||||
| 
 | ||||
| 	_sdata = .;
 | ||||
| 	RW_DATA_SECTION(L1_CACHE_BYTES, PAGE_SIZE, THREAD_SIZE) | ||||
| 	RW_DATA(L1_CACHE_BYTES, PAGE_SIZE, THREAD_SIZE) | ||||
| 	_edata = .;
 | ||||
| 
 | ||||
| 	BSS_SECTION(0, 0, 0) | ||||
|  | ||||
| @ -5,6 +5,8 @@ | ||||
|  * Written by Martin Mares <mj@atrey.karlin.mff.cuni.cz>
 | ||||
|  */ | ||||
| 
 | ||||
| #define RO_EXCEPTION_TABLE_ALIGN	8 | ||||
| 
 | ||||
| #include <asm-generic/vmlinux.lds.h> | ||||
| #include <asm/cache.h> | ||||
| #include <asm/kernel-pgtable.h> | ||||
| @ -135,11 +137,9 @@ SECTIONS | ||||
| 	. = ALIGN(SEGMENT_ALIGN);
 | ||||
| 	_etext = .;			/* End of text section */
 | ||||
| 
 | ||||
| 	RO_DATA(PAGE_SIZE)		/* everything from this point to     */ | ||||
| 	EXCEPTION_TABLE(8)		/* __init_begin will be marked RO NX */ | ||||
| 	NOTES | ||||
| 	/* everything from this point to __init_begin will be marked RO NX */ | ||||
| 	RO_DATA(PAGE_SIZE) | ||||
| 
 | ||||
| 	. = ALIGN(PAGE_SIZE);
 | ||||
| 	idmap_pg_dir = .;
 | ||||
| 	. += IDMAP_DIR_SIZE;
 | ||||
| 
 | ||||
| @ -215,7 +215,7 @@ SECTIONS | ||||
| 
 | ||||
| 	_data = .;
 | ||||
| 	_sdata = .;
 | ||||
| 	RW_DATA_SECTION(L1_CACHE_BYTES, PAGE_SIZE, THREAD_ALIGN) | ||||
| 	RW_DATA(L1_CACHE_BYTES, PAGE_SIZE, THREAD_ALIGN) | ||||
| 
 | ||||
| 	/* | ||||
| 	 * Data written with the MMU off but read with the MMU on requires | ||||
|  | ||||
| @ -5,6 +5,9 @@ | ||||
|  *  Copyright (C) 2010, 2011 Texas Instruments Incorporated | ||||
|  *  Mark Salter <msalter@redhat.com>
 | ||||
|  */ | ||||
| 
 | ||||
| #define RO_EXCEPTION_TABLE_ALIGN	16 | ||||
| 
 | ||||
| #include <asm-generic/vmlinux.lds.h> | ||||
| #include <asm/thread_info.h> | ||||
| #include <asm/page.h> | ||||
| @ -80,10 +83,7 @@ SECTIONS | ||||
| 		*(.gnu.warning) | ||||
| 	} | ||||
| 
 | ||||
| 	EXCEPTION_TABLE(16) | ||||
| 	NOTES | ||||
| 
 | ||||
| 	RO_DATA_SECTION(PAGE_SIZE) | ||||
| 	RO_DATA(PAGE_SIZE) | ||||
| 	.const : | ||||
| 	{ | ||||
| 		*(.const .const.* .gnu.linkonce.r.*) | ||||
|  | ||||
| @ -49,11 +49,10 @@ SECTIONS | ||||
| 
 | ||||
| 
 | ||||
| 	_sdata = .;
 | ||||
| 	RO_DATA_SECTION(PAGE_SIZE) | ||||
| 	RW_DATA_SECTION(L1_CACHE_BYTES, PAGE_SIZE, THREAD_SIZE) | ||||
| 	RO_DATA(PAGE_SIZE) | ||||
| 	RW_DATA(L1_CACHE_BYTES, PAGE_SIZE, THREAD_SIZE) | ||||
| 	_edata = .;
 | ||||
| 
 | ||||
| 	NOTES | ||||
| 	EXCEPTION_TABLE(L1_CACHE_BYTES) | ||||
| 	BSS_SECTION(L1_CACHE_BYTES, PAGE_SIZE, L1_CACHE_BYTES) | ||||
| 	VBR_BASE | ||||
|  | ||||
| @ -1,4 +1,7 @@ | ||||
| /* SPDX-License-Identifier: GPL-2.0 */ | ||||
| 
 | ||||
| #define RO_EXCEPTION_TABLE_ALIGN	16 | ||||
| 
 | ||||
| #include <asm-generic/vmlinux.lds.h> | ||||
| #include <asm/page.h> | ||||
| #include <asm/thread_info.h> | ||||
| @ -37,9 +40,7 @@ SECTIONS | ||||
| #endif | ||||
| 	_etext = . ;
 | ||||
| 	} | ||||
| 	EXCEPTION_TABLE(16) | ||||
| 	NOTES | ||||
| 	RO_DATA_SECTION(4) | ||||
| 	RO_DATA(4) | ||||
| 	ROMEND = .;
 | ||||
| #if defined(CONFIG_ROMKERNEL) | ||||
| 	. = RAMTOP;
 | ||||
| @ -48,7 +49,7 @@ SECTIONS | ||||
| #endif | ||||
| 	_sdata = . ;
 | ||||
| 	__data_start = . ;
 | ||||
| 	RW_DATA_SECTION(0, PAGE_SIZE, THREAD_SIZE) | ||||
| 	RW_DATA(0, PAGE_SIZE, THREAD_SIZE) | ||||
| #if defined(CONFIG_ROMKERNEL) | ||||
| #undef ADDR | ||||
| #endif | ||||
|  | ||||
| @ -49,12 +49,11 @@ SECTIONS | ||||
| 	INIT_DATA_SECTION(PAGE_SIZE) | ||||
| 
 | ||||
| 	_sdata = .;
 | ||||
| 		RW_DATA_SECTION(32,PAGE_SIZE,_THREAD_SIZE) | ||||
| 		RO_DATA_SECTION(PAGE_SIZE) | ||||
| 		RW_DATA(32,PAGE_SIZE,_THREAD_SIZE) | ||||
| 		RO_DATA(PAGE_SIZE) | ||||
| 	_edata = .;
 | ||||
| 
 | ||||
| 	EXCEPTION_TABLE(16) | ||||
| 	NOTES | ||||
| 
 | ||||
| 	BSS_SECTION(_PAGE_SIZE, _PAGE_SIZE, _PAGE_SIZE) | ||||
| 
 | ||||
|  | ||||
| @ -5,6 +5,9 @@ | ||||
| #include <asm/pgtable.h> | ||||
| #include <asm/thread_info.h> | ||||
| 
 | ||||
| #define EMITS_PT_NOTE | ||||
| #define RO_EXCEPTION_TABLE_ALIGN	16 | ||||
| 
 | ||||
| #include <asm-generic/vmlinux.lds.h> | ||||
| 
 | ||||
| OUTPUT_FORMAT("elf64-ia64-little") | ||||
| @ -13,7 +16,7 @@ ENTRY(phys_start) | ||||
| jiffies = jiffies_64;
 | ||||
| 
 | ||||
| PHDRS { | ||||
| 	code   PT_LOAD;
 | ||||
| 	text   PT_LOAD;
 | ||||
| 	percpu PT_LOAD;
 | ||||
| 	data   PT_LOAD;
 | ||||
| 	note   PT_NOTE;
 | ||||
| @ -36,7 +39,7 @@ SECTIONS { | ||||
| 	phys_start = _start - LOAD_OFFSET;
 | ||||
| 
 | ||||
| 	code : { | ||||
| 	} :code | ||||
| 	} :text | ||||
| 	. = KERNEL_START;
 | ||||
| 
 | ||||
| 	_text = .;
 | ||||
| @ -68,11 +71,6 @@ SECTIONS { | ||||
| 	/* | ||||
| 	 * Read-only data | ||||
| 	 */ | ||||
| 	NOTES :code :note       /* put .notes in text and mark in PT_NOTE  */ | ||||
| 	code_continues : { | ||||
| 	} : code               /* switch back to regular program...  */ | ||||
| 
 | ||||
| 	EXCEPTION_TABLE(16) | ||||
| 
 | ||||
| 	/* MCA table */ | ||||
| 	. = ALIGN(16);
 | ||||
| @ -102,11 +100,11 @@ SECTIONS { | ||||
| 		__start_unwind = .;
 | ||||
| 		*(.IA_64.unwind*) | ||||
| 		__end_unwind = .;
 | ||||
| 	} :code :unwind | ||||
| 	} :text :unwind | ||||
| 	code_continues2 : { | ||||
| 	} : code | ||||
| 	} :text | ||||
| 
 | ||||
| 	RODATA | ||||
| 	RO_DATA(4096) | ||||
| 
 | ||||
| 	.opd : AT(ADDR(.opd) - LOAD_OFFSET) { | ||||
| 		__start_opd = .;
 | ||||
| @ -214,7 +212,7 @@ SECTIONS { | ||||
| 	_end = .;
 | ||||
| 
 | ||||
| 	code : { | ||||
| 	} :code | ||||
| 	} :text | ||||
| 
 | ||||
| 	STABS_DEBUG | ||||
| 	DWARF_DEBUG | ||||
|  | ||||
| @ -60,8 +60,8 @@ SECTIONS { | ||||
| #endif | ||||
| 
 | ||||
| 	_sdata = .; | ||||
| 	RO_DATA_SECTION(PAGE_SIZE) | ||||
| 	RW_DATA_SECTION(16, PAGE_SIZE, THREAD_SIZE) | ||||
| 	RO_DATA(PAGE_SIZE) | ||||
| 	RW_DATA(16, PAGE_SIZE, THREAD_SIZE) | ||||
| 	_edata = .; | ||||
| 
 | ||||
| 	EXCEPTION_TABLE(16) | ||||
|  | ||||
| @ -31,9 +31,9 @@ SECTIONS | ||||
| 
 | ||||
|   _sdata = .;			/* Start of data section */ | ||||
| 
 | ||||
|   RODATA | ||||
|   RO_DATA(4096) | ||||
| 
 | ||||
|   RW_DATA_SECTION(16, PAGE_SIZE, THREAD_SIZE) | ||||
|   RW_DATA(16, PAGE_SIZE, THREAD_SIZE) | ||||
| 
 | ||||
|   BSS_SECTION(0, 0, 0) | ||||
| 
 | ||||
|  | ||||
| @ -24,13 +24,13 @@ SECTIONS | ||||
| 	*(.fixup) | ||||
| 	*(.gnu.warning) | ||||
| 	} :text = 0x4e75 | ||||
| 	RODATA | ||||
| 	RO_DATA(4096) | ||||
| 
 | ||||
|   _etext = .;			/* End of text section */ | ||||
| 
 | ||||
|   EXCEPTION_TABLE(16) :data | ||||
|   _sdata = .;			/* Start of rw data section */ | ||||
|   RW_DATA_SECTION(16, PAGE_SIZE, THREAD_SIZE) :data | ||||
|   RW_DATA(16, PAGE_SIZE, THREAD_SIZE) :data | ||||
|   /* End of data goes *here* so that freeing init code works properly. */ | ||||
|   _edata = .; | ||||
|   NOTES | ||||
|  | ||||
| @ -11,6 +11,8 @@ | ||||
| OUTPUT_ARCH(microblaze) | ||||
| ENTRY(microblaze_start) | ||||
| 
 | ||||
| #define RO_EXCEPTION_TABLE_ALIGN	16 | ||||
| 
 | ||||
| #include <asm/page.h> | ||||
| #include <asm-generic/vmlinux.lds.h> | ||||
| #include <asm/thread_info.h> | ||||
| @ -51,9 +53,7 @@ SECTIONS { | ||||
| 	} | ||||
| 
 | ||||
| 	. = ALIGN(16);
 | ||||
| 	RODATA | ||||
| 	EXCEPTION_TABLE(16) | ||||
| 	NOTES | ||||
| 	RO_DATA(4096) | ||||
| 
 | ||||
| 	/* | ||||
| 	 * sdata2 section can go anywhere, but must be word aligned | ||||
| @ -70,7 +70,7 @@ SECTIONS { | ||||
| 	} | ||||
| 
 | ||||
| 	_sdata = . ;
 | ||||
| 	RW_DATA_SECTION(32, PAGE_SIZE, THREAD_SIZE) | ||||
| 	RW_DATA(32, PAGE_SIZE, THREAD_SIZE) | ||||
| 	_edata = . ;
 | ||||
| 
 | ||||
| 	/* Under the microblaze ABI, .sdata and .sbss must be contiguous */ | ||||
|  | ||||
| @ -10,6 +10,11 @@ | ||||
|  */ | ||||
| #define BSS_FIRST_SECTIONS *(.bss..swapper_pg_dir) | ||||
| 
 | ||||
| /* Cavium Octeon should not have a separate PT_NOTE Program Header. */ | ||||
| #ifndef CONFIG_CAVIUM_OCTEON_SOC | ||||
| #define EMITS_PT_NOTE | ||||
| #endif | ||||
| 
 | ||||
| #include <asm-generic/vmlinux.lds.h> | ||||
| 
 | ||||
| #undef mips | ||||
| @ -76,16 +81,8 @@ SECTIONS | ||||
| 		__stop___dbe_table = .;
 | ||||
| 	} | ||||
| 
 | ||||
| #ifdef CONFIG_CAVIUM_OCTEON_SOC | ||||
| #define NOTES_HEADER | ||||
| #else /* CONFIG_CAVIUM_OCTEON_SOC */ | ||||
| #define NOTES_HEADER :note | ||||
| #endif /* CONFIG_CAVIUM_OCTEON_SOC */ | ||||
| 	NOTES :text NOTES_HEADER | ||||
| 	.dummy : { *(.dummy) } :text | ||||
| 
 | ||||
| 	_sdata = .;			/* Start of data section */
 | ||||
| 	RODATA | ||||
| 	RO_DATA(4096) | ||||
| 
 | ||||
| 	/* writeable */ | ||||
| 	.data : {	/* Data */ | ||||
|  | ||||
| @ -53,12 +53,11 @@ SECTIONS | ||||
| 	_etext = .;			/* End of text and rodata section */
 | ||||
| 
 | ||||
| 	_sdata = .;
 | ||||
| 	RO_DATA_SECTION(PAGE_SIZE) | ||||
| 	RW_DATA_SECTION(L1_CACHE_BYTES, PAGE_SIZE, THREAD_SIZE) | ||||
| 	RO_DATA(PAGE_SIZE) | ||||
| 	RW_DATA(L1_CACHE_BYTES, PAGE_SIZE, THREAD_SIZE) | ||||
| 	_edata  =  .;
 | ||||
| 
 | ||||
| 	EXCEPTION_TABLE(16) | ||||
| 	NOTES | ||||
| 	BSS_SECTION(4, 4, 4) | ||||
| 	_end = .;
 | ||||
| 
 | ||||
|  | ||||
| @ -49,8 +49,8 @@ SECTIONS | ||||
| 	__init_end = .;
 | ||||
| 
 | ||||
| 	_sdata = .;
 | ||||
| 	RO_DATA_SECTION(PAGE_SIZE) | ||||
| 	RW_DATA_SECTION(L1_CACHE_BYTES, PAGE_SIZE, THREAD_SIZE) | ||||
| 	RO_DATA(PAGE_SIZE) | ||||
| 	RW_DATA(L1_CACHE_BYTES, PAGE_SIZE, THREAD_SIZE) | ||||
| 	_edata = .;
 | ||||
| 
 | ||||
| 	BSS_SECTION(0, 0, 0) | ||||
| @ -58,7 +58,6 @@ SECTIONS | ||||
| 
 | ||||
| 	STABS_DEBUG | ||||
| 	DWARF_DEBUG | ||||
| 	NOTES | ||||
| 
 | ||||
| 	DISCARDS | ||||
| } | ||||
|  | ||||
| @ -67,19 +67,18 @@ SECTIONS | ||||
| 
 | ||||
| 	_sdata = .;
 | ||||
| 
 | ||||
| 	/* Page alignment required for RO_DATA_SECTION */ | ||||
| 	RO_DATA_SECTION(PAGE_SIZE) | ||||
| 	/* Page alignment required for RO_DATA */ | ||||
| 	RO_DATA(PAGE_SIZE) | ||||
| 	_e_kernel_ro = .;
 | ||||
| 
 | ||||
| 	/* Whatever comes after _e_kernel_ro had better be page-aligend, too */ | ||||
| 
 | ||||
| 	/* 32 here is cacheline size... recheck this */ | ||||
| 	RW_DATA_SECTION(32, PAGE_SIZE, PAGE_SIZE) | ||||
| 	RW_DATA(32, PAGE_SIZE, PAGE_SIZE) | ||||
| 
 | ||||
|         _edata  =  .;
 | ||||
| 
 | ||||
| 	EXCEPTION_TABLE(4) | ||||
| 	NOTES | ||||
| 
 | ||||
| 	/* Init code and data */ | ||||
| 	. = ALIGN(PAGE_SIZE);
 | ||||
|  | ||||
| @ -19,6 +19,7 @@ | ||||
| 				*(.data..vm0.pte) | ||||
| 
 | ||||
| #define CC_USING_PATCHABLE_FUNCTION_ENTRY | ||||
| #define RO_EXCEPTION_TABLE_ALIGN	8 | ||||
| 
 | ||||
| #include <asm-generic/vmlinux.lds.h> | ||||
| 
 | ||||
| @ -109,7 +110,7 @@ SECTIONS | ||||
| 	_sdata = .;
 | ||||
| 
 | ||||
| 	/* Architecturally we need to keep __gp below 0x1000000 and thus | ||||
| 	 * in front of RO_DATA_SECTION() which stores lots of tracepoint | ||||
| 	 * in front of RO_DATA() which stores lots of tracepoint | ||||
| 	 * and ftrace symbols. */ | ||||
| #ifdef CONFIG_64BIT | ||||
| 	. = ALIGN(16);
 | ||||
| @ -127,11 +128,7 @@ SECTIONS | ||||
| 	} | ||||
| #endif | ||||
| 
 | ||||
| 	RO_DATA_SECTION(8) | ||||
| 
 | ||||
| 	/* RO because of BUILDTIME_EXTABLE_SORT */ | ||||
| 	EXCEPTION_TABLE(8) | ||||
| 	NOTES | ||||
| 	RO_DATA(8) | ||||
| 
 | ||||
| 	/* unwind info */ | ||||
| 	.PARISC.unwind : { | ||||
| @ -149,7 +146,7 @@ SECTIONS | ||||
| 	data_start = .;
 | ||||
| 
 | ||||
| 	/* Data */ | ||||
| 	RW_DATA_SECTION(L1_CACHE_BYTES, PAGE_SIZE, PAGE_SIZE) | ||||
| 	RW_DATA(L1_CACHE_BYTES, PAGE_SIZE, PAGE_SIZE) | ||||
| 
 | ||||
| 	/* PA-RISC locks requires 16-byte alignment */ | ||||
| 	. = ALIGN(16);
 | ||||
|  | ||||
| @ -6,6 +6,8 @@ | ||||
| #endif | ||||
| 
 | ||||
| #define BSS_FIRST_SECTIONS *(.bss.prominit) | ||||
| #define EMITS_PT_NOTE | ||||
| #define RO_EXCEPTION_TABLE_ALIGN	0 | ||||
| 
 | ||||
| #include <asm/page.h> | ||||
| #include <asm-generic/vmlinux.lds.h> | ||||
| @ -18,22 +20,8 @@ | ||||
| ENTRY(_stext) | ||||
| 
 | ||||
| PHDRS { | ||||
| 	kernel PT_LOAD FLAGS(7); /* RWX */
 | ||||
| 	notes PT_NOTE FLAGS(0);
 | ||||
| 	dummy PT_NOTE FLAGS(0);
 | ||||
| 
 | ||||
| 	/* binutils < 2.18 has a bug that makes it misbehave when taking an | ||||
| 	   ELF file with all segments at load address 0 as input.  This | ||||
| 	   happens when running "strip" on vmlinux, because of the AT() magic | ||||
| 	   in this linker script.  People using GCC >= 4.2 won't run into | ||||
| 	   this problem, because the "build-id" support will put some data | ||||
| 	   into the "notes" segment (at a non-zero load address). | ||||
| 
 | ||||
| 	   To work around this, we force some data into both the "dummy" | ||||
| 	   segment and the kernel segment, so the dummy segment will get a | ||||
| 	   non-zero load address.  It's not enough to always create the | ||||
| 	   "notes" segment, since if nothing gets assigned to it, its load | ||||
| 	   address will be zero.  */ | ||||
| 	text PT_LOAD FLAGS(7); /* RWX */
 | ||||
| 	note PT_NOTE FLAGS(0);
 | ||||
| } | ||||
| 
 | ||||
| #ifdef CONFIG_PPC64 | ||||
| @ -77,7 +65,7 @@ SECTIONS | ||||
| #else /* !CONFIG_PPC64 */ | ||||
| 		HEAD_TEXT | ||||
| #endif | ||||
| 	} :kernel | ||||
| 	} :text | ||||
| 
 | ||||
| 	__head_end = .;
 | ||||
| 
 | ||||
| @ -126,7 +114,7 @@ SECTIONS | ||||
| 		__got2_end = .;
 | ||||
| #endif /* CONFIG_PPC32 */ | ||||
| 
 | ||||
| 	} :kernel | ||||
| 	} :text | ||||
| 
 | ||||
| 	. = ALIGN(ETEXT_ALIGN_SIZE);
 | ||||
| 	_etext = .;
 | ||||
| @ -175,17 +163,6 @@ SECTIONS | ||||
| 		__stop__btb_flush_fixup = .;
 | ||||
| 	} | ||||
| #endif | ||||
| 	EXCEPTION_TABLE(0) | ||||
| 
 | ||||
| 	NOTES :kernel :notes | ||||
| 
 | ||||
| 	/* The dummy segment contents for the bug workaround mentioned above | ||||
| 	   near PHDRS.  */ | ||||
| 	.dummy : AT(ADDR(.dummy) - LOAD_OFFSET) { | ||||
| 		LONG(0) | ||||
| 		LONG(0) | ||||
| 		LONG(0) | ||||
| 	} :kernel :dummy | ||||
| 
 | ||||
| /* | ||||
|  * Init sections discarded at runtime | ||||
| @ -200,7 +177,7 @@ SECTIONS | ||||
| #ifdef CONFIG_PPC64 | ||||
| 		*(.tramp.ftrace.init);
 | ||||
| #endif | ||||
| 	} :kernel | ||||
| 	} :text | ||||
| 
 | ||||
| 	/* .exit.text is discarded at runtime, not link time, | ||||
| 	 * to deal with references from __bug_table | ||||
|  | ||||
| @ -52,12 +52,12 @@ SECTIONS | ||||
| 
 | ||||
| 	/* Start of data section */ | ||||
| 	_sdata = .;
 | ||||
| 	RO_DATA_SECTION(L1_CACHE_BYTES) | ||||
| 	RO_DATA(L1_CACHE_BYTES) | ||||
| 	.srodata : { | ||||
| 		*(.srodata*) | ||||
| 	} | ||||
| 
 | ||||
| 	RW_DATA_SECTION(L1_CACHE_BYTES, PAGE_SIZE, THREAD_SIZE) | ||||
| 	RW_DATA(L1_CACHE_BYTES, PAGE_SIZE, THREAD_SIZE) | ||||
| 	.sdata : { | ||||
| 		__global_pointer$ = . + 0x800;
 | ||||
| 		*(.sdata*) | ||||
| @ -69,7 +69,6 @@ SECTIONS | ||||
| 	BSS_SECTION(PAGE_SIZE, PAGE_SIZE, 0) | ||||
| 
 | ||||
| 	EXCEPTION_TABLE(0x10) | ||||
| 	NOTES | ||||
| 
 | ||||
| 	.rel.dyn : { | ||||
| 		*(.rel.dyn*) | ||||
|  | ||||
| @ -15,6 +15,8 @@ | ||||
| /* Handle ro_after_init data on our own. */ | ||||
| #define RO_AFTER_INIT_DATA | ||||
| 
 | ||||
| #define EMITS_PT_NOTE | ||||
| 
 | ||||
| #include <asm-generic/vmlinux.lds.h> | ||||
| #include <asm/vmlinux.lds.h> | ||||
| 
 | ||||
| @ -50,11 +52,7 @@ SECTIONS | ||||
| 		_etext = .;		/* End of text section */
 | ||||
| 	} :text = 0x0700 | ||||
| 
 | ||||
| 	NOTES :text :note | ||||
| 
 | ||||
| 	.dummy : { *(.dummy) } :data | ||||
| 
 | ||||
| 	RO_DATA_SECTION(PAGE_SIZE) | ||||
| 	RO_DATA(PAGE_SIZE) | ||||
| 
 | ||||
| 	. = ALIGN(PAGE_SIZE);
 | ||||
| 	_sdata = .;		/* Start of data section */
 | ||||
| @ -64,12 +62,12 @@ SECTIONS | ||||
| 	.data..ro_after_init : { | ||||
| 		 *(.data..ro_after_init) | ||||
| 		JUMP_TABLE_DATA | ||||
| 	} | ||||
| 	} :data | ||||
| 	EXCEPTION_TABLE(16) | ||||
| 	. = ALIGN(PAGE_SIZE);
 | ||||
| 	__end_ro_after_init = .;
 | ||||
| 
 | ||||
| 	RW_DATA_SECTION(0x100, PAGE_SIZE, THREAD_SIZE) | ||||
| 	RW_DATA(0x100, PAGE_SIZE, THREAD_SIZE) | ||||
| 	BOOT_DATA_PRESERVED | ||||
| 
 | ||||
| 	_edata = .;		/* End of data section */
 | ||||
|  | ||||
| @ -48,11 +48,10 @@ SECTIONS | ||||
| 	} = 0x0009 | ||||
| 
 | ||||
| 	EXCEPTION_TABLE(16) | ||||
| 	NOTES | ||||
| 
 | ||||
| 	_sdata = .;
 | ||||
| 	RO_DATA(PAGE_SIZE) | ||||
| 	RW_DATA_SECTION(L1_CACHE_BYTES, PAGE_SIZE, THREAD_SIZE) | ||||
| 	RW_DATA(L1_CACHE_BYTES, PAGE_SIZE, THREAD_SIZE) | ||||
| 	_edata = .;
 | ||||
| 
 | ||||
| 	DWARF_EH_FRAME | ||||
|  | ||||
| @ -67,7 +67,7 @@ SECTIONS | ||||
| 	.data1 : { | ||||
| 		*(.data1) | ||||
| 	} | ||||
| 	RW_DATA_SECTION(SMP_CACHE_BYTES, 0, THREAD_SIZE) | ||||
| 	RW_DATA(SMP_CACHE_BYTES, 0, THREAD_SIZE) | ||||
| 
 | ||||
| 	/* End of data section */ | ||||
| 	_edata = .;
 | ||||
| @ -78,7 +78,6 @@ SECTIONS | ||||
| 		__stop___fixup = .;
 | ||||
| 	} | ||||
| 	EXCEPTION_TABLE(16) | ||||
| 	NOTES | ||||
| 
 | ||||
| 	. = ALIGN(PAGE_SIZE);
 | ||||
| 	__init_begin = ALIGN(PAGE_SIZE);
 | ||||
|  | ||||
| @ -9,14 +9,13 @@ | ||||
|   _sdata = .;
 | ||||
|   PROVIDE (sdata = .);
 | ||||
| 
 | ||||
|   RODATA | ||||
|   RO_DATA(4096) | ||||
| 
 | ||||
|   .unprotected : { *(.unprotected) } | ||||
|   . = ALIGN(4096);
 | ||||
|   PROVIDE (_unprotected_end = .);
 | ||||
| 
 | ||||
|   . = ALIGN(4096);
 | ||||
|   NOTES | ||||
|   EXCEPTION_TABLE(0) | ||||
| 
 | ||||
|   BUG_TABLE | ||||
|  | ||||
| @ -43,12 +43,11 @@ SECTIONS | ||||
| 	_etext = .;
 | ||||
| 
 | ||||
| 	_sdata = .;
 | ||||
| 	RO_DATA_SECTION(PAGE_SIZE) | ||||
| 	RW_DATA_SECTION(L1_CACHE_BYTES, PAGE_SIZE, THREAD_SIZE) | ||||
| 	RO_DATA(PAGE_SIZE) | ||||
| 	RW_DATA(L1_CACHE_BYTES, PAGE_SIZE, THREAD_SIZE) | ||||
| 	_edata = .;
 | ||||
| 
 | ||||
| 	EXCEPTION_TABLE(L1_CACHE_BYTES) | ||||
| 	NOTES | ||||
| 
 | ||||
| 	BSS_SECTION(0, 0, 0) | ||||
| 	_end = .;
 | ||||
|  | ||||
| @ -67,6 +67,7 @@ clean-files += cpustr.h | ||||
| 
 | ||||
| KBUILD_CFLAGS	:= $(REALMODE_CFLAGS) -D_SETUP | ||||
| KBUILD_AFLAGS	:= $(KBUILD_CFLAGS) -D__ASSEMBLY__ | ||||
| KBUILD_CFLAGS	+= $(call cc-option,-fmacro-prefix-map=$(srctree)/=) | ||||
| GCOV_PROFILE := n | ||||
| UBSAN_SANITIZE := n | ||||
| 
 | ||||
|  | ||||
| @ -38,6 +38,7 @@ KBUILD_CFLAGS += $(call cc-option,-fno-stack-protector) | ||||
| KBUILD_CFLAGS += $(call cc-disable-warning, address-of-packed-member) | ||||
| KBUILD_CFLAGS += $(call cc-disable-warning, gnu) | ||||
| KBUILD_CFLAGS += -Wno-pointer-sign | ||||
| KBUILD_CFLAGS += $(call cc-option,-fmacro-prefix-map=$(srctree)/=) | ||||
| 
 | ||||
| KBUILD_AFLAGS  := $(KBUILD_CFLAGS) -D__ASSEMBLY__ | ||||
| GCOV_PROFILE := n | ||||
|  | ||||
| @ -87,11 +87,9 @@ $(vobjs): KBUILD_CFLAGS := $(filter-out $(GCC_PLUGINS_CFLAGS) $(RETPOLINE_CFLAGS | ||||
| #
 | ||||
| # vDSO code runs in userspace and -pg doesn't help with profiling anyway.
 | ||||
| #
 | ||||
| CFLAGS_REMOVE_vdso-note.o = -pg | ||||
| CFLAGS_REMOVE_vclock_gettime.o = -pg | ||||
| CFLAGS_REMOVE_vdso32/vclock_gettime.o = -pg | ||||
| CFLAGS_REMOVE_vgetcpu.o = -pg | ||||
| CFLAGS_REMOVE_vvar.o = -pg | ||||
| 
 | ||||
| #
 | ||||
| # X32 processes use x32 vDSO to access 64bit kernel data.
 | ||||
|  | ||||
| @ -958,7 +958,7 @@ static inline uint32_t hypervisor_cpuid_base(const char *sig, uint32_t leaves) | ||||
| 
 | ||||
| extern unsigned long arch_align_stack(unsigned long sp); | ||||
| void free_init_pages(const char *what, unsigned long begin, unsigned long end); | ||||
| extern void free_kernel_image_pages(void *begin, void *end); | ||||
| extern void free_kernel_image_pages(const char *what, void *begin, void *end); | ||||
| 
 | ||||
| void default_idle(void); | ||||
| #ifdef	CONFIG_XEN | ||||
|  | ||||
| @ -6,7 +6,6 @@ | ||||
| #include <asm/extable.h> | ||||
| 
 | ||||
| extern char __brk_base[], __brk_limit[]; | ||||
| extern struct exception_table_entry __stop___ex_table[]; | ||||
| extern char __end_rodata_aligned[]; | ||||
| 
 | ||||
| #if defined(CONFIG_X86_64) | ||||
|  | ||||
| @ -143,6 +143,13 @@ struct boot_params boot_params; | ||||
| /*
 | ||||
|  * Machine setup.. | ||||
|  */ | ||||
| static struct resource rodata_resource = { | ||||
| 	.name	= "Kernel rodata", | ||||
| 	.start	= 0, | ||||
| 	.end	= 0, | ||||
| 	.flags	= IORESOURCE_BUSY | IORESOURCE_SYSTEM_RAM | ||||
| }; | ||||
| 
 | ||||
| static struct resource data_resource = { | ||||
| 	.name	= "Kernel data", | ||||
| 	.start	= 0, | ||||
| @ -951,7 +958,9 @@ void __init setup_arch(char **cmdline_p) | ||||
| 
 | ||||
| 	code_resource.start = __pa_symbol(_text); | ||||
| 	code_resource.end = __pa_symbol(_etext)-1; | ||||
| 	data_resource.start = __pa_symbol(_etext); | ||||
| 	rodata_resource.start = __pa_symbol(__start_rodata); | ||||
| 	rodata_resource.end = __pa_symbol(__end_rodata)-1; | ||||
| 	data_resource.start = __pa_symbol(_sdata); | ||||
| 	data_resource.end = __pa_symbol(_edata)-1; | ||||
| 	bss_resource.start = __pa_symbol(__bss_start); | ||||
| 	bss_resource.end = __pa_symbol(__bss_stop)-1; | ||||
| @ -1040,6 +1049,7 @@ void __init setup_arch(char **cmdline_p) | ||||
| 
 | ||||
| 	/* after parse_early_param, so could debug it */ | ||||
| 	insert_resource(&iomem_resource, &code_resource); | ||||
| 	insert_resource(&iomem_resource, &rodata_resource); | ||||
| 	insert_resource(&iomem_resource, &data_resource); | ||||
| 	insert_resource(&iomem_resource, &bss_resource); | ||||
| 
 | ||||
|  | ||||
| @ -21,6 +21,9 @@ | ||||
| #define LOAD_OFFSET __START_KERNEL_map | ||||
| #endif | ||||
| 
 | ||||
| #define EMITS_PT_NOTE | ||||
| #define RO_EXCEPTION_TABLE_ALIGN	16 | ||||
| 
 | ||||
| #include <asm-generic/vmlinux.lds.h> | ||||
| #include <asm/asm-offsets.h> | ||||
| #include <asm/thread_info.h> | ||||
| @ -141,17 +144,12 @@ SECTIONS | ||||
| 		*(.text.__x86.indirect_thunk) | ||||
| 		__indirect_thunk_end = .;
 | ||||
| #endif | ||||
| 	} :text =0xcccc | ||||
| 
 | ||||
| 		/* End of text section */ | ||||
| 		_etext = .;
 | ||||
| 	} :text = 0x9090 | ||||
| 
 | ||||
| 	NOTES :text :note | ||||
| 
 | ||||
| 	EXCEPTION_TABLE(16) :text = 0x9090 | ||||
| 
 | ||||
| 	/* .text should occupy whole number of pages */ | ||||
| 	/* End of text section, which should occupy whole number of pages */ | ||||
| 	_etext = .;
 | ||||
| 	. = ALIGN(PAGE_SIZE);
 | ||||
| 
 | ||||
| 	X86_ALIGN_RODATA_BEGIN | ||||
| 	RO_DATA(PAGE_SIZE) | ||||
| 	X86_ALIGN_RODATA_END | ||||
|  | ||||
| @ -829,14 +829,13 @@ void free_init_pages(const char *what, unsigned long begin, unsigned long end) | ||||
|  * used for the kernel image only.  free_init_pages() will do the | ||||
|  * right thing for either kind of address. | ||||
|  */ | ||||
| void free_kernel_image_pages(void *begin, void *end) | ||||
| void free_kernel_image_pages(const char *what, void *begin, void *end) | ||||
| { | ||||
| 	unsigned long begin_ul = (unsigned long)begin; | ||||
| 	unsigned long end_ul = (unsigned long)end; | ||||
| 	unsigned long len_pages = (end_ul - begin_ul) >> PAGE_SHIFT; | ||||
| 
 | ||||
| 
 | ||||
| 	free_init_pages("unused kernel image", begin_ul, end_ul); | ||||
| 	free_init_pages(what, begin_ul, end_ul); | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * PTI maps some of the kernel into userspace.  For performance, | ||||
| @ -865,7 +864,8 @@ void __ref free_initmem(void) | ||||
| 
 | ||||
| 	mem_encrypt_free_decrypted_mem(); | ||||
| 
 | ||||
| 	free_kernel_image_pages(&__init_begin, &__init_end); | ||||
| 	free_kernel_image_pages("unused kernel image (initmem)", | ||||
| 				&__init_begin, &__init_end); | ||||
| } | ||||
| 
 | ||||
| #ifdef CONFIG_BLK_DEV_INITRD | ||||
|  | ||||
| @ -1263,7 +1263,7 @@ int kernel_set_to_readonly; | ||||
| void set_kernel_text_rw(void) | ||||
| { | ||||
| 	unsigned long start = PFN_ALIGN(_text); | ||||
| 	unsigned long end = PFN_ALIGN(__stop___ex_table); | ||||
| 	unsigned long end = PFN_ALIGN(_etext); | ||||
| 
 | ||||
| 	if (!kernel_set_to_readonly) | ||||
| 		return; | ||||
| @ -1282,7 +1282,7 @@ void set_kernel_text_rw(void) | ||||
| void set_kernel_text_ro(void) | ||||
| { | ||||
| 	unsigned long start = PFN_ALIGN(_text); | ||||
| 	unsigned long end = PFN_ALIGN(__stop___ex_table); | ||||
| 	unsigned long end = PFN_ALIGN(_etext); | ||||
| 
 | ||||
| 	if (!kernel_set_to_readonly) | ||||
| 		return; | ||||
| @ -1300,9 +1300,9 @@ void mark_rodata_ro(void) | ||||
| { | ||||
| 	unsigned long start = PFN_ALIGN(_text); | ||||
| 	unsigned long rodata_start = PFN_ALIGN(__start_rodata); | ||||
| 	unsigned long end = (unsigned long) &__end_rodata_hpage_align; | ||||
| 	unsigned long text_end = PFN_ALIGN(&__stop___ex_table); | ||||
| 	unsigned long rodata_end = PFN_ALIGN(&__end_rodata); | ||||
| 	unsigned long end = (unsigned long)__end_rodata_hpage_align; | ||||
| 	unsigned long text_end = PFN_ALIGN(_etext); | ||||
| 	unsigned long rodata_end = PFN_ALIGN(__end_rodata); | ||||
| 	unsigned long all_end; | ||||
| 
 | ||||
| 	printk(KERN_INFO "Write protecting the kernel read-only data: %luk\n", | ||||
| @ -1334,8 +1334,10 @@ void mark_rodata_ro(void) | ||||
| 	set_memory_ro(start, (end-start) >> PAGE_SHIFT); | ||||
| #endif | ||||
| 
 | ||||
| 	free_kernel_image_pages((void *)text_end, (void *)rodata_start); | ||||
| 	free_kernel_image_pages((void *)rodata_end, (void *)_sdata); | ||||
| 	free_kernel_image_pages("unused kernel image (text/rodata gap)", | ||||
| 				(void *)text_end, (void *)rodata_start); | ||||
| 	free_kernel_image_pages("unused kernel image (rodata/data gap)", | ||||
| 				(void *)rodata_end, (void *)_sdata); | ||||
| 
 | ||||
| 	debug_checkwx(); | ||||
| } | ||||
|  | ||||
| @ -574,7 +574,7 @@ static void pti_clone_kernel_text(void) | ||||
| 	 */ | ||||
| 	unsigned long start = PFN_ALIGN(_text); | ||||
| 	unsigned long end_clone  = (unsigned long)__end_rodata_aligned; | ||||
| 	unsigned long end_global = PFN_ALIGN((unsigned long)__stop___ex_table); | ||||
| 	unsigned long end_global = PFN_ALIGN((unsigned long)_etext); | ||||
| 
 | ||||
| 	if (!pti_kernel_image_global_ok()) | ||||
| 		return; | ||||
|  | ||||
| @ -14,6 +14,8 @@ | ||||
|  * Joe Taylor <joe@tensilica.com, joetylr@yahoo.com>
 | ||||
|  */ | ||||
| 
 | ||||
| #define RO_EXCEPTION_TABLE_ALIGN	16 | ||||
| 
 | ||||
| #include <asm-generic/vmlinux.lds.h> | ||||
| #include <asm/page.h> | ||||
| #include <asm/thread_info.h> | ||||
| @ -124,18 +126,16 @@ SECTIONS | ||||
| 
 | ||||
|   . = ALIGN(16);
 | ||||
| 
 | ||||
|   RODATA | ||||
|   RO_DATA(4096) | ||||
| 
 | ||||
|   /*  Relocation table */ | ||||
| 
 | ||||
|   .fixup   : { *(.fixup) } | ||||
| 
 | ||||
|   EXCEPTION_TABLE(16) | ||||
|   NOTES | ||||
|   /* Data section */ | ||||
| 
 | ||||
|   _sdata = .;
 | ||||
|   RW_DATA_SECTION(XCHAL_ICACHE_LINESIZE, PAGE_SIZE, THREAD_SIZE) | ||||
|   RW_DATA(XCHAL_ICACHE_LINESIZE, PAGE_SIZE, THREAD_SIZE) | ||||
|   _edata = .;
 | ||||
| 
 | ||||
|   /* Initialization code and data: */ | ||||
|  | ||||
| @ -23,12 +23,11 @@ | ||||
|  *	_etext = .; | ||||
|  * | ||||
|  *      _sdata = .; | ||||
|  *	RO_DATA_SECTION(PAGE_SIZE) | ||||
|  *	RW_DATA_SECTION(...) | ||||
|  *	RO_DATA(PAGE_SIZE) | ||||
|  *	RW_DATA(...) | ||||
|  *	_edata = .; | ||||
|  * | ||||
|  *	EXCEPTION_TABLE(...) | ||||
|  *	NOTES | ||||
|  * | ||||
|  *	BSS_SECTION(0, 0, 0) | ||||
|  *	_end = .; | ||||
| @ -54,6 +53,33 @@ | ||||
| #define LOAD_OFFSET 0 | ||||
| #endif | ||||
| 
 | ||||
| /*
 | ||||
|  * Only some architectures want to have the .notes segment visible in | ||||
|  * a separate PT_NOTE ELF Program Header. When this happens, it needs | ||||
|  * to be visible in both the kernel text's PT_LOAD and the PT_NOTE | ||||
|  * Program Headers. In this case, though, the PT_LOAD needs to be made | ||||
|  * the default again so that all the following sections don't also end | ||||
|  * up in the PT_NOTE Program Header. | ||||
|  */ | ||||
| #ifdef EMITS_PT_NOTE | ||||
| #define NOTES_HEADERS		:text :note | ||||
| #define NOTES_HEADERS_RESTORE	__restore_ph : { *(.__restore_ph) } :text | ||||
| #else | ||||
| #define NOTES_HEADERS | ||||
| #define NOTES_HEADERS_RESTORE | ||||
| #endif | ||||
| 
 | ||||
| /*
 | ||||
|  * Some architectures have non-executable read-only exception tables. | ||||
|  * They can be added to the RO_DATA segment by specifying their desired | ||||
|  * alignment. | ||||
|  */ | ||||
| #ifdef RO_EXCEPTION_TABLE_ALIGN | ||||
| #define RO_EXCEPTION_TABLE	EXCEPTION_TABLE(RO_EXCEPTION_TABLE_ALIGN) | ||||
| #else | ||||
| #define RO_EXCEPTION_TABLE | ||||
| #endif | ||||
| 
 | ||||
| /* Align . to a 8 byte boundary equals to maximum function alignment. */ | ||||
| #define ALIGN_FUNCTION()  . = ALIGN(8) | ||||
| 
 | ||||
| @ -348,7 +374,7 @@ | ||||
| /*
 | ||||
|  * Read only Data | ||||
|  */ | ||||
| #define RO_DATA_SECTION(align)						\ | ||||
| #define RO_DATA(align)							\ | ||||
| 	. = ALIGN((align));						\ | ||||
| 	.rodata           : AT(ADDR(.rodata) - LOAD_OFFSET) {		\ | ||||
| 		__start_rodata = .;					\ | ||||
| @ -496,15 +522,13 @@ | ||||
| 		__start___modver = .;					\ | ||||
| 		KEEP(*(__modver))					\ | ||||
| 		__stop___modver = .;					\ | ||||
| 		. = ALIGN((align));					\ | ||||
| 		__end_rodata = .;					\ | ||||
| 	}								\ | ||||
| 	. = ALIGN((align)); | ||||
| 
 | ||||
| /* RODATA & RO_DATA provided for backward compatibility.
 | ||||
|  * All archs are supposed to use RO_DATA() */ | ||||
| #define RODATA          RO_DATA_SECTION(4096) | ||||
| #define RO_DATA(align)  RO_DATA_SECTION(align) | ||||
| 									\ | ||||
| 	RO_EXCEPTION_TABLE						\ | ||||
| 	NOTES								\ | ||||
| 									\ | ||||
| 	. = ALIGN((align));						\ | ||||
| 	__end_rodata = .; | ||||
| 
 | ||||
| /*
 | ||||
|  * .text section. Map to function alignment to avoid address changes | ||||
| @ -790,7 +814,8 @@ | ||||
| 		__start_notes = .;					\ | ||||
| 		KEEP(*(.note.*))					\ | ||||
| 		__stop_notes = .;					\ | ||||
| 	} | ||||
| 	} NOTES_HEADERS							\ | ||||
| 	NOTES_HEADERS_RESTORE | ||||
| 
 | ||||
| #define INIT_SETUP(initsetup_align)					\ | ||||
| 		. = ALIGN(initsetup_align);				\ | ||||
| @ -962,7 +987,7 @@ | ||||
|  * matches the requirement of PAGE_ALIGNED_DATA. | ||||
|  * | ||||
|  * use 0 as page_align if page_aligned data is not used */ | ||||
| #define RW_DATA_SECTION(cacheline, pagealigned, inittask)		\ | ||||
| #define RW_DATA(cacheline, pagealigned, inittask)			\ | ||||
| 	. = ALIGN(PAGE_SIZE);						\ | ||||
| 	.data : AT(ADDR(.data) - LOAD_OFFSET) {				\ | ||||
| 		INIT_TASK_DATA(inittask)				\ | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user