mirror of
https://github.com/torvalds/linux.git
synced 2024-12-25 12:21:37 +00:00
Kbuild fixes for v5.10 (2nd)
- Move -Wcast-align to W=3, which tends to be false-positive and there is no tree-wide solution. - Pass -fmacro-prefix-map to KBUILD_CPPFLAGS because it is a preprocessor option and makes sense for .S files as well. - Disable -gdwarf-2 for Clang's integrated assembler to avoid warnings. - Disable --orphan-handling=warn for LLD 10.0.1 to avoid warnings. - Fix undesirable line breaks in *.mod files. -----BEGIN PGP SIGNATURE----- iQJJBAABCgAzFiEEbmPs18K1szRHjPqEPYsBB53g2wYFAl/MzyMVHG1hc2FoaXJv eUBrZXJuZWwub3JnAAoJED2LAQed4NsGKJ8P/2kLq296XAPjqC90/LWMja8dsXO/ Wgaq8zC819x0JFuGdBKlwlFe3AvFYRtts9V5+mzjxvsOjH/6+xzyrXjRPCwZYqlj XKC3ZwuS2SGDPFCriI1edwTUp5tyDnG/VBjqbf3ybQnz0LAShidXBD9IlM/XX9Rz BlWqd7Uib50Pq8AfM2JVokrSmkkvhqxocIsmjTa0wvRjRAw7+aVkGNCWXqnTho7y YuHmTWbmUQIROF3Bzs1fkGp+qaQofPRfA1tTwaTVvgmt8rEqyzXi11y6kj56INfg /pq4O1KrplKtJFdrcjj4/eptqHG3I+Jq56qCHVescF6+bH6cc6BUL8qDdAzFZQai e/pWCzREqFDKchEmT2d0Uzik8Zfxi5Cw68Otpzb4LqTUUxXSoRx1R9Of/Ei5QZum 6b6s9Q41UwH983UQCOOSGjXGZYP6fZG1a0XejbduYo7TL4KEECAO/FlLBWGttYH3 0i3aKz3aDKb/fo7hDbbqg+o6F0mShEraqxMmWgIvgGt+k76j0O0wS2KryqpTd7Vv xg72suGM7f9QBA50lZ0r32fm86XnlqwQAm9ZMaSXR1Ii7j4F9UNRmR/FUYq7dPwa COkuHr+9LqzV/tkluWi2rjLIGPaCuEVeSCcQ/wIDdp2iOyb54CbozwK0Yi2dxxus jVFKwSaMUDHrkSj6 =/ysh -----END PGP SIGNATURE----- Merge tag 'kbuild-fixes-v5.10-2' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild Pull Kbuild fixes from Masahiro Yamada: - Move -Wcast-align to W=3, which tends to be false-positive and there is no tree-wide solution. - Pass -fmacro-prefix-map to KBUILD_CPPFLAGS because it is a preprocessor option and makes sense for .S files as well. - Disable -gdwarf-2 for Clang's integrated assembler to avoid warnings. - Disable --orphan-handling=warn for LLD 10.0.1 to avoid warnings. - Fix undesirable line breaks in *.mod files. * tag 'kbuild-fixes-v5.10-2' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild: kbuild: avoid split lines in .mod files kbuild: Disable CONFIG_LD_ORPHAN_WARN for ld.lld 10.0.1 kbuild: Hoist '--orphan-handling' into Kconfig Kbuild: do not emit debug info for assembly with LLVM_IAS=1 kbuild: use -fmacro-prefix-map for .S sources Makefile.extrawarn: move -Wcast-align to W=3
This commit is contained in:
commit
e6585a4939
@ -4287,6 +4287,7 @@ B: https://github.com/ClangBuiltLinux/linux/issues
|
|||||||
C: irc://chat.freenode.net/clangbuiltlinux
|
C: irc://chat.freenode.net/clangbuiltlinux
|
||||||
F: Documentation/kbuild/llvm.rst
|
F: Documentation/kbuild/llvm.rst
|
||||||
F: scripts/clang-tools/
|
F: scripts/clang-tools/
|
||||||
|
F: scripts/lld-version.sh
|
||||||
K: \b(?i:clang|llvm)\b
|
K: \b(?i:clang|llvm)\b
|
||||||
|
|
||||||
CLEANCACHE API
|
CLEANCACHE API
|
||||||
|
10
Makefile
10
Makefile
@ -826,7 +826,9 @@ else
|
|||||||
DEBUG_CFLAGS += -g
|
DEBUG_CFLAGS += -g
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifneq ($(LLVM_IAS),1)
|
||||||
KBUILD_AFLAGS += -Wa,-gdwarf-2
|
KBUILD_AFLAGS += -Wa,-gdwarf-2
|
||||||
|
endif
|
||||||
|
|
||||||
ifdef CONFIG_DEBUG_INFO_DWARF4
|
ifdef CONFIG_DEBUG_INFO_DWARF4
|
||||||
DEBUG_CFLAGS += -gdwarf-4
|
DEBUG_CFLAGS += -gdwarf-4
|
||||||
@ -944,7 +946,7 @@ KBUILD_CFLAGS += $(call cc-option,-Werror=incompatible-pointer-types)
|
|||||||
KBUILD_CFLAGS += $(call cc-option,-Werror=designated-init)
|
KBUILD_CFLAGS += $(call cc-option,-Werror=designated-init)
|
||||||
|
|
||||||
# change __FILE__ to the relative path from the srctree
|
# change __FILE__ to the relative path from the srctree
|
||||||
KBUILD_CFLAGS += $(call cc-option,-fmacro-prefix-map=$(srctree)/=)
|
KBUILD_CPPFLAGS += $(call cc-option,-fmacro-prefix-map=$(srctree)/=)
|
||||||
|
|
||||||
# ensure -fcf-protection is disabled when using retpoline as it is
|
# ensure -fcf-protection is disabled when using retpoline as it is
|
||||||
# incompatible with -mindirect-branch=thunk-extern
|
# incompatible with -mindirect-branch=thunk-extern
|
||||||
@ -982,6 +984,12 @@ ifeq ($(CONFIG_RELR),y)
|
|||||||
LDFLAGS_vmlinux += --pack-dyn-relocs=relr
|
LDFLAGS_vmlinux += --pack-dyn-relocs=relr
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
# We never want expected sections to be placed heuristically by the
|
||||||
|
# linker. All sections should be explicitly named in the linker script.
|
||||||
|
ifdef CONFIG_LD_ORPHAN_WARN
|
||||||
|
LDFLAGS_vmlinux += --orphan-handling=warn
|
||||||
|
endif
|
||||||
|
|
||||||
# Align the bit size of userspace programs with the kernel
|
# Align the bit size of userspace programs with the kernel
|
||||||
KBUILD_USERCFLAGS += $(filter -m32 -m64 --target=%, $(KBUILD_CFLAGS))
|
KBUILD_USERCFLAGS += $(filter -m32 -m64 --target=%, $(KBUILD_CFLAGS))
|
||||||
KBUILD_USERLDFLAGS += $(filter -m32 -m64 --target=%, $(KBUILD_CFLAGS))
|
KBUILD_USERLDFLAGS += $(filter -m32 -m64 --target=%, $(KBUILD_CFLAGS))
|
||||||
|
@ -1028,6 +1028,15 @@ config HAVE_STATIC_CALL_INLINE
|
|||||||
bool
|
bool
|
||||||
depends on HAVE_STATIC_CALL
|
depends on HAVE_STATIC_CALL
|
||||||
|
|
||||||
|
config ARCH_WANT_LD_ORPHAN_WARN
|
||||||
|
bool
|
||||||
|
help
|
||||||
|
An arch should select this symbol once all linker sections are explicitly
|
||||||
|
included, size-asserted, or discarded in the linker scripts. This is
|
||||||
|
important because we never want expected sections to be placed heuristically
|
||||||
|
by the linker, since the locations of such sections can change between linker
|
||||||
|
versions.
|
||||||
|
|
||||||
source "kernel/gcov/Kconfig"
|
source "kernel/gcov/Kconfig"
|
||||||
|
|
||||||
source "scripts/gcc-plugins/Kconfig"
|
source "scripts/gcc-plugins/Kconfig"
|
||||||
|
@ -35,6 +35,7 @@ config ARM
|
|||||||
select ARCH_USE_CMPXCHG_LOCKREF
|
select ARCH_USE_CMPXCHG_LOCKREF
|
||||||
select ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT if MMU
|
select ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT if MMU
|
||||||
select ARCH_WANT_IPC_PARSE_VERSION
|
select ARCH_WANT_IPC_PARSE_VERSION
|
||||||
|
select ARCH_WANT_LD_ORPHAN_WARN
|
||||||
select BINFMT_FLAT_ARGVP_ENVP_ON_STACK
|
select BINFMT_FLAT_ARGVP_ENVP_ON_STACK
|
||||||
select BUILDTIME_TABLE_SORT if MMU
|
select BUILDTIME_TABLE_SORT if MMU
|
||||||
select CLONE_BACKWARDS
|
select CLONE_BACKWARDS
|
||||||
|
@ -16,10 +16,6 @@ LDFLAGS_vmlinux += --be8
|
|||||||
KBUILD_LDFLAGS_MODULE += --be8
|
KBUILD_LDFLAGS_MODULE += --be8
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# We never want expected sections to be placed heuristically by the
|
|
||||||
# linker. All sections should be explicitly named in the linker script.
|
|
||||||
LDFLAGS_vmlinux += $(call ld-option, --orphan-handling=warn)
|
|
||||||
|
|
||||||
GZFLAGS :=-9
|
GZFLAGS :=-9
|
||||||
#KBUILD_CFLAGS +=-pipe
|
#KBUILD_CFLAGS +=-pipe
|
||||||
|
|
||||||
|
@ -129,7 +129,9 @@ LDFLAGS_vmlinux += --no-undefined
|
|||||||
# Delete all temporary local symbols
|
# Delete all temporary local symbols
|
||||||
LDFLAGS_vmlinux += -X
|
LDFLAGS_vmlinux += -X
|
||||||
# Report orphan sections
|
# Report orphan sections
|
||||||
LDFLAGS_vmlinux += $(call ld-option, --orphan-handling=warn)
|
ifdef CONFIG_LD_ORPHAN_WARN
|
||||||
|
LDFLAGS_vmlinux += --orphan-handling=warn
|
||||||
|
endif
|
||||||
# Next argument is a linker script
|
# Next argument is a linker script
|
||||||
LDFLAGS_vmlinux += -T
|
LDFLAGS_vmlinux += -T
|
||||||
|
|
||||||
|
@ -81,6 +81,7 @@ config ARM64
|
|||||||
select ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT
|
select ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT
|
||||||
select ARCH_WANT_FRAME_POINTERS
|
select ARCH_WANT_FRAME_POINTERS
|
||||||
select ARCH_WANT_HUGE_PMD_SHARE if ARM64_4K_PAGES || (ARM64_16K_PAGES && !ARM64_VA_BITS_36)
|
select ARCH_WANT_HUGE_PMD_SHARE if ARM64_4K_PAGES || (ARM64_16K_PAGES && !ARM64_VA_BITS_36)
|
||||||
|
select ARCH_WANT_LD_ORPHAN_WARN
|
||||||
select ARCH_HAS_UBSAN_SANITIZE_ALL
|
select ARCH_HAS_UBSAN_SANITIZE_ALL
|
||||||
select ARM_AMBA
|
select ARM_AMBA
|
||||||
select ARM_ARCH_TIMER
|
select ARM_ARCH_TIMER
|
||||||
|
@ -28,10 +28,6 @@ LDFLAGS_vmlinux += --fix-cortex-a53-843419
|
|||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# We never want expected sections to be placed heuristically by the
|
|
||||||
# linker. All sections should be explicitly named in the linker script.
|
|
||||||
LDFLAGS_vmlinux += $(call ld-option, --orphan-handling=warn)
|
|
||||||
|
|
||||||
ifeq ($(CONFIG_ARM64_USE_LSE_ATOMICS), y)
|
ifeq ($(CONFIG_ARM64_USE_LSE_ATOMICS), y)
|
||||||
ifneq ($(CONFIG_ARM64_LSE_ATOMICS), y)
|
ifneq ($(CONFIG_ARM64_LSE_ATOMICS), y)
|
||||||
$(warning LSE atomics not supported by binutils)
|
$(warning LSE atomics not supported by binutils)
|
||||||
|
@ -152,6 +152,7 @@ config PPC
|
|||||||
select ARCH_USE_QUEUED_SPINLOCKS if PPC_QUEUED_SPINLOCKS
|
select ARCH_USE_QUEUED_SPINLOCKS if PPC_QUEUED_SPINLOCKS
|
||||||
select ARCH_WANT_IPC_PARSE_VERSION
|
select ARCH_WANT_IPC_PARSE_VERSION
|
||||||
select ARCH_WANT_IRQS_OFF_ACTIVATE_MM
|
select ARCH_WANT_IRQS_OFF_ACTIVATE_MM
|
||||||
|
select ARCH_WANT_LD_ORPHAN_WARN
|
||||||
select ARCH_WEAK_RELEASE_ACQUIRE
|
select ARCH_WEAK_RELEASE_ACQUIRE
|
||||||
select BINFMT_ELF
|
select BINFMT_ELF
|
||||||
select BUILDTIME_TABLE_SORT
|
select BUILDTIME_TABLE_SORT
|
||||||
|
@ -123,7 +123,6 @@ endif
|
|||||||
LDFLAGS_vmlinux-y := -Bstatic
|
LDFLAGS_vmlinux-y := -Bstatic
|
||||||
LDFLAGS_vmlinux-$(CONFIG_RELOCATABLE) := -pie
|
LDFLAGS_vmlinux-$(CONFIG_RELOCATABLE) := -pie
|
||||||
LDFLAGS_vmlinux := $(LDFLAGS_vmlinux-y)
|
LDFLAGS_vmlinux := $(LDFLAGS_vmlinux-y)
|
||||||
LDFLAGS_vmlinux += $(call ld-option,--orphan-handling=warn)
|
|
||||||
|
|
||||||
ifdef CONFIG_PPC64
|
ifdef CONFIG_PPC64
|
||||||
ifeq ($(call cc-option-yn,-mcmodel=medium),y)
|
ifeq ($(call cc-option-yn,-mcmodel=medium),y)
|
||||||
|
@ -100,6 +100,7 @@ config X86
|
|||||||
select ARCH_WANT_DEFAULT_BPF_JIT if X86_64
|
select ARCH_WANT_DEFAULT_BPF_JIT if X86_64
|
||||||
select ARCH_WANTS_DYNAMIC_TASK_STRUCT
|
select ARCH_WANTS_DYNAMIC_TASK_STRUCT
|
||||||
select ARCH_WANT_HUGE_PMD_SHARE
|
select ARCH_WANT_HUGE_PMD_SHARE
|
||||||
|
select ARCH_WANT_LD_ORPHAN_WARN
|
||||||
select ARCH_WANTS_THP_SWAP if X86_64
|
select ARCH_WANTS_THP_SWAP if X86_64
|
||||||
select BUILDTIME_TABLE_SORT
|
select BUILDTIME_TABLE_SORT
|
||||||
select CLKEVT_I8253
|
select CLKEVT_I8253
|
||||||
|
@ -209,9 +209,6 @@ ifdef CONFIG_X86_64
|
|||||||
LDFLAGS_vmlinux += -z max-page-size=0x200000
|
LDFLAGS_vmlinux += -z max-page-size=0x200000
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# We never want expected sections to be placed heuristically by the
|
|
||||||
# linker. All sections should be explicitly named in the linker script.
|
|
||||||
LDFLAGS_vmlinux += $(call ld-option, --orphan-handling=warn)
|
|
||||||
|
|
||||||
archscripts: scripts_basic
|
archscripts: scripts_basic
|
||||||
$(Q)$(MAKE) $(build)=arch/x86/tools relocs
|
$(Q)$(MAKE) $(build)=arch/x86/tools relocs
|
||||||
|
@ -61,7 +61,9 @@ KBUILD_LDFLAGS += $(call ld-option,--no-ld-generated-unwind-info)
|
|||||||
# Compressed kernel should be built as PIE since it may be loaded at any
|
# Compressed kernel should be built as PIE since it may be loaded at any
|
||||||
# address by the bootloader.
|
# address by the bootloader.
|
||||||
LDFLAGS_vmlinux := -pie $(call ld-option, --no-dynamic-linker)
|
LDFLAGS_vmlinux := -pie $(call ld-option, --no-dynamic-linker)
|
||||||
LDFLAGS_vmlinux += $(call ld-option, --orphan-handling=warn)
|
ifdef CONFIG_LD_ORPHAN_WARN
|
||||||
|
LDFLAGS_vmlinux += --orphan-handling=warn
|
||||||
|
endif
|
||||||
LDFLAGS_vmlinux += -T
|
LDFLAGS_vmlinux += -T
|
||||||
|
|
||||||
hostprogs := mkpiggy
|
hostprogs := mkpiggy
|
||||||
|
10
init/Kconfig
10
init/Kconfig
@ -47,6 +47,10 @@ config CLANG_VERSION
|
|||||||
int
|
int
|
||||||
default $(shell,$(srctree)/scripts/clang-version.sh $(CC))
|
default $(shell,$(srctree)/scripts/clang-version.sh $(CC))
|
||||||
|
|
||||||
|
config LLD_VERSION
|
||||||
|
int
|
||||||
|
default $(shell,$(srctree)/scripts/lld-version.sh $(LD))
|
||||||
|
|
||||||
config CC_CAN_LINK
|
config CC_CAN_LINK
|
||||||
bool
|
bool
|
||||||
default $(success,$(srctree)/scripts/cc-can-link.sh $(CC) $(CLANG_FLAGS) $(m64-flag)) if 64BIT
|
default $(success,$(srctree)/scripts/cc-can-link.sh $(CC) $(CLANG_FLAGS) $(m64-flag)) if 64BIT
|
||||||
@ -1348,6 +1352,12 @@ config LD_DEAD_CODE_DATA_ELIMINATION
|
|||||||
present. This option is not well tested yet, so use at your
|
present. This option is not well tested yet, so use at your
|
||||||
own risk.
|
own risk.
|
||||||
|
|
||||||
|
config LD_ORPHAN_WARN
|
||||||
|
def_bool y
|
||||||
|
depends on ARCH_WANT_LD_ORPHAN_WARN
|
||||||
|
depends on !LD_IS_LLD || LLD_VERSION >= 110000
|
||||||
|
depends on $(ld-option,--orphan-handling=warn)
|
||||||
|
|
||||||
config SYSCTL
|
config SYSCTL
|
||||||
bool
|
bool
|
||||||
|
|
||||||
|
@ -252,6 +252,9 @@ objtool_dep = $(objtool_obj) \
|
|||||||
ifdef CONFIG_TRIM_UNUSED_KSYMS
|
ifdef CONFIG_TRIM_UNUSED_KSYMS
|
||||||
cmd_gen_ksymdeps = \
|
cmd_gen_ksymdeps = \
|
||||||
$(CONFIG_SHELL) $(srctree)/scripts/gen_ksymdeps.sh $@ >> $(dot-target).cmd
|
$(CONFIG_SHELL) $(srctree)/scripts/gen_ksymdeps.sh $@ >> $(dot-target).cmd
|
||||||
|
|
||||||
|
# List module undefined symbols
|
||||||
|
undefined_syms = $(NM) $< | $(AWK) '$$1 == "U" { printf("%s%s", x++ ? " " : "", $$2) }';
|
||||||
endif
|
endif
|
||||||
|
|
||||||
define rule_cc_o_c
|
define rule_cc_o_c
|
||||||
@ -271,13 +274,6 @@ define rule_as_o_S
|
|||||||
$(call cmd,modversions_S)
|
$(call cmd,modversions_S)
|
||||||
endef
|
endef
|
||||||
|
|
||||||
# List module undefined symbols (or empty line if not enabled)
|
|
||||||
ifdef CONFIG_TRIM_UNUSED_KSYMS
|
|
||||||
cmd_undef_syms = $(NM) $< | sed -n 's/^ *U //p' | xargs echo
|
|
||||||
else
|
|
||||||
cmd_undef_syms = echo
|
|
||||||
endif
|
|
||||||
|
|
||||||
# Built-in and composite module parts
|
# Built-in and composite module parts
|
||||||
$(obj)/%.o: $(src)/%.c $(recordmcount_source) $(objtool_dep) FORCE
|
$(obj)/%.o: $(src)/%.c $(recordmcount_source) $(objtool_dep) FORCE
|
||||||
$(call if_changed_rule,cc_o_c)
|
$(call if_changed_rule,cc_o_c)
|
||||||
@ -285,7 +281,7 @@ $(obj)/%.o: $(src)/%.c $(recordmcount_source) $(objtool_dep) FORCE
|
|||||||
|
|
||||||
cmd_mod = { \
|
cmd_mod = { \
|
||||||
echo $(if $($*-objs)$($*-y)$($*-m), $(addprefix $(obj)/, $($*-objs) $($*-y) $($*-m)), $(@:.mod=.o)); \
|
echo $(if $($*-objs)$($*-y)$($*-m), $(addprefix $(obj)/, $($*-objs) $($*-y) $($*-m)), $(@:.mod=.o)); \
|
||||||
$(cmd_undef_syms); \
|
$(undefined_syms) echo; \
|
||||||
} > $@
|
} > $@
|
||||||
|
|
||||||
$(obj)/%.mod: $(obj)/%.o FORCE
|
$(obj)/%.mod: $(obj)/%.o FORCE
|
||||||
|
@ -60,7 +60,6 @@ endif
|
|||||||
#
|
#
|
||||||
ifneq ($(findstring 2, $(KBUILD_EXTRA_WARN)),)
|
ifneq ($(findstring 2, $(KBUILD_EXTRA_WARN)),)
|
||||||
|
|
||||||
KBUILD_CFLAGS += -Wcast-align
|
|
||||||
KBUILD_CFLAGS += -Wdisabled-optimization
|
KBUILD_CFLAGS += -Wdisabled-optimization
|
||||||
KBUILD_CFLAGS += -Wnested-externs
|
KBUILD_CFLAGS += -Wnested-externs
|
||||||
KBUILD_CFLAGS += -Wshadow
|
KBUILD_CFLAGS += -Wshadow
|
||||||
@ -80,6 +79,7 @@ endif
|
|||||||
ifneq ($(findstring 3, $(KBUILD_EXTRA_WARN)),)
|
ifneq ($(findstring 3, $(KBUILD_EXTRA_WARN)),)
|
||||||
|
|
||||||
KBUILD_CFLAGS += -Wbad-function-cast
|
KBUILD_CFLAGS += -Wbad-function-cast
|
||||||
|
KBUILD_CFLAGS += -Wcast-align
|
||||||
KBUILD_CFLAGS += -Wcast-qual
|
KBUILD_CFLAGS += -Wcast-qual
|
||||||
KBUILD_CFLAGS += -Wconversion
|
KBUILD_CFLAGS += -Wconversion
|
||||||
KBUILD_CFLAGS += -Wpacked
|
KBUILD_CFLAGS += -Wpacked
|
||||||
|
20
scripts/lld-version.sh
Executable file
20
scripts/lld-version.sh
Executable file
@ -0,0 +1,20 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
|
#
|
||||||
|
# Usage: $ ./scripts/lld-version.sh ld.lld
|
||||||
|
#
|
||||||
|
# Print the linker version of `ld.lld' in a 5 or 6-digit form
|
||||||
|
# such as `100001' for ld.lld 10.0.1 etc.
|
||||||
|
|
||||||
|
linker_string="$($* --version)"
|
||||||
|
|
||||||
|
if ! ( echo $linker_string | grep -q LLD ); then
|
||||||
|
echo 0
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
VERSION=$(echo $linker_string | cut -d ' ' -f 2)
|
||||||
|
MAJOR=$(echo $VERSION | cut -d . -f 1)
|
||||||
|
MINOR=$(echo $VERSION | cut -d . -f 2)
|
||||||
|
PATCHLEVEL=$(echo $VERSION | cut -d . -f 3)
|
||||||
|
printf "%d%02d%02d\\n" $MAJOR $MINOR $PATCHLEVEL
|
Loading…
Reference in New Issue
Block a user