mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-26 14:14:01 +08:00
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