mirror of
https://github.com/torvalds/linux.git
synced 2024-11-21 19:41:42 +00:00
Kbuild updates for v5.16
- Remove the global -isystem compiler flag, which was made possible by the introduction of <linux/stdarg.h> - Improve the Kconfig help to print the location in the top menu level - Fix "FORCE prerequisite is missing" build warning for sparc - Add new build targets, tarzst-pkg and perf-tarzst-src-pkg, which generate a zstd-compressed tarball - Prevent gen_init_cpio tool from generating a corrupted cpio when KBUILD_BUILD_TIMESTAMP is set to 2106-02-07 or later - Misc cleanups -----BEGIN PGP SIGNATURE----- iQJJBAABCgAzFiEEbmPs18K1szRHjPqEPYsBB53g2wYFAmGGkysVHG1hc2FoaXJv eUBrZXJuZWwub3JnAAoJED2LAQed4NsGgZkQAIX4i9Tt6pyl/2xGDGkzUqjprfoH QUIo1DoUclLUygoakrrrX3EnZLWrslgPTKjQxdiV6RA6xHfe4cYgNTSq8zM9lsPT lu+B4nEDqoXQ5gyLxMlnjS3FRQTNYIeBZEhSAIiW8TENdLKlKc+NYdoj7th50dO0 SkXRa2dpWHa6t7ZRqHIHMpUWA7gm0w22ZbgQmyUv1CDGO4IHPLqe2b2PMsrzhSZ1 yypP1l6aQVKuP0hN9aytbTRqDxUd0uOzBf00PK5zx23hjdwZ9wmZrFTKDf9fAu/+ nR7gBsa5YoYNQh3UkayZXjR5dClmgsCXZ25OXI7YucQp/8OJ5fadfn1NFpJHsw56 n5cckbHIXgnFUcel5YlkR6qTHjpzdr9vHm90MmiuX99b3oy9czl6pY3qkNfRkllQ v7ME5L1qlw3P3ia1KA+H4zW/LIJ8p5cbKBwaY22m3kY3bTx7PiOfMlep4UVqxXSb 0/OqxSsmYg5LlmwEQ0SSsx45hE0o9nG/cdjkHu1jUOUHxYfpt1T4MTILeGUwmjzd TydJym5MZyXBawu4NVB3QLoKm5Jt2BXtyaWOtq74VSrs77roNCdYuQWJ+1aBf2Pg 0s4CVC2cC7KlxJDImoqswZATGXPMfbiVDcuVSSukYRgBMeCBPUzRhB8YP36BZyD3 9vFYmqSujtUU7nWb =ATFN -----END PGP SIGNATURE----- Merge tag 'kbuild-v5.16' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild Pull Kbuild updates from Masahiro Yamada: - Remove the global -isystem compiler flag, which was made possible by the introduction of <linux/stdarg.h> - Improve the Kconfig help to print the location in the top menu level - Fix "FORCE prerequisite is missing" build warning for sparc - Add new build targets, tarzst-pkg and perf-tarzst-src-pkg, which generate a zstd-compressed tarball - Prevent gen_init_cpio tool from generating a corrupted cpio when KBUILD_BUILD_TIMESTAMP is set to 2106-02-07 or later - Misc cleanups * tag 'kbuild-v5.16' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild: (28 commits) kbuild: use more subdir- for visiting subdirectories while cleaning sh: remove meaningless archclean line initramfs: Check timestamp to prevent broken cpio archive kbuild: split DEBUG_CFLAGS out to scripts/Makefile.debug gen_init_cpio: add static const qualifiers kbuild: Add make tarzst-pkg build option scripts: update the comments of kallsyms support sparc: Add missing "FORCE" target when using if_changed kconfig: refactor conf_touch_dep() kconfig: refactor conf_write_dep() kconfig: refactor conf_write_autoconf() kconfig: add conf_get_autoheader_name() kconfig: move sym_escape_string_value() to confdata.c kconfig: refactor listnewconfig code kconfig: refactor conf_write_symbol() kconfig: refactor conf_write_heading() kconfig: remove 'const' from the return type of sym_escape_string_value() kconfig: rename a variable in the lexer to a clearer name kconfig: narrow the scope of variables in the lexer kconfig: Create links to main menu items in search ...
This commit is contained in:
commit
1e9ed9360f
@ -1050,22 +1050,9 @@ is not sufficient this sometimes needs to be explicit.
|
||||
The above assignment instructs kbuild to descend down in the
|
||||
directory compressed/ when "make clean" is executed.
|
||||
|
||||
To support the clean infrastructure in the Makefiles that build the
|
||||
final bootimage there is an optional target named archclean:
|
||||
|
||||
Example::
|
||||
|
||||
#arch/x86/Makefile
|
||||
archclean:
|
||||
$(Q)$(MAKE) $(clean)=arch/x86/boot
|
||||
|
||||
When "make clean" is executed, make will descend down in arch/x86/boot,
|
||||
and clean as usual. The Makefile located in arch/x86/boot/ may use
|
||||
the subdir- trick to descend further down.
|
||||
|
||||
Note 1: arch/$(SRCARCH)/Makefile cannot use "subdir-", because that file is
|
||||
included in the top level makefile, and the kbuild infrastructure
|
||||
is not operational at that point.
|
||||
included in the top level makefile. Instead, arch/$(SRCARCH)/Kbuild can use
|
||||
"subdir-".
|
||||
|
||||
Note 2: All directories listed in core-y, libs-y, drivers-y and net-y will
|
||||
be visited during "make clean".
|
||||
|
41
Makefile
41
Makefile
@ -850,44 +850,6 @@ ifdef CONFIG_ZERO_CALL_USED_REGS
|
||||
KBUILD_CFLAGS += -fzero-call-used-regs=used-gpr
|
||||
endif
|
||||
|
||||
DEBUG_CFLAGS :=
|
||||
|
||||
ifdef CONFIG_DEBUG_INFO
|
||||
|
||||
ifdef CONFIG_DEBUG_INFO_SPLIT
|
||||
DEBUG_CFLAGS += -gsplit-dwarf
|
||||
else
|
||||
DEBUG_CFLAGS += -g
|
||||
endif
|
||||
|
||||
ifndef CONFIG_AS_IS_LLVM
|
||||
KBUILD_AFLAGS += -Wa,-gdwarf-2
|
||||
endif
|
||||
|
||||
ifndef CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT
|
||||
dwarf-version-$(CONFIG_DEBUG_INFO_DWARF4) := 4
|
||||
dwarf-version-$(CONFIG_DEBUG_INFO_DWARF5) := 5
|
||||
DEBUG_CFLAGS += -gdwarf-$(dwarf-version-y)
|
||||
endif
|
||||
|
||||
ifdef CONFIG_DEBUG_INFO_REDUCED
|
||||
DEBUG_CFLAGS += -fno-var-tracking
|
||||
ifdef CONFIG_CC_IS_GCC
|
||||
DEBUG_CFLAGS += -femit-struct-debug-baseonly
|
||||
endif
|
||||
endif
|
||||
|
||||
ifdef CONFIG_DEBUG_INFO_COMPRESSED
|
||||
DEBUG_CFLAGS += -gz=zlib
|
||||
KBUILD_AFLAGS += -gz=zlib
|
||||
KBUILD_LDFLAGS += --compress-debug-sections=zlib
|
||||
endif
|
||||
|
||||
endif # CONFIG_DEBUG_INFO
|
||||
|
||||
KBUILD_CFLAGS += $(DEBUG_CFLAGS)
|
||||
export DEBUG_CFLAGS
|
||||
|
||||
ifdef CONFIG_FUNCTION_TRACER
|
||||
ifdef CONFIG_FTRACE_MCOUNT_USE_CC
|
||||
CC_FLAGS_FTRACE += -mrecord-mcount
|
||||
@ -984,7 +946,7 @@ KBUILD_CFLAGS += -falign-functions=64
|
||||
endif
|
||||
|
||||
# arch Makefile may override CC so keep this after arch Makefile is included
|
||||
NOSTDINC_FLAGS += -nostdinc -isystem $(shell $(CC) -print-file-name=include)
|
||||
NOSTDINC_FLAGS += -nostdinc
|
||||
|
||||
# warn about C99 declaration after statement
|
||||
KBUILD_CFLAGS += -Wdeclaration-after-statement
|
||||
@ -1051,6 +1013,7 @@ KBUILD_CPPFLAGS += $(call cc-option,-fmacro-prefix-map=$(srctree)/=)
|
||||
|
||||
# include additional Makefiles when needed
|
||||
include-y := scripts/Makefile.extrawarn
|
||||
include-$(CONFIG_DEBUG_INFO) += scripts/Makefile.debug
|
||||
include-$(CONFIG_KASAN) += scripts/Makefile.kasan
|
||||
include-$(CONFIG_KCSAN) += scripts/Makefile.kcsan
|
||||
include-$(CONFIG_UBSAN) += scripts/Makefile.ubsan
|
||||
|
@ -1,3 +1,6 @@
|
||||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
obj-y += kernel/ mm/
|
||||
obj-$(CONFIG_MATHEMU) += math-emu/
|
||||
|
||||
# for cleaning
|
||||
subdir- += boot
|
||||
|
@ -55,9 +55,6 @@ $(boot)/vmlinux.gz: vmlinux
|
||||
bootimage bootpfile bootpzfile: vmlinux
|
||||
$(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
|
||||
|
||||
archclean:
|
||||
$(Q)$(MAKE) $(clean)=$(boot)
|
||||
|
||||
archheaders:
|
||||
$(Q)$(MAKE) $(build)=arch/alpha/kernel/syscalls all
|
||||
|
||||
|
@ -1,3 +1,6 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
obj-y += kernel/
|
||||
obj-y += mm/
|
||||
|
||||
# for cleaning
|
||||
subdir- += boot
|
||||
|
@ -112,6 +112,3 @@ uImage: $(uimage-default-y)
|
||||
@$(kecho) ' Image $(boot)/uImage is ready'
|
||||
|
||||
CLEAN_FILES += $(boot)/uImage
|
||||
|
||||
archclean:
|
||||
$(Q)$(MAKE) $(clean)=$(boot)
|
||||
|
@ -9,3 +9,6 @@ obj-y += kernel/ mm/ common/
|
||||
obj-y += probes/
|
||||
obj-y += net/
|
||||
obj-y += crypto/
|
||||
|
||||
# for cleaning
|
||||
subdir- += boot
|
||||
|
@ -318,10 +318,6 @@ ifeq ($(CONFIG_VDSO),y)
|
||||
$(Q)$(MAKE) $(build)=arch/arm/vdso $@
|
||||
endif
|
||||
|
||||
# We use MRPROPER_FILES and CLEAN_FILES now
|
||||
archclean:
|
||||
$(Q)$(MAKE) $(clean)=$(boot)
|
||||
|
||||
# My testing targets (bypasses dependencies)
|
||||
bp:; $(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $(boot)/bootpImage
|
||||
|
||||
|
@ -4,3 +4,6 @@ obj-$(CONFIG_KVM) += kvm/
|
||||
obj-$(CONFIG_XEN) += xen/
|
||||
obj-$(subst m,y,$(CONFIG_HYPERV)) += hyperv/
|
||||
obj-$(CONFIG_CRYPTO) += crypto/
|
||||
|
||||
# for cleaning
|
||||
subdir- += boot
|
||||
|
@ -182,13 +182,6 @@ ifeq ($(CONFIG_ARM64_USE_LSE_ATOMICS),y)
|
||||
endif
|
||||
endif
|
||||
|
||||
|
||||
# We use MRPROPER_FILES and CLEAN_FILES now
|
||||
archclean:
|
||||
$(Q)$(MAKE) $(clean)=$(boot)
|
||||
$(Q)$(MAKE) $(clean)=arch/arm64/kernel/vdso
|
||||
$(Q)$(MAKE) $(clean)=arch/arm64/kernel/vdso32
|
||||
|
||||
ifeq ($(KBUILD_EXTMOD),)
|
||||
# We need to generate vdso-offsets.h before compiling certain files in kernel/.
|
||||
# In order to do that, we should use the archprepare target, but we can't since
|
||||
|
@ -81,3 +81,6 @@ extra-y += $(head-y) vmlinux.lds
|
||||
ifeq ($(CONFIG_DEBUG_EFI),y)
|
||||
AFLAGS_head.o += -DVMLINUX_PATH="\"$(realpath $(objtree)/vmlinux)\""
|
||||
endif
|
||||
|
||||
# for cleaning
|
||||
subdir- += vdso vdso32
|
||||
|
@ -9,6 +9,8 @@ ifeq ($(CONFIG_KERNEL_MODE_NEON), y)
|
||||
obj-$(CONFIG_XOR_BLOCKS) += xor-neon.o
|
||||
CFLAGS_REMOVE_xor-neon.o += -mgeneral-regs-only
|
||||
CFLAGS_xor-neon.o += -ffreestanding
|
||||
# Enable <arm_neon.h>
|
||||
CFLAGS_xor-neon.o += -isystem $(shell $(CC) -print-file-name=include)
|
||||
endif
|
||||
|
||||
lib-$(CONFIG_ARCH_HAS_UACCESS_FLUSHCACHE) += uaccess_flushcache.o
|
||||
|
@ -1 +1,4 @@
|
||||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
|
||||
# for cleaning
|
||||
subdir- += boot
|
||||
|
@ -76,9 +76,6 @@ all: zImage
|
||||
zImage Image uImage: vmlinux
|
||||
$(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
|
||||
|
||||
archclean:
|
||||
$(Q)$(MAKE) $(clean)=$(boot)
|
||||
|
||||
define archhelp
|
||||
echo '* zImage - Compressed kernel image (arch/$(ARCH)/boot/zImage)'
|
||||
echo ' Image - Uncompressed kernel image (arch/$(ARCH)/boot/Image)'
|
||||
|
@ -1,2 +1,5 @@
|
||||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
obj-y += kernel/ mm/ boot/dts/
|
||||
|
||||
# for cleaning
|
||||
subdir- += boot
|
||||
|
@ -34,9 +34,6 @@ libs-y += arch/$(ARCH)/lib/
|
||||
|
||||
boot := arch/h8300/boot
|
||||
|
||||
archclean:
|
||||
$(Q)$(MAKE) $(clean)=$(boot)
|
||||
|
||||
vmlinux.srec vmlinux.bin zImage uImage.bin: vmlinux
|
||||
$(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
|
||||
|
||||
|
@ -67,8 +67,6 @@ vmlinux.bin: vmlinux FORCE
|
||||
unwcheck: vmlinux
|
||||
-$(Q)READELF=$(READELF) $(PYTHON3) $(srctree)/arch/ia64/scripts/unwcheck.py $<
|
||||
|
||||
archclean:
|
||||
|
||||
archheaders:
|
||||
$(Q)$(MAKE) $(build)=arch/ia64/kernel/syscalls all
|
||||
|
||||
|
@ -2,9 +2,7 @@
|
||||
# m68k/Makefile
|
||||
#
|
||||
# This file is included by the global makefile so that you can add your own
|
||||
# architecture-specific flags and dependencies. Remember to do have actions
|
||||
# for "archclean" and "archdep" for cleaning up and making dependencies for
|
||||
# this architecture
|
||||
# architecture-specific flags and dependencies.
|
||||
#
|
||||
# This file is subject to the terms and conditions of the GNU General Public
|
||||
# License. See the file "COPYING" in the main directory of this archive
|
||||
|
@ -3,3 +3,6 @@ obj-y += kernel/
|
||||
obj-y += mm/
|
||||
obj-$(CONFIG_PCI) += pci/
|
||||
obj-y += boot/dts/
|
||||
|
||||
# for cleaning
|
||||
subdir- += boot
|
||||
|
@ -60,9 +60,6 @@ export DTB
|
||||
|
||||
all: linux.bin
|
||||
|
||||
archclean:
|
||||
$(Q)$(MAKE) $(clean)=$(boot)
|
||||
|
||||
archheaders:
|
||||
$(Q)$(MAKE) $(build)=arch/microblaze/kernel/syscalls all
|
||||
|
||||
|
@ -25,3 +25,6 @@ obj-y += vdso/
|
||||
ifdef CONFIG_KVM
|
||||
obj-y += kvm/
|
||||
endif
|
||||
|
||||
# for cleaning
|
||||
subdir- += boot
|
||||
|
@ -8,8 +8,7 @@
|
||||
# Copyright (C) 2002, 2003, 2004 Maciej W. Rozycki
|
||||
#
|
||||
# This file is included by the global makefile so that you can add your own
|
||||
# architecture-specific flags and dependencies. Remember to do have actions
|
||||
# for "archclean" cleaning up for this architecture.
|
||||
# architecture-specific flags and dependencies.
|
||||
#
|
||||
|
||||
archscripts: scripts_basic
|
||||
@ -426,11 +425,6 @@ endif
|
||||
$(Q)install -D -m 644 .config $(INSTALL_PATH)/config-$(KERNELRELEASE)
|
||||
$(Q)install -D -m 644 System.map $(INSTALL_PATH)/System.map-$(KERNELRELEASE)
|
||||
|
||||
archclean:
|
||||
$(Q)$(MAKE) $(clean)=arch/mips/boot
|
||||
$(Q)$(MAKE) $(clean)=arch/mips/boot/compressed
|
||||
$(Q)$(MAKE) $(clean)=arch/mips/boot/tools
|
||||
|
||||
archheaders:
|
||||
$(Q)$(MAKE) $(build)=arch/mips/kernel/syscalls all
|
||||
|
||||
|
@ -171,3 +171,6 @@ $(obj)/vmlinux.itb: $(obj)/vmlinux.its $(obj)/vmlinux.bin FORCE
|
||||
|
||||
$(obj)/vmlinux.%.itb: $(obj)/vmlinux.%.its $(obj)/vmlinux.bin.% FORCE
|
||||
$(call if_changed,itb-image,$<)
|
||||
|
||||
# for cleaning
|
||||
subdir- += compressed tools
|
||||
|
@ -1 +1,4 @@
|
||||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
|
||||
# for cleaning
|
||||
subdir- += boot
|
||||
|
@ -9,6 +9,8 @@ endif
|
||||
# Avoid generating FPU instructions
|
||||
arch-y += -mno-ext-fpu-sp -mno-ext-fpu-dp -mfloat-abi=soft
|
||||
|
||||
# Enable <nds32_intrinsic.h>
|
||||
KBUILD_CFLAGS += -isystem $(shell $(CC) -print-file-name=include)
|
||||
KBUILD_CFLAGS += $(call cc-option, -mno-sched-prolog-epilog)
|
||||
KBUILD_CFLAGS += -mcmodel=large
|
||||
|
||||
@ -62,9 +64,6 @@ prepare: vdso_prepare
|
||||
vdso_prepare: prepare0
|
||||
$(Q)$(MAKE) $(build)=arch/nds32/kernel/vdso include/generated/vdso-offsets.h
|
||||
|
||||
archclean:
|
||||
$(Q)$(MAKE) $(clean)=$(boot)
|
||||
|
||||
define archhelp
|
||||
echo ' Image - kernel image (arch/$(ARCH)/boot/Image)'
|
||||
endef
|
||||
|
@ -1 +1,4 @@
|
||||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
|
||||
# for cleaning
|
||||
subdir- += boot
|
||||
|
@ -8,8 +8,7 @@
|
||||
# Written by Fredrik Markstrom
|
||||
#
|
||||
# This file is included by the global makefile so that you can add your own
|
||||
# architecture-specific flags and dependencies. Remember to do have actions
|
||||
# for "archclean" cleaning up for this architecture.
|
||||
# architecture-specific flags and dependencies.
|
||||
#
|
||||
# Nios2 port by Wind River Systems Inc trough:
|
||||
# fredrik.markstrom@gmail.com and ivarholmqvist@gmail.com
|
||||
@ -53,14 +52,12 @@ core-y += $(nios2-boot)/dts/
|
||||
|
||||
all: vmImage
|
||||
|
||||
archclean:
|
||||
$(Q)$(MAKE) $(clean)=$(nios2-boot)
|
||||
|
||||
$(BOOT_TARGETS): vmlinux
|
||||
$(Q)$(MAKE) $(build)=$(nios2-boot) $(nios2-boot)/$@
|
||||
|
||||
install:
|
||||
$(Q)$(MAKE) $(build)=$(nios2-boot) BOOTIMAGE=$(KBUILD_IMAGE) install
|
||||
sh $(srctree)/$(nios2-boot)/install.sh $(KERNELRELEASE) \
|
||||
$(KBUILD_IMAGE) System.map "$(INSTALL_PATH)"
|
||||
|
||||
define archhelp
|
||||
echo '* vmImage - Kernel-only image for U-Boot ($(KBUILD_IMAGE))'
|
||||
|
@ -30,6 +30,3 @@ $(obj)/zImage: $(obj)/compressed/vmlinux FORCE
|
||||
|
||||
$(obj)/compressed/vmlinux: $(obj)/vmlinux.gz FORCE
|
||||
$(Q)$(MAKE) $(build)=$(obj)/compressed $@
|
||||
|
||||
install:
|
||||
sh $(srctree)/$(src)/install.sh $(KERNELRELEASE) $(BOOTIMAGE) System.map "$(INSTALL_PATH)"
|
||||
|
@ -1,3 +1,6 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
obj-y += lib/ kernel/ mm/
|
||||
obj-y += boot/dts/
|
||||
|
||||
# for cleaning
|
||||
subdir- += boot
|
||||
|
@ -1,9 +1,7 @@
|
||||
# BK Id: %F% %I% %G% %U% %#%
|
||||
#
|
||||
# This file is included by the global makefile so that you can add your own
|
||||
# architecture-specific flags and dependencies. Remember to do have actions
|
||||
# for "archclean" and "archdep" for cleaning up and making dependencies for
|
||||
# this architecture
|
||||
# architecture-specific flags and dependencies.
|
||||
#
|
||||
# This file is subject to the terms and conditions of the GNU General Public
|
||||
# License. See the file "COPYING" in the main directory of this archive
|
||||
@ -48,6 +46,3 @@ PHONY += vmlinux.bin
|
||||
|
||||
vmlinux.bin: vmlinux
|
||||
$(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
|
||||
|
||||
archclean:
|
||||
$(Q)$(MAKE) $(clean)=$(boot)
|
||||
|
@ -1,2 +1,5 @@
|
||||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
obj-y += mm/ kernel/ math-emu/
|
||||
|
||||
# for cleaning
|
||||
subdir- += boot
|
||||
|
@ -2,9 +2,7 @@
|
||||
# parisc/Makefile
|
||||
#
|
||||
# This file is included by the global makefile so that you can add your own
|
||||
# architecture-specific flags and dependencies. Remember to do have actions
|
||||
# for "archclean" and "archdep" for cleaning up and making dependencies for
|
||||
# this architecture
|
||||
# architecture-specific flags and dependencies.
|
||||
#
|
||||
# This file is subject to the terms and conditions of the GNU General Public
|
||||
# License. See the file "COPYING" in the main directory of this archive
|
||||
@ -181,8 +179,5 @@ define archhelp
|
||||
@echo ' zinstall - Install compressed vmlinuz kernel'
|
||||
endef
|
||||
|
||||
archclean:
|
||||
$(Q)$(MAKE) $(clean)=$(boot)
|
||||
|
||||
archheaders:
|
||||
$(Q)$(MAKE) $(build)=arch/parisc/kernel/syscalls all
|
||||
|
@ -16,3 +16,6 @@ obj-$(CONFIG_KVM) += kvm/
|
||||
obj-$(CONFIG_PERF_EVENTS) += perf/
|
||||
obj-$(CONFIG_KEXEC_CORE) += kexec/
|
||||
obj-$(CONFIG_KEXEC_FILE) += purgatory/
|
||||
|
||||
# for cleaning
|
||||
subdir- += boot
|
||||
|
@ -1,7 +1,5 @@
|
||||
# This file is included by the global makefile so that you can add your own
|
||||
# architecture-specific flags and dependencies. Remember to do have actions
|
||||
# for "archclean" and "archdep" for cleaning up and making dependencies for
|
||||
# this architecture.
|
||||
# architecture-specific flags and dependencies.
|
||||
#
|
||||
# This file is subject to the terms and conditions of the GNU General Public
|
||||
# License. See the file "COPYING" in the main directory of this archive
|
||||
@ -411,9 +409,6 @@ install:
|
||||
sh -x $(srctree)/$(boot)/install.sh "$(KERNELRELEASE)" vmlinux \
|
||||
System.map "$(INSTALL_PATH)"
|
||||
|
||||
archclean:
|
||||
$(Q)$(MAKE) $(clean)=$(boot)
|
||||
|
||||
ifeq ($(KBUILD_EXTMOD),)
|
||||
# We need to generate vdso-offsets.h before compiling certain files in kernel/.
|
||||
# In order to do that, we should use the archprepare target, but we can't since
|
||||
|
@ -65,5 +65,7 @@ obj-$(CONFIG_FTR_FIXUP_SELFTEST) += feature-fixups-test.o
|
||||
|
||||
obj-$(CONFIG_ALTIVEC) += xor_vmx.o xor_vmx_glue.o
|
||||
CFLAGS_xor_vmx.o += -maltivec $(call cc-option,-mabi=altivec)
|
||||
# Enable <altivec.h>
|
||||
CFLAGS_xor_vmx.o += -isystem $(shell $(CC) -print-file-name=include)
|
||||
|
||||
obj-$(CONFIG_PPC64) += $(obj64-y)
|
||||
|
@ -2,3 +2,6 @@
|
||||
|
||||
obj-y += kernel/ mm/ net/
|
||||
obj-$(CONFIG_BUILTIN_DTB) += boot/dts/
|
||||
|
||||
# for cleaning
|
||||
subdir- += boot
|
||||
|
@ -1,7 +1,5 @@
|
||||
# This file is included by the global makefile so that you can add your own
|
||||
# architecture-specific flags and dependencies. Remember to do have actions
|
||||
# for "archclean" and "archdep" for cleaning up and making dependencies for
|
||||
# this architecture
|
||||
# architecture-specific flags and dependencies.
|
||||
#
|
||||
# This file is subject to the terms and conditions of the GNU General Public
|
||||
# License. See the file "COPYING" in the main directory of this archive
|
||||
@ -138,6 +136,3 @@ zinstall: install-image = Image.gz
|
||||
install zinstall:
|
||||
$(CONFIG_SHELL) $(srctree)/$(boot)/install.sh $(KERNELRELEASE) \
|
||||
$(boot)/$(install-image) System.map "$(INSTALL_PATH)"
|
||||
|
||||
archclean:
|
||||
$(Q)$(MAKE) $(clean)=$(boot)
|
||||
|
@ -8,3 +8,6 @@ obj-$(CONFIG_APPLDATA_BASE) += appldata/
|
||||
obj-y += net/
|
||||
obj-$(CONFIG_PCI) += pci/
|
||||
obj-$(CONFIG_ARCH_HAS_KEXEC_PURGATORY) += purgatory/
|
||||
|
||||
# for cleaning
|
||||
subdir- += boot tools
|
||||
|
@ -3,9 +3,7 @@
|
||||
# s390/Makefile
|
||||
#
|
||||
# This file is included by the global makefile so that you can add your own
|
||||
# architecture-specific flags and dependencies. Remember to do have actions
|
||||
# for "archclean" and "archdep" for cleaning up and making dependencies for
|
||||
# this architecture
|
||||
# architecture-specific flags and dependencies.
|
||||
#
|
||||
# Copyright (C) 1994 by Linus Torvalds
|
||||
#
|
||||
@ -147,10 +145,6 @@ zfcpdump:
|
||||
vdso_install:
|
||||
$(Q)$(MAKE) $(build)=arch/$(ARCH)/kernel/vdso64 $@
|
||||
|
||||
archclean:
|
||||
$(Q)$(MAKE) $(clean)=$(boot)
|
||||
$(Q)$(MAKE) $(clean)=$(tools)
|
||||
|
||||
archheaders:
|
||||
$(Q)$(MAKE) $(build)=$(syscalls) uapi
|
||||
|
||||
|
@ -2,3 +2,6 @@
|
||||
obj-y += kernel/ mm/ boards/
|
||||
obj-$(CONFIG_SH_FPU_EMU) += math-emu/
|
||||
obj-$(CONFIG_USE_BUILTIN_DTB) += boot/dts/
|
||||
|
||||
# for cleaning
|
||||
subdir- += boot
|
||||
|
@ -198,10 +198,6 @@ compressed: zImage
|
||||
archprepare:
|
||||
$(Q)$(MAKE) $(build)=arch/sh/tools include/generated/machtypes.h
|
||||
|
||||
archclean:
|
||||
$(Q)$(MAKE) $(clean)=$(boot)
|
||||
$(Q)$(MAKE) $(clean)=arch/sh/kernel/vsyscall
|
||||
|
||||
archheaders:
|
||||
$(Q)$(MAKE) $(build)=arch/sh/kernel/syscalls all
|
||||
|
||||
|
@ -9,3 +9,6 @@ obj-y += math-emu/
|
||||
obj-y += net/
|
||||
obj-y += crypto/
|
||||
obj-$(CONFIG_SPARC64) += vdso/
|
||||
|
||||
# for cleaning
|
||||
subdir- += boot
|
||||
|
@ -75,9 +75,6 @@ install:
|
||||
sh $(srctree)/$(boot)/install.sh $(KERNELRELEASE) $(KBUILD_IMAGE) \
|
||||
System.map "$(INSTALL_PATH)"
|
||||
|
||||
archclean:
|
||||
$(Q)$(MAKE) $(clean)=$(boot)
|
||||
|
||||
archheaders:
|
||||
$(Q)$(MAKE) $(build)=arch/sparc/kernel/syscalls all
|
||||
|
||||
|
@ -22,7 +22,7 @@ ifeq ($(CONFIG_SPARC64),y)
|
||||
|
||||
# Actual linking
|
||||
|
||||
$(obj)/zImage: $(obj)/image
|
||||
$(obj)/zImage: $(obj)/image FORCE
|
||||
$(call if_changed,gzip)
|
||||
@echo ' kernel: $@ is ready'
|
||||
|
||||
@ -31,7 +31,7 @@ $(obj)/vmlinux.aout: vmlinux FORCE
|
||||
@echo ' kernel: $@ is ready'
|
||||
else
|
||||
|
||||
$(obj)/zImage: $(obj)/image
|
||||
$(obj)/zImage: $(obj)/image FORCE
|
||||
$(call if_changed,strip)
|
||||
@echo ' kernel: $@ is ready'
|
||||
|
||||
@ -44,7 +44,7 @@ OBJCOPYFLAGS_image.bin := -S -O binary -R .note -R .comment
|
||||
$(obj)/image.bin: $(obj)/image FORCE
|
||||
$(call if_changed,objcopy)
|
||||
|
||||
$(obj)/image.gz: $(obj)/image.bin
|
||||
$(obj)/image.gz: $(obj)/image.bin FORCE
|
||||
$(call if_changed,gzip)
|
||||
|
||||
UIMAGE_LOADADDR = $(CONFIG_UBOOT_LOAD_ADDR)
|
||||
@ -56,7 +56,7 @@ quiet_cmd_uimage.o = UIMAGE.O $@
|
||||
-r -b binary $@ -o $@.o
|
||||
|
||||
targets += uImage
|
||||
$(obj)/uImage: $(obj)/image.gz
|
||||
$(obj)/uImage: $(obj)/image.gz FORCE
|
||||
$(call if_changed,uimage)
|
||||
$(call if_changed,uimage.o)
|
||||
@echo ' Image $@ is ready'
|
||||
|
@ -25,3 +25,6 @@ obj-y += platform/
|
||||
obj-y += net/
|
||||
|
||||
obj-$(CONFIG_KEXEC_FILE) += purgatory/
|
||||
|
||||
# for cleaning
|
||||
subdir- += boot tools
|
||||
|
@ -283,8 +283,6 @@ endif
|
||||
archclean:
|
||||
$(Q)rm -rf $(objtree)/arch/i386
|
||||
$(Q)rm -rf $(objtree)/arch/x86_64
|
||||
$(Q)$(MAKE) $(clean)=$(boot)
|
||||
$(Q)$(MAKE) $(clean)=arch/x86/tools
|
||||
|
||||
define archhelp
|
||||
echo '* bzImage - Compressed kernel image (arch/x86/boot/bzImage)'
|
||||
|
@ -7,9 +7,7 @@
|
||||
# Copyright (C) 2014 Cadence Design Systems Inc.
|
||||
#
|
||||
# This file is included by the global makefile so that you can add your own
|
||||
# architecture-specific flags and dependencies. Remember to do have actions
|
||||
# for "archclean" and "archdep" for cleaning up and making dependencies for
|
||||
# this architecture
|
||||
# architecture-specific flags and dependencies.
|
||||
|
||||
# Core configuration.
|
||||
# (Use VAR=<xtensa_config> to use another default compiler.)
|
||||
|
@ -119,6 +119,8 @@ CFLAGS_aegis128-neon-inner.o += $(aegis128-cflags-y)
|
||||
CFLAGS_REMOVE_aegis128-neon-inner.o += -mgeneral-regs-only
|
||||
aegis128-$(CONFIG_CRYPTO_AEGIS128_SIMD) += aegis128-neon.o aegis128-neon-inner.o
|
||||
endif
|
||||
# Enable <arm_neon.h>
|
||||
CFLAGS_aegis128-neon-inner.o += -isystem $(shell $(CC) -print-file-name=include)
|
||||
|
||||
obj-$(CONFIG_CRYPTO_PCRYPT) += pcrypt.o
|
||||
obj-$(CONFIG_CRYPTO_CRYPTD) += cryptd.o
|
||||
|
@ -14,6 +14,8 @@ hostprogs += mktables
|
||||
|
||||
ifeq ($(CONFIG_ALTIVEC),y)
|
||||
altivec_flags := -maltivec $(call cc-option,-mabi=altivec)
|
||||
# Enable <altivec.h>
|
||||
altivec_flags += -isystem $(shell $(CC) -print-file-name=include)
|
||||
|
||||
ifdef CONFIG_CC_IS_CLANG
|
||||
# clang ppc port does not yet support -maltivec when -msoft-float is
|
||||
@ -34,6 +36,8 @@ endif
|
||||
# ARM/NEON intrinsics in a non C99-compliant environment (such as the kernel)
|
||||
ifeq ($(CONFIG_KERNEL_MODE_NEON),y)
|
||||
NEON_FLAGS := -ffreestanding
|
||||
# Enable <arm_neon.h>
|
||||
NEON_FLAGS += -isystem $(shell $(CC) -print-file-name=include)
|
||||
ifeq ($(ARCH),arm)
|
||||
NEON_FLAGS += -march=armv7-a -mfloat-abi=softfp -mfpu=neon
|
||||
endif
|
||||
|
@ -155,7 +155,7 @@ $(obj)/%.ll: $(src)/%.c FORCE
|
||||
# (See cmd_cc_o_c + relevant part of rule_cc_o_c)
|
||||
|
||||
quiet_cmd_cc_o_c = CC $(quiet_modtag) $@
|
||||
cmd_cc_o_c = $(CC) $(c_flags) -c -o $@ $<
|
||||
cmd_cc_o_c = $(CC) $(c_flags) -c -o $@ $< $(cmd_objtool)
|
||||
|
||||
ifdef CONFIG_MODVERSIONS
|
||||
# When module versioning is enabled the following steps are executed:
|
||||
@ -224,27 +224,38 @@ cmd_record_mcount = $(if $(findstring $(strip $(CC_FLAGS_FTRACE)),$(_c_flags)),
|
||||
endif # CONFIG_FTRACE_MCOUNT_USE_RECORDMCOUNT
|
||||
|
||||
ifdef CONFIG_STACK_VALIDATION
|
||||
ifndef CONFIG_LTO_CLANG
|
||||
|
||||
__objtool_obj := $(objtree)/tools/objtool/objtool
|
||||
objtool := $(objtree)/tools/objtool/objtool
|
||||
|
||||
objtool_args = \
|
||||
$(if $(CONFIG_UNWINDER_ORC),orc generate,check) \
|
||||
$(if $(part-of-module), --module) \
|
||||
$(if $(CONFIG_FRAME_POINTER),, --no-fp) \
|
||||
$(if $(CONFIG_GCOV_KERNEL)$(CONFIG_LTO_CLANG), --no-unreachable)\
|
||||
$(if $(CONFIG_RETPOLINE), --retpoline) \
|
||||
$(if $(CONFIG_X86_SMAP), --uaccess) \
|
||||
$(if $(CONFIG_FTRACE_MCOUNT_USE_OBJTOOL), --mcount)
|
||||
|
||||
cmd_objtool = $(if $(objtool-enabled), ; $(objtool) $(objtool_args) $@)
|
||||
cmd_gen_objtooldep = $(if $(objtool-enabled), { echo ; echo '$@: $$(wildcard $(objtool))' ; } >> $(dot-target).cmd)
|
||||
|
||||
endif # CONFIG_STACK_VALIDATION
|
||||
|
||||
ifdef CONFIG_LTO_CLANG
|
||||
|
||||
# Skip objtool for LLVM bitcode
|
||||
$(obj)/%.o: objtool-enabled :=
|
||||
|
||||
else
|
||||
|
||||
# 'OBJECT_FILES_NON_STANDARD := y': skip objtool checking for a directory
|
||||
# 'OBJECT_FILES_NON_STANDARD_foo.o := 'y': skip objtool checking for a file
|
||||
# 'OBJECT_FILES_NON_STANDARD_foo.o := 'n': override directory skip for a file
|
||||
cmd_objtool = $(if $(patsubst y%,, \
|
||||
$(OBJECT_FILES_NON_STANDARD_$(basetarget).o)$(OBJECT_FILES_NON_STANDARD)n), \
|
||||
$(__objtool_obj) $(objtool_args) $@)
|
||||
objtool_obj = $(if $(patsubst y%,, \
|
||||
$(OBJECT_FILES_NON_STANDARD_$(basetarget).o)$(OBJECT_FILES_NON_STANDARD)n), \
|
||||
$(__objtool_obj))
|
||||
|
||||
endif # CONFIG_LTO_CLANG
|
||||
endif # CONFIG_STACK_VALIDATION
|
||||
$(obj)/%.o: objtool-enabled = $(if $(filter-out y%, \
|
||||
$(OBJECT_FILES_NON_STANDARD_$(basetarget).o)$(OBJECT_FILES_NON_STANDARD)n),y)
|
||||
|
||||
# Rebuild all objects when objtool changes, or is enabled/disabled.
|
||||
objtool_dep = $(objtool_obj) \
|
||||
$(wildcard include/config/ORC_UNWINDER \
|
||||
include/config/STACK_VALIDATION)
|
||||
endif
|
||||
|
||||
ifdef CONFIG_TRIM_UNUSED_KSYMS
|
||||
cmd_gen_ksymdeps = \
|
||||
@ -259,7 +270,7 @@ define rule_cc_o_c
|
||||
$(call cmd,gen_ksymdeps)
|
||||
$(call cmd,checksrc)
|
||||
$(call cmd,checkdoc)
|
||||
$(call cmd,objtool)
|
||||
$(call cmd,gen_objtooldep)
|
||||
$(call cmd,modversions_c)
|
||||
$(call cmd,record_mcount)
|
||||
endef
|
||||
@ -267,13 +278,12 @@ endef
|
||||
define rule_as_o_S
|
||||
$(call cmd_and_fixdep,as_o_S)
|
||||
$(call cmd,gen_ksymdeps)
|
||||
$(call cmd,objtool)
|
||||
$(call cmd,gen_objtooldep)
|
||||
$(call cmd,modversions_S)
|
||||
endef
|
||||
|
||||
# Built-in and composite module parts
|
||||
.SECONDEXPANSION:
|
||||
$(obj)/%.o: $(src)/%.c $(recordmcount_source) $$(objtool_dep) FORCE
|
||||
$(obj)/%.o: $(src)/%.c $(recordmcount_source) FORCE
|
||||
$(call if_changed_rule,cc_o_c)
|
||||
$(call cmd,force_checksrc)
|
||||
|
||||
@ -285,14 +295,13 @@ cmd_cc_lto_link_modules = \
|
||||
$(LD) $(ld_flags) -r -o $@ \
|
||||
$(shell [ -s $(@:.lto.o=.o.symversions) ] && \
|
||||
echo -T $(@:.lto.o=.o.symversions)) \
|
||||
--whole-archive $(filter-out FORCE,$^)
|
||||
--whole-archive $(filter-out FORCE,$^) \
|
||||
$(cmd_objtool)
|
||||
|
||||
ifdef CONFIG_STACK_VALIDATION
|
||||
# objtool was skipped for LLVM bitcode, run it now that we have compiled
|
||||
# modules into native code
|
||||
cmd_cc_lto_link_modules += ; \
|
||||
$(objtree)/tools/objtool/objtool $(objtool_args) --module $@
|
||||
endif
|
||||
$(obj)/%.lto.o: objtool-enabled = y
|
||||
$(obj)/%.lto.o: part-of-module := y
|
||||
|
||||
$(obj)/%.lto.o: $(obj)/%.o FORCE
|
||||
$(call if_changed,cc_lto_link_modules)
|
||||
@ -356,7 +365,7 @@ $(obj)/%.s: $(src)/%.S FORCE
|
||||
$(call if_changed_dep,cpp_s_S)
|
||||
|
||||
quiet_cmd_as_o_S = AS $(quiet_modtag) $@
|
||||
cmd_as_o_S = $(CC) $(a_flags) -c -o $@ $<
|
||||
cmd_as_o_S = $(CC) $(a_flags) -c -o $@ $< $(cmd_objtool)
|
||||
|
||||
ifdef CONFIG_ASM_MODVERSIONS
|
||||
|
||||
@ -375,7 +384,7 @@ cmd_modversions_S = \
|
||||
fi
|
||||
endif
|
||||
|
||||
$(obj)/%.o: $(src)/%.S $$(objtool_dep) FORCE
|
||||
$(obj)/%.o: $(src)/%.S FORCE
|
||||
$(call if_changed_rule,as_o_S)
|
||||
|
||||
targets += $(filter-out $(subdir-builtin), $(real-obj-y))
|
||||
|
33
scripts/Makefile.debug
Normal file
33
scripts/Makefile.debug
Normal file
@ -0,0 +1,33 @@
|
||||
DEBUG_CFLAGS :=
|
||||
|
||||
ifdef CONFIG_DEBUG_INFO_SPLIT
|
||||
DEBUG_CFLAGS += -gsplit-dwarf
|
||||
else
|
||||
DEBUG_CFLAGS += -g
|
||||
endif
|
||||
|
||||
ifndef CONFIG_AS_IS_LLVM
|
||||
KBUILD_AFLAGS += -Wa,-gdwarf-2
|
||||
endif
|
||||
|
||||
ifndef CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT
|
||||
dwarf-version-$(CONFIG_DEBUG_INFO_DWARF4) := 4
|
||||
dwarf-version-$(CONFIG_DEBUG_INFO_DWARF5) := 5
|
||||
DEBUG_CFLAGS += -gdwarf-$(dwarf-version-y)
|
||||
endif
|
||||
|
||||
ifdef CONFIG_DEBUG_INFO_REDUCED
|
||||
DEBUG_CFLAGS += -fno-var-tracking
|
||||
ifdef CONFIG_CC_IS_GCC
|
||||
DEBUG_CFLAGS += -femit-struct-debug-baseonly
|
||||
endif
|
||||
endif
|
||||
|
||||
ifdef CONFIG_DEBUG_INFO_COMPRESSED
|
||||
DEBUG_CFLAGS += -gz=zlib
|
||||
KBUILD_AFLAGS += -gz=zlib
|
||||
KBUILD_LDFLAGS += --compress-debug-sections=zlib
|
||||
endif
|
||||
|
||||
KBUILD_CFLAGS += $(DEBUG_CFLAGS)
|
||||
export DEBUG_CFLAGS
|
@ -232,17 +232,6 @@ ifeq ($(CONFIG_LTO_CLANG),y)
|
||||
mod-prelink-ext := .lto
|
||||
endif
|
||||
|
||||
# Objtool arguments are also needed for modfinal with LTO, so we define
|
||||
# then here to avoid duplication.
|
||||
objtool_args = \
|
||||
$(if $(CONFIG_UNWINDER_ORC),orc generate,check) \
|
||||
$(if $(part-of-module), --module) \
|
||||
$(if $(CONFIG_FRAME_POINTER),, --no-fp) \
|
||||
$(if $(CONFIG_GCOV_KERNEL)$(CONFIG_LTO_CLANG), --no-unreachable)\
|
||||
$(if $(CONFIG_RETPOLINE), --retpoline) \
|
||||
$(if $(CONFIG_X86_SMAP), --uaccess) \
|
||||
$(if $(CONFIG_FTRACE_MCOUNT_USE_OBJTOOL), --mcount)
|
||||
|
||||
# Useful for describing the dependency of composite objects
|
||||
# Usage:
|
||||
# $(call multi_depend, multi_used_targets, suffix_to_remove, suffix_to_add)
|
||||
|
@ -103,7 +103,7 @@ snap-pkg:
|
||||
|
||||
# tarball targets
|
||||
# ---------------------------------------------------------------------------
|
||||
tar-pkgs := dir-pkg tar-pkg targz-pkg tarbz2-pkg tarxz-pkg
|
||||
tar-pkgs := dir-pkg tar-pkg targz-pkg tarbz2-pkg tarxz-pkg tarzst-pkg
|
||||
PHONY += $(tar-pkgs)
|
||||
$(tar-pkgs):
|
||||
$(MAKE) -f $(srctree)/Makefile
|
||||
@ -130,10 +130,12 @@ $(if $(findstring tar-src,$@),, \
|
||||
$(if $(findstring bz2,$@),$(KBZIP2), \
|
||||
$(if $(findstring gz,$@),$(KGZIP), \
|
||||
$(if $(findstring xz,$@),$(XZ), \
|
||||
$(error unknown target $@)))) \
|
||||
$(if $(findstring zst,$@),$(ZSTD), \
|
||||
$(error unknown target $@))))) \
|
||||
-f -9 $(perf-tar).tar)
|
||||
|
||||
perf-tar-pkgs := perf-tar-src-pkg perf-targz-src-pkg perf-tarbz2-src-pkg perf-tarxz-src-pkg
|
||||
perf-tar-pkgs := perf-tar-src-pkg perf-targz-src-pkg perf-tarbz2-src-pkg \
|
||||
perf-tarxz-src-pkg perf-tarzst-src-pkg
|
||||
PHONY += $(perf-tar-pkgs)
|
||||
$(perf-tar-pkgs):
|
||||
$(call cmd,perf_tar)
|
||||
@ -153,9 +155,11 @@ help:
|
||||
@echo ' targz-pkg - Build the kernel as a gzip compressed tarball'
|
||||
@echo ' tarbz2-pkg - Build the kernel as a bzip2 compressed tarball'
|
||||
@echo ' tarxz-pkg - Build the kernel as a xz compressed tarball'
|
||||
@echo ' tarzst-pkg - Build the kernel as a zstd compressed tarball'
|
||||
@echo ' perf-tar-src-pkg - Build $(perf-tar).tar source tarball'
|
||||
@echo ' perf-targz-src-pkg - Build $(perf-tar).tar.gz source tarball'
|
||||
@echo ' perf-tarbz2-src-pkg - Build $(perf-tar).tar.bz2 source tarball'
|
||||
@echo ' perf-tarxz-src-pkg - Build $(perf-tar).tar.xz source tarball'
|
||||
@echo ' perf-tarzst-src-pkg - Build $(perf-tar).tar.zst source tarball'
|
||||
|
||||
.PHONY: $(PHONY)
|
||||
|
@ -646,19 +646,8 @@ static void check_conf(struct menu *menu)
|
||||
|
||||
switch (input_mode) {
|
||||
case listnewconfig:
|
||||
if (sym->name) {
|
||||
const char *str;
|
||||
|
||||
if (sym->type == S_STRING) {
|
||||
str = sym_get_string_value(sym);
|
||||
str = sym_escape_string_value(str);
|
||||
printf("%s%s=%s\n", CONFIG_, sym->name, str);
|
||||
free((void *)str);
|
||||
} else {
|
||||
str = sym_get_string_value(sym);
|
||||
printf("%s%s=%s\n", CONFIG_, sym->name, str);
|
||||
}
|
||||
}
|
||||
if (sym->name)
|
||||
print_symbol_for_listconfig(sym);
|
||||
break;
|
||||
case helpnewconfig:
|
||||
printf("-----\n");
|
||||
|
@ -11,6 +11,7 @@
|
||||
#include <fcntl.h>
|
||||
#include <limits.h>
|
||||
#include <stdarg.h>
|
||||
#include <stdbool.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
@ -129,41 +130,22 @@ static size_t depfile_prefix_len;
|
||||
/* touch depfile for symbol 'name' */
|
||||
static int conf_touch_dep(const char *name)
|
||||
{
|
||||
int fd, ret;
|
||||
char *d;
|
||||
int fd;
|
||||
|
||||
/* check overflow: prefix + name + '\0' must fit in buffer. */
|
||||
if (depfile_prefix_len + strlen(name) + 1 > sizeof(depfile_path))
|
||||
return -1;
|
||||
|
||||
d = depfile_path + depfile_prefix_len;
|
||||
strcpy(d, name);
|
||||
strcpy(depfile_path + depfile_prefix_len, name);
|
||||
|
||||
/* Assume directory path already exists. */
|
||||
fd = open(depfile_path, O_WRONLY | O_CREAT | O_TRUNC, 0644);
|
||||
if (fd == -1) {
|
||||
if (errno != ENOENT)
|
||||
return -1;
|
||||
|
||||
ret = make_parent_dir(depfile_path);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
/* Try it again. */
|
||||
fd = open(depfile_path, O_WRONLY | O_CREAT | O_TRUNC, 0644);
|
||||
if (fd == -1)
|
||||
return -1;
|
||||
}
|
||||
if (fd == -1)
|
||||
return -1;
|
||||
close(fd);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct conf_printer {
|
||||
void (*print_symbol)(FILE *, struct symbol *, const char *, void *);
|
||||
void (*print_comment)(FILE *, const char *, void *);
|
||||
};
|
||||
|
||||
static void conf_warning(const char *fmt, ...)
|
||||
__attribute__ ((format (printf, 1, 2)));
|
||||
|
||||
@ -227,6 +209,13 @@ static const char *conf_get_autoconfig_name(void)
|
||||
return name ? name : "include/config/auto.conf";
|
||||
}
|
||||
|
||||
static const char *conf_get_autoheader_name(void)
|
||||
{
|
||||
char *name = getenv("KCONFIG_AUTOHEADER");
|
||||
|
||||
return name ? name : "include/generated/autoconf.h";
|
||||
}
|
||||
|
||||
static int conf_set_sym_val(struct symbol *sym, int def, int def_flags, char *p)
|
||||
{
|
||||
char *p2;
|
||||
@ -594,169 +583,171 @@ int conf_read(const char *name)
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct comment_style {
|
||||
const char *decoration;
|
||||
const char *prefix;
|
||||
const char *postfix;
|
||||
};
|
||||
|
||||
static const struct comment_style comment_style_pound = {
|
||||
.decoration = "#",
|
||||
.prefix = "#",
|
||||
.postfix = "#",
|
||||
};
|
||||
|
||||
static const struct comment_style comment_style_c = {
|
||||
.decoration = " *",
|
||||
.prefix = "/*",
|
||||
.postfix = " */",
|
||||
};
|
||||
|
||||
static void conf_write_heading(FILE *fp, const struct comment_style *cs)
|
||||
{
|
||||
fprintf(fp, "%s\n", cs->prefix);
|
||||
|
||||
fprintf(fp, "%s Automatically generated file; DO NOT EDIT.\n",
|
||||
cs->decoration);
|
||||
|
||||
fprintf(fp, "%s %s\n", cs->decoration, rootmenu.prompt->text);
|
||||
|
||||
fprintf(fp, "%s\n", cs->postfix);
|
||||
}
|
||||
|
||||
/* The returned pointer must be freed on the caller side */
|
||||
static char *escape_string_value(const char *in)
|
||||
{
|
||||
const char *p;
|
||||
char *out;
|
||||
size_t len;
|
||||
|
||||
len = strlen(in) + strlen("\"\"") + 1;
|
||||
|
||||
p = in;
|
||||
while (1) {
|
||||
p += strcspn(p, "\"\\");
|
||||
|
||||
if (p[0] == '\0')
|
||||
break;
|
||||
|
||||
len++;
|
||||
p++;
|
||||
}
|
||||
|
||||
out = xmalloc(len);
|
||||
out[0] = '\0';
|
||||
|
||||
strcat(out, "\"");
|
||||
|
||||
p = in;
|
||||
while (1) {
|
||||
len = strcspn(p, "\"\\");
|
||||
strncat(out, p, len);
|
||||
p += len;
|
||||
|
||||
if (p[0] == '\0')
|
||||
break;
|
||||
|
||||
strcat(out, "\\");
|
||||
strncat(out, p++, 1);
|
||||
}
|
||||
|
||||
strcat(out, "\"");
|
||||
|
||||
return out;
|
||||
}
|
||||
|
||||
/*
|
||||
* Kconfig configuration printer
|
||||
*
|
||||
* This printer is used when generating the resulting configuration after
|
||||
* kconfig invocation and `defconfig' files. Unset symbol might be omitted by
|
||||
* passing a non-NULL argument to the printer.
|
||||
*
|
||||
*/
|
||||
static void
|
||||
kconfig_print_symbol(FILE *fp, struct symbol *sym, const char *value, void *arg)
|
||||
enum output_n { OUTPUT_N, OUTPUT_N_AS_UNSET, OUTPUT_N_NONE };
|
||||
|
||||
static void __print_symbol(FILE *fp, struct symbol *sym, enum output_n output_n,
|
||||
bool escape_string)
|
||||
{
|
||||
const char *val;
|
||||
char *escaped = NULL;
|
||||
|
||||
if (sym->type == S_UNKNOWN)
|
||||
return;
|
||||
|
||||
val = sym_get_string_value(sym);
|
||||
|
||||
if ((sym->type == S_BOOLEAN || sym->type == S_TRISTATE) &&
|
||||
output_n != OUTPUT_N && *val == 'n') {
|
||||
if (output_n == OUTPUT_N_AS_UNSET)
|
||||
fprintf(fp, "# %s%s is not set\n", CONFIG_, sym->name);
|
||||
return;
|
||||
}
|
||||
|
||||
if (sym->type == S_STRING && escape_string) {
|
||||
escaped = escape_string_value(val);
|
||||
val = escaped;
|
||||
}
|
||||
|
||||
fprintf(fp, "%s%s=%s\n", CONFIG_, sym->name, val);
|
||||
|
||||
free(escaped);
|
||||
}
|
||||
|
||||
static void print_symbol_for_dotconfig(FILE *fp, struct symbol *sym)
|
||||
{
|
||||
__print_symbol(fp, sym, OUTPUT_N_AS_UNSET, true);
|
||||
}
|
||||
|
||||
static void print_symbol_for_autoconf(FILE *fp, struct symbol *sym)
|
||||
{
|
||||
__print_symbol(fp, sym, OUTPUT_N_NONE, true);
|
||||
}
|
||||
|
||||
void print_symbol_for_listconfig(struct symbol *sym)
|
||||
{
|
||||
__print_symbol(stdout, sym, OUTPUT_N, true);
|
||||
}
|
||||
|
||||
static void print_symbol_for_c(FILE *fp, struct symbol *sym)
|
||||
{
|
||||
const char *val;
|
||||
const char *sym_suffix = "";
|
||||
const char *val_prefix = "";
|
||||
char *escaped = NULL;
|
||||
|
||||
if (sym->type == S_UNKNOWN)
|
||||
return;
|
||||
|
||||
val = sym_get_string_value(sym);
|
||||
|
||||
switch (sym->type) {
|
||||
case S_BOOLEAN:
|
||||
case S_TRISTATE:
|
||||
if (*value == 'n') {
|
||||
bool skip_unset = (arg != NULL);
|
||||
|
||||
if (!skip_unset)
|
||||
fprintf(fp, "# %s%s is not set\n",
|
||||
CONFIG_, sym->name);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
fprintf(fp, "%s%s=%s\n", CONFIG_, sym->name, value);
|
||||
}
|
||||
|
||||
static void
|
||||
kconfig_print_comment(FILE *fp, const char *value, void *arg)
|
||||
{
|
||||
const char *p = value;
|
||||
size_t l;
|
||||
|
||||
for (;;) {
|
||||
l = strcspn(p, "\n");
|
||||
fprintf(fp, "#");
|
||||
if (l) {
|
||||
fprintf(fp, " ");
|
||||
xfwrite(p, l, 1, fp);
|
||||
p += l;
|
||||
}
|
||||
fprintf(fp, "\n");
|
||||
if (*p++ == '\0')
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static struct conf_printer kconfig_printer_cb =
|
||||
{
|
||||
.print_symbol = kconfig_print_symbol,
|
||||
.print_comment = kconfig_print_comment,
|
||||
};
|
||||
|
||||
/*
|
||||
* Header printer
|
||||
*
|
||||
* This printer is used when generating the `include/generated/autoconf.h' file.
|
||||
*/
|
||||
static void
|
||||
header_print_symbol(FILE *fp, struct symbol *sym, const char *value, void *arg)
|
||||
{
|
||||
|
||||
switch (sym->type) {
|
||||
case S_BOOLEAN:
|
||||
case S_TRISTATE: {
|
||||
const char *suffix = "";
|
||||
|
||||
switch (*value) {
|
||||
switch (*val) {
|
||||
case 'n':
|
||||
break;
|
||||
return;
|
||||
case 'm':
|
||||
suffix = "_MODULE";
|
||||
sym_suffix = "_MODULE";
|
||||
/* fall through */
|
||||
default:
|
||||
fprintf(fp, "#define %s%s%s 1\n",
|
||||
CONFIG_, sym->name, suffix);
|
||||
val = "1";
|
||||
}
|
||||
break;
|
||||
}
|
||||
case S_HEX: {
|
||||
const char *prefix = "";
|
||||
|
||||
if (value[0] != '0' || (value[1] != 'x' && value[1] != 'X'))
|
||||
prefix = "0x";
|
||||
fprintf(fp, "#define %s%s %s%s\n",
|
||||
CONFIG_, sym->name, prefix, value);
|
||||
case S_HEX:
|
||||
if (val[0] != '0' || (val[1] != 'x' && val[1] != 'X'))
|
||||
val_prefix = "0x";
|
||||
break;
|
||||
}
|
||||
case S_STRING:
|
||||
case S_INT:
|
||||
fprintf(fp, "#define %s%s %s\n",
|
||||
CONFIG_, sym->name, value);
|
||||
break;
|
||||
escaped = escape_string_value(val);
|
||||
val = escaped;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
fprintf(fp, "#define %s%s%s %s%s\n", CONFIG_, sym->name, sym_suffix,
|
||||
val_prefix, val);
|
||||
|
||||
static void
|
||||
header_print_comment(FILE *fp, const char *value, void *arg)
|
||||
{
|
||||
const char *p = value;
|
||||
size_t l;
|
||||
|
||||
fprintf(fp, "/*\n");
|
||||
for (;;) {
|
||||
l = strcspn(p, "\n");
|
||||
fprintf(fp, " *");
|
||||
if (l) {
|
||||
fprintf(fp, " ");
|
||||
xfwrite(p, l, 1, fp);
|
||||
p += l;
|
||||
}
|
||||
fprintf(fp, "\n");
|
||||
if (*p++ == '\0')
|
||||
break;
|
||||
}
|
||||
fprintf(fp, " */\n");
|
||||
}
|
||||
|
||||
static struct conf_printer header_printer_cb =
|
||||
{
|
||||
.print_symbol = header_print_symbol,
|
||||
.print_comment = header_print_comment,
|
||||
};
|
||||
|
||||
static void conf_write_symbol(FILE *fp, struct symbol *sym,
|
||||
struct conf_printer *printer, void *printer_arg)
|
||||
{
|
||||
const char *str;
|
||||
|
||||
switch (sym->type) {
|
||||
case S_UNKNOWN:
|
||||
break;
|
||||
case S_STRING:
|
||||
str = sym_get_string_value(sym);
|
||||
str = sym_escape_string_value(str);
|
||||
printer->print_symbol(fp, sym, str, printer_arg);
|
||||
free((void *)str);
|
||||
break;
|
||||
default:
|
||||
str = sym_get_string_value(sym);
|
||||
printer->print_symbol(fp, sym, str, printer_arg);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
conf_write_heading(FILE *fp, struct conf_printer *printer, void *printer_arg)
|
||||
{
|
||||
char buf[256];
|
||||
|
||||
snprintf(buf, sizeof(buf),
|
||||
"\n"
|
||||
"Automatically generated file; DO NOT EDIT.\n"
|
||||
"%s\n",
|
||||
rootmenu.prompt->text);
|
||||
|
||||
printer->print_comment(fp, buf, printer_arg);
|
||||
free(escaped);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -815,7 +806,7 @@ int conf_write_defconfig(const char *filename)
|
||||
goto next_menu;
|
||||
}
|
||||
}
|
||||
conf_write_symbol(out, sym, &kconfig_printer_cb, NULL);
|
||||
print_symbol_for_dotconfig(out, sym);
|
||||
}
|
||||
next_menu:
|
||||
if (menu->list != NULL) {
|
||||
@ -875,7 +866,7 @@ int conf_write(const char *name)
|
||||
if (!out)
|
||||
return 1;
|
||||
|
||||
conf_write_heading(out, &kconfig_printer_cb, NULL);
|
||||
conf_write_heading(out, &comment_style_pound);
|
||||
|
||||
if (!conf_get_changed())
|
||||
sym_clear_all_valid();
|
||||
@ -902,7 +893,7 @@ int conf_write(const char *name)
|
||||
need_newline = false;
|
||||
}
|
||||
sym->flags |= SYMBOL_WRITTEN;
|
||||
conf_write_symbol(out, sym, &kconfig_printer_cb, NULL);
|
||||
print_symbol_for_dotconfig(out, sym);
|
||||
}
|
||||
|
||||
next:
|
||||
@ -952,32 +943,50 @@ next:
|
||||
}
|
||||
|
||||
/* write a dependency file as used by kbuild to track dependencies */
|
||||
static int conf_write_dep(const char *name)
|
||||
static int conf_write_autoconf_cmd(const char *autoconf_name)
|
||||
{
|
||||
char name[PATH_MAX], tmp[PATH_MAX];
|
||||
struct file *file;
|
||||
FILE *out;
|
||||
int ret;
|
||||
|
||||
out = fopen("..config.tmp", "w");
|
||||
if (!out)
|
||||
return 1;
|
||||
fprintf(out, "deps_config := \\\n");
|
||||
for (file = file_list; file; file = file->next) {
|
||||
if (file->next)
|
||||
fprintf(out, "\t%s \\\n", file->name);
|
||||
else
|
||||
fprintf(out, "\t%s\n", file->name);
|
||||
}
|
||||
fprintf(out, "\n%s: \\\n"
|
||||
"\t$(deps_config)\n\n", conf_get_autoconfig_name());
|
||||
|
||||
env_write_dep(out, conf_get_autoconfig_name());
|
||||
|
||||
fprintf(out, "\n$(deps_config): ;\n");
|
||||
fclose(out);
|
||||
ret = snprintf(name, sizeof(name), "%s.cmd", autoconf_name);
|
||||
if (ret >= sizeof(name)) /* check truncation */
|
||||
return -1;
|
||||
|
||||
if (make_parent_dir(name))
|
||||
return 1;
|
||||
rename("..config.tmp", name);
|
||||
return -1;
|
||||
|
||||
ret = snprintf(tmp, sizeof(tmp), "%s.cmd.tmp", autoconf_name);
|
||||
if (ret >= sizeof(tmp)) /* check truncation */
|
||||
return -1;
|
||||
|
||||
out = fopen(tmp, "w");
|
||||
if (!out) {
|
||||
perror("fopen");
|
||||
return -1;
|
||||
}
|
||||
|
||||
fprintf(out, "deps_config := \\\n");
|
||||
for (file = file_list; file; file = file->next)
|
||||
fprintf(out, "\t%s \\\n", file->name);
|
||||
|
||||
fprintf(out, "\n%s: $(deps_config)\n\n", autoconf_name);
|
||||
|
||||
env_write_dep(out, autoconf_name);
|
||||
|
||||
fprintf(out, "\n$(deps_config): ;\n");
|
||||
|
||||
if (ferror(out)) /* error check for all fprintf() calls */
|
||||
return -1;
|
||||
|
||||
fclose(out);
|
||||
|
||||
if (rename(tmp, name)) {
|
||||
perror("rename");
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -1053,63 +1062,83 @@ static int conf_touch_deps(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int __conf_write_autoconf(const char *filename,
|
||||
void (*print_symbol)(FILE *, struct symbol *),
|
||||
const struct comment_style *comment_style)
|
||||
{
|
||||
char tmp[PATH_MAX];
|
||||
FILE *file;
|
||||
struct symbol *sym;
|
||||
int ret, i;
|
||||
|
||||
if (make_parent_dir(filename))
|
||||
return -1;
|
||||
|
||||
ret = snprintf(tmp, sizeof(tmp), "%s.tmp", filename);
|
||||
if (ret >= sizeof(tmp)) /* check truncation */
|
||||
return -1;
|
||||
|
||||
file = fopen(tmp, "w");
|
||||
if (!file) {
|
||||
perror("fopen");
|
||||
return -1;
|
||||
}
|
||||
|
||||
conf_write_heading(file, comment_style);
|
||||
|
||||
for_all_symbols(i, sym)
|
||||
if ((sym->flags & SYMBOL_WRITE) && sym->name)
|
||||
print_symbol(file, sym);
|
||||
|
||||
/* check possible errors in conf_write_heading() and print_symbol() */
|
||||
if (ferror(file))
|
||||
return -1;
|
||||
|
||||
fclose(file);
|
||||
|
||||
if (rename(tmp, filename)) {
|
||||
perror("rename");
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int conf_write_autoconf(int overwrite)
|
||||
{
|
||||
struct symbol *sym;
|
||||
const char *name;
|
||||
const char *autoconf_name = conf_get_autoconfig_name();
|
||||
FILE *out, *out_h;
|
||||
int i;
|
||||
int ret, i;
|
||||
|
||||
if (!overwrite && is_present(autoconf_name))
|
||||
return 0;
|
||||
|
||||
conf_write_dep("include/config/auto.conf.cmd");
|
||||
ret = conf_write_autoconf_cmd(autoconf_name);
|
||||
if (ret)
|
||||
return -1;
|
||||
|
||||
if (conf_touch_deps())
|
||||
return 1;
|
||||
|
||||
out = fopen(".tmpconfig", "w");
|
||||
if (!out)
|
||||
return 1;
|
||||
|
||||
out_h = fopen(".tmpconfig.h", "w");
|
||||
if (!out_h) {
|
||||
fclose(out);
|
||||
return 1;
|
||||
}
|
||||
|
||||
conf_write_heading(out, &kconfig_printer_cb, NULL);
|
||||
conf_write_heading(out_h, &header_printer_cb, NULL);
|
||||
|
||||
for_all_symbols(i, sym) {
|
||||
for_all_symbols(i, sym)
|
||||
sym_calc_value(sym);
|
||||
if (!(sym->flags & SYMBOL_WRITE) || !sym->name)
|
||||
continue;
|
||||
|
||||
/* write symbols to auto.conf and autoconf.h */
|
||||
conf_write_symbol(out, sym, &kconfig_printer_cb, (void *)1);
|
||||
conf_write_symbol(out_h, sym, &header_printer_cb, NULL);
|
||||
}
|
||||
fclose(out);
|
||||
fclose(out_h);
|
||||
ret = __conf_write_autoconf(conf_get_autoheader_name(),
|
||||
print_symbol_for_c,
|
||||
&comment_style_c);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
name = getenv("KCONFIG_AUTOHEADER");
|
||||
if (!name)
|
||||
name = "include/generated/autoconf.h";
|
||||
if (make_parent_dir(name))
|
||||
return 1;
|
||||
if (rename(".tmpconfig.h", name))
|
||||
return 1;
|
||||
|
||||
if (make_parent_dir(autoconf_name))
|
||||
return 1;
|
||||
/*
|
||||
* This must be the last step, kbuild has a dependency on auto.conf
|
||||
* and this marks the successful completion of the previous steps.
|
||||
* Create include/config/auto.conf. This must be the last step because
|
||||
* Kbuild has a dependency on auto.conf and this marks the successful
|
||||
* completion of the previous steps.
|
||||
*/
|
||||
if (rename(".tmpconfig", autoconf_name))
|
||||
return 1;
|
||||
ret = __conf_write_autoconf(conf_get_autoconfig_name(),
|
||||
print_symbol_for_autoconf,
|
||||
&comment_style_pound);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -84,8 +84,7 @@ static void warn_ignored_character(char chr)
|
||||
n [A-Za-z0-9_-]
|
||||
|
||||
%%
|
||||
int str = 0;
|
||||
int ts, i;
|
||||
char open_quote = 0;
|
||||
|
||||
#.* /* ignore comment */
|
||||
[ \t]* /* whitespaces */
|
||||
@ -134,7 +133,7 @@ n [A-Za-z0-9_-]
|
||||
":=" return T_COLON_EQUAL;
|
||||
"+=" return T_PLUS_EQUAL;
|
||||
\"|\' {
|
||||
str = yytext[0];
|
||||
open_quote = yytext[0];
|
||||
new_string();
|
||||
BEGIN(STRING);
|
||||
}
|
||||
@ -171,7 +170,7 @@ n [A-Za-z0-9_-]
|
||||
append_string(yytext + 1, yyleng - 1);
|
||||
}
|
||||
\'|\" {
|
||||
if (str == yytext[0]) {
|
||||
if (open_quote == yytext[0]) {
|
||||
BEGIN(INITIAL);
|
||||
yylval.string = text;
|
||||
return T_WORD_QUOTE;
|
||||
@ -196,6 +195,8 @@ n [A-Za-z0-9_-]
|
||||
|
||||
<HELP>{
|
||||
[ \t]+ {
|
||||
int ts, i;
|
||||
|
||||
ts = 0;
|
||||
for (i = 0; i < yyleng; i++) {
|
||||
if (yytext[i] == '\t')
|
||||
|
@ -18,7 +18,7 @@ extern struct symbol * symbol_hash[SYMBOL_HASHSIZE];
|
||||
|
||||
struct symbol * sym_lookup(const char *name, int flags);
|
||||
struct symbol * sym_find(const char *name);
|
||||
const char * sym_escape_string_value(const char *in);
|
||||
void print_symbol_for_listconfig(struct symbol *sym);
|
||||
struct symbol ** sym_re_search(const char *pattern);
|
||||
const char * sym_type_name(enum symbol_type type);
|
||||
void sym_calc_value(struct symbol *sym);
|
||||
|
@ -728,7 +728,7 @@ static void get_prompt_str(struct gstr *r, struct property *prop,
|
||||
get_dep_str(r, prop->visible.expr, " Visible if: ");
|
||||
|
||||
menu = prop->menu->parent;
|
||||
for (i = 0; menu != &rootmenu && i < 8; menu = menu->parent) {
|
||||
for (i = 0; menu && i < 8; menu = menu->parent) {
|
||||
bool accessible = menu_is_visible(menu);
|
||||
|
||||
submenu[i++] = menu;
|
||||
@ -758,21 +758,24 @@ static void get_prompt_str(struct gstr *r, struct property *prop,
|
||||
list_add_tail(&jump->entries, head);
|
||||
}
|
||||
|
||||
if (i > 0) {
|
||||
str_printf(r, " Location:\n");
|
||||
for (j = 4; --i >= 0; j += 2) {
|
||||
menu = submenu[i];
|
||||
if (jump && menu == location)
|
||||
jump->offset = strlen(r->s);
|
||||
str_printf(r, "%*c-> %s", j, ' ',
|
||||
menu_get_prompt(menu));
|
||||
if (menu->sym) {
|
||||
str_printf(r, " (%s [=%s])", menu->sym->name ?
|
||||
menu->sym->name : "<choice>",
|
||||
sym_get_string_value(menu->sym));
|
||||
}
|
||||
str_append(r, "\n");
|
||||
str_printf(r, " Location:\n");
|
||||
for (j = 4; --i >= 0; j += 2) {
|
||||
menu = submenu[i];
|
||||
if (jump && menu == location)
|
||||
jump->offset = strlen(r->s);
|
||||
|
||||
if (menu == &rootmenu)
|
||||
/* The real rootmenu prompt is ugly */
|
||||
str_printf(r, "%*cMain menu", j, ' ');
|
||||
else
|
||||
str_printf(r, "%*c-> %s", j, ' ', menu_get_prompt(menu));
|
||||
|
||||
if (menu->sym) {
|
||||
str_printf(r, " (%s [=%s])", menu->sym->name ?
|
||||
menu->sym->name : "<choice>",
|
||||
sym_get_string_value(menu->sym));
|
||||
}
|
||||
str_append(r, "\n");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -871,49 +871,6 @@ struct symbol *sym_find(const char *name)
|
||||
return symbol;
|
||||
}
|
||||
|
||||
const char *sym_escape_string_value(const char *in)
|
||||
{
|
||||
const char *p;
|
||||
size_t reslen;
|
||||
char *res;
|
||||
size_t l;
|
||||
|
||||
reslen = strlen(in) + strlen("\"\"") + 1;
|
||||
|
||||
p = in;
|
||||
for (;;) {
|
||||
l = strcspn(p, "\"\\");
|
||||
p += l;
|
||||
|
||||
if (p[0] == '\0')
|
||||
break;
|
||||
|
||||
reslen++;
|
||||
p++;
|
||||
}
|
||||
|
||||
res = xmalloc(reslen);
|
||||
res[0] = '\0';
|
||||
|
||||
strcat(res, "\"");
|
||||
|
||||
p = in;
|
||||
for (;;) {
|
||||
l = strcspn(p, "\"\\");
|
||||
strncat(res, p, l);
|
||||
p += l;
|
||||
|
||||
if (p[0] == '\0')
|
||||
break;
|
||||
|
||||
strcat(res, "\\");
|
||||
strncat(res, p++, 1);
|
||||
}
|
||||
|
||||
strcat(res, "\"");
|
||||
return res;
|
||||
}
|
||||
|
||||
struct sym_match {
|
||||
struct symbol *sym;
|
||||
off_t so, eo;
|
||||
|
@ -360,14 +360,14 @@ if [ -n "${CONFIG_KALLSYMS}" ]; then
|
||||
# kallsyms support
|
||||
# Generate section listing all symbols and add it into vmlinux
|
||||
# It's a three step process:
|
||||
# 1) Link .tmp_vmlinux1 so it has all symbols and sections,
|
||||
# 1) Link .tmp_vmlinux.kallsyms1 so it has all symbols and sections,
|
||||
# but __kallsyms is empty.
|
||||
# Running kallsyms on that gives us .tmp_kallsyms1.o with
|
||||
# the right size
|
||||
# 2) Link .tmp_vmlinux2 so it now has a __kallsyms section of
|
||||
# 2) Link .tmp_vmlinux.kallsyms2 so it now has a __kallsyms section of
|
||||
# the right size, but due to the added section, some
|
||||
# addresses have shifted.
|
||||
# From here, we generate a correct .tmp_kallsyms2.o
|
||||
# From here, we generate a correct .tmp_vmlinux.kallsyms2.o
|
||||
# 3) That link may have expanded the kernel image enough that
|
||||
# more linker branch stubs / trampolines had to be added, which
|
||||
# introduces new names, which further expands kallsyms. Do another
|
||||
|
@ -39,6 +39,10 @@ case "${1}" in
|
||||
opts="-I ${XZ}"
|
||||
tarball=${tarball}.xz
|
||||
;;
|
||||
tarzst-pkg)
|
||||
opts="-I ${ZSTD}"
|
||||
tarball=${tarball}.zst
|
||||
;;
|
||||
*)
|
||||
echo "Unknown tarball target \"${1}\" requested, please add it to ${0}." >&2
|
||||
exit 1
|
||||
|
@ -188,7 +188,7 @@ struct generic_type {
|
||||
mode_t mode;
|
||||
};
|
||||
|
||||
static struct generic_type generic_type_table[] = {
|
||||
static const struct generic_type generic_type_table[] = {
|
||||
[GT_DIR] = {
|
||||
.type = "dir",
|
||||
.mode = S_IFDIR
|
||||
@ -320,6 +320,12 @@ static int cpio_mkfile(const char *name, const char *location,
|
||||
goto error;
|
||||
}
|
||||
|
||||
if (buf.st_mtime > 0xffffffff) {
|
||||
fprintf(stderr, "%s: Timestamp exceeds maximum cpio timestamp, clipping.\n",
|
||||
location);
|
||||
buf.st_mtime = 0xffffffff;
|
||||
}
|
||||
|
||||
filebuf = malloc(buf.st_size);
|
||||
if (!filebuf) {
|
||||
fprintf (stderr, "out of memory\n");
|
||||
@ -491,7 +497,7 @@ static void usage(const char *prog)
|
||||
prog);
|
||||
}
|
||||
|
||||
struct file_handler file_handler_table[] = {
|
||||
static const struct file_handler file_handler_table[] = {
|
||||
{
|
||||
.type = "file",
|
||||
.handler = cpio_mkfile_line,
|
||||
@ -551,6 +557,16 @@ int main (int argc, char *argv[])
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Timestamps after 2106-02-07 06:28:15 UTC have an ascii hex time_t
|
||||
* representation that exceeds 8 chars and breaks the cpio header
|
||||
* specification.
|
||||
*/
|
||||
if (default_mtime > 0xffffffff) {
|
||||
fprintf(stderr, "ERROR: Timestamp too large for cpio format\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (argc - optind != 1) {
|
||||
usage(argv[0]);
|
||||
exit(1);
|
||||
|
Loading…
Reference in New Issue
Block a user