Loading Makefile +1 −1 Original line number Diff line number Diff line VERSION = 4 PATCHLEVEL = 4 SUBLEVEL = 25 SUBLEVEL = 26 EXTRAVERSION = NAME = Blurry Fish Butt Loading arch/x86/boot/compressed/Makefile +13 −1 Original line number Diff line number Diff line Loading @@ -22,7 +22,7 @@ targets := vmlinux vmlinux.bin vmlinux.bin.gz vmlinux.bin.bz2 vmlinux.bin.lzma \ vmlinux.bin.xz vmlinux.bin.lzo vmlinux.bin.lz4 KBUILD_CFLAGS := -m$(BITS) -D__KERNEL__ $(LINUX_INCLUDE) -O2 KBUILD_CFLAGS += -fno-strict-aliasing -fPIC KBUILD_CFLAGS += -fno-strict-aliasing $(call cc-option, -fPIE, -fPIC) KBUILD_CFLAGS += -DDISABLE_BRANCH_PROFILING cflags-$(CONFIG_X86_32) := -march=i386 cflags-$(CONFIG_X86_64) := -mcmodel=small Loading @@ -35,6 +35,18 @@ KBUILD_AFLAGS := $(KBUILD_CFLAGS) -D__ASSEMBLY__ GCOV_PROFILE := n LDFLAGS := -m elf_$(UTS_MACHINE) ifeq ($(CONFIG_RELOCATABLE),y) # If kernel is relocatable, build compressed kernel as PIE. ifeq ($(CONFIG_X86_32),y) LDFLAGS += $(call ld-option, -pie) $(call ld-option, --no-dynamic-linker) else # To build 64-bit compressed kernel as PIE, we disable relocation # overflow check to avoid relocation overflow error with a new linker # command-line option, -z noreloc-overflow. LDFLAGS += $(shell $(LD) --help 2>&1 | grep -q "\-z noreloc-overflow" \ && echo "-z noreloc-overflow -pie --no-dynamic-linker") endif endif LDFLAGS_vmlinux := -T hostprogs-y := mkpiggy Loading arch/x86/boot/compressed/head_32.S +28 −0 Original line number Diff line number Diff line Loading @@ -31,6 +31,34 @@ #include <asm/asm-offsets.h> #include <asm/bootparam.h> /* * The 32-bit x86 assembler in binutils 2.26 will generate R_386_GOT32X * relocation to get the symbol address in PIC. When the compressed x86 * kernel isn't built as PIC, the linker optimizes R_386_GOT32X * relocations to their fixed symbol addresses. However, when the * compressed x86 kernel is loaded at a different address, it leads * to the following load failure: * * Failed to allocate space for phdrs * * during the decompression stage. * * If the compressed x86 kernel is relocatable at run-time, it should be * compiled with -fPIE, instead of -fPIC, if possible and should be built as * Position Independent Executable (PIE) so that linker won't optimize * R_386_GOT32X relocation to its fixed symbol address. Older * linkers generate R_386_32 relocations against locally defined symbols, * _bss, _ebss, _got and _egot, in PIE. It isn't wrong, just less * optimal than R_386_RELATIVE. But the x86 kernel fails to properly handle * R_386_32 relocations when relocating the kernel. To generate * R_386_RELATIVE relocations, we mark _bss, _ebss, _got and _egot as * hidden: */ .hidden _bss .hidden _ebss .hidden _got .hidden _egot __HEAD ENTRY(startup_32) #ifdef CONFIG_EFI_STUB Loading arch/x86/boot/compressed/head_64.S +8 −0 Original line number Diff line number Diff line Loading @@ -33,6 +33,14 @@ #include <asm/asm-offsets.h> #include <asm/bootparam.h> /* * Locally defined symbols should be marked hidden: */ .hidden _bss .hidden _ebss .hidden _got .hidden _egot __HEAD .code32 ENTRY(startup_32) Loading include/linux/mm.h +1 −0 Original line number Diff line number Diff line Loading @@ -2112,6 +2112,7 @@ static inline struct page *follow_page(struct vm_area_struct *vma, #define FOLL_MIGRATION 0x400 /* wait for page to replace migration entry */ #define FOLL_TRIED 0x800 /* a retry, previous pass started an IO */ #define FOLL_MLOCK 0x1000 /* lock present pages */ #define FOLL_COW 0x4000 /* internal GUP flag */ typedef int (*pte_fn_t)(pte_t *pte, pgtable_t token, unsigned long addr, void *data); Loading Loading
Makefile +1 −1 Original line number Diff line number Diff line VERSION = 4 PATCHLEVEL = 4 SUBLEVEL = 25 SUBLEVEL = 26 EXTRAVERSION = NAME = Blurry Fish Butt Loading
arch/x86/boot/compressed/Makefile +13 −1 Original line number Diff line number Diff line Loading @@ -22,7 +22,7 @@ targets := vmlinux vmlinux.bin vmlinux.bin.gz vmlinux.bin.bz2 vmlinux.bin.lzma \ vmlinux.bin.xz vmlinux.bin.lzo vmlinux.bin.lz4 KBUILD_CFLAGS := -m$(BITS) -D__KERNEL__ $(LINUX_INCLUDE) -O2 KBUILD_CFLAGS += -fno-strict-aliasing -fPIC KBUILD_CFLAGS += -fno-strict-aliasing $(call cc-option, -fPIE, -fPIC) KBUILD_CFLAGS += -DDISABLE_BRANCH_PROFILING cflags-$(CONFIG_X86_32) := -march=i386 cflags-$(CONFIG_X86_64) := -mcmodel=small Loading @@ -35,6 +35,18 @@ KBUILD_AFLAGS := $(KBUILD_CFLAGS) -D__ASSEMBLY__ GCOV_PROFILE := n LDFLAGS := -m elf_$(UTS_MACHINE) ifeq ($(CONFIG_RELOCATABLE),y) # If kernel is relocatable, build compressed kernel as PIE. ifeq ($(CONFIG_X86_32),y) LDFLAGS += $(call ld-option, -pie) $(call ld-option, --no-dynamic-linker) else # To build 64-bit compressed kernel as PIE, we disable relocation # overflow check to avoid relocation overflow error with a new linker # command-line option, -z noreloc-overflow. LDFLAGS += $(shell $(LD) --help 2>&1 | grep -q "\-z noreloc-overflow" \ && echo "-z noreloc-overflow -pie --no-dynamic-linker") endif endif LDFLAGS_vmlinux := -T hostprogs-y := mkpiggy Loading
arch/x86/boot/compressed/head_32.S +28 −0 Original line number Diff line number Diff line Loading @@ -31,6 +31,34 @@ #include <asm/asm-offsets.h> #include <asm/bootparam.h> /* * The 32-bit x86 assembler in binutils 2.26 will generate R_386_GOT32X * relocation to get the symbol address in PIC. When the compressed x86 * kernel isn't built as PIC, the linker optimizes R_386_GOT32X * relocations to their fixed symbol addresses. However, when the * compressed x86 kernel is loaded at a different address, it leads * to the following load failure: * * Failed to allocate space for phdrs * * during the decompression stage. * * If the compressed x86 kernel is relocatable at run-time, it should be * compiled with -fPIE, instead of -fPIC, if possible and should be built as * Position Independent Executable (PIE) so that linker won't optimize * R_386_GOT32X relocation to its fixed symbol address. Older * linkers generate R_386_32 relocations against locally defined symbols, * _bss, _ebss, _got and _egot, in PIE. It isn't wrong, just less * optimal than R_386_RELATIVE. But the x86 kernel fails to properly handle * R_386_32 relocations when relocating the kernel. To generate * R_386_RELATIVE relocations, we mark _bss, _ebss, _got and _egot as * hidden: */ .hidden _bss .hidden _ebss .hidden _got .hidden _egot __HEAD ENTRY(startup_32) #ifdef CONFIG_EFI_STUB Loading
arch/x86/boot/compressed/head_64.S +8 −0 Original line number Diff line number Diff line Loading @@ -33,6 +33,14 @@ #include <asm/asm-offsets.h> #include <asm/bootparam.h> /* * Locally defined symbols should be marked hidden: */ .hidden _bss .hidden _ebss .hidden _got .hidden _egot __HEAD .code32 ENTRY(startup_32) Loading
include/linux/mm.h +1 −0 Original line number Diff line number Diff line Loading @@ -2112,6 +2112,7 @@ static inline struct page *follow_page(struct vm_area_struct *vma, #define FOLL_MIGRATION 0x400 /* wait for page to replace migration entry */ #define FOLL_TRIED 0x800 /* a retry, previous pass started an IO */ #define FOLL_MLOCK 0x1000 /* lock present pages */ #define FOLL_COW 0x4000 /* internal GUP flag */ typedef int (*pte_fn_t)(pte_t *pte, pgtable_t token, unsigned long addr, void *data); Loading