aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.14.71/5704-kbuild-remove-incremental-linking-option.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/5704-kbuild-remove-incremental-linking-option.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.14.71/5704-kbuild-remove-incremental-linking-option.patch233
1 files changed, 233 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/5704-kbuild-remove-incremental-linking-option.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/5704-kbuild-remove-incremental-linking-option.patch
new file mode 100644
index 00000000..51cc7500
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.14.71/5704-kbuild-remove-incremental-linking-option.patch
@@ -0,0 +1,233 @@
+From 70031d535f39c6f112d1f0b2e5ab0122108a8eb3 Mon Sep 17 00:00:00 2001
+From: Nicholas Piggin <npiggin@gmail.com>
+Date: Sun, 11 Feb 2018 00:25:03 +1000
+Subject: [PATCH 5704/5725] kbuild: remove incremental linking option
+
+This removes the old `ld -r` incremental link option, which has not
+been selected by any architecture since June 2017.
+
+Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
+Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
+---
+ Documentation/kbuild/makefiles.txt | 10 ++++-
+ arch/Kconfig | 6 ---
+ scripts/Makefile.build | 32 +++++---------
+ scripts/link-vmlinux.sh | 91 ++++++++++++++------------------------
+ 4 files changed, 51 insertions(+), 88 deletions(-)
+
+diff --git a/Documentation/kbuild/makefiles.txt b/Documentation/kbuild/makefiles.txt
+index f6f8038..a933c71 100644
+--- a/Documentation/kbuild/makefiles.txt
++++ b/Documentation/kbuild/makefiles.txt
+@@ -153,8 +153,14 @@ more details, with real examples.
+ configuration.
+
+ Kbuild compiles all the $(obj-y) files. It then calls
+- "$(LD) -r" to merge these files into one built-in.o file.
+- built-in.o is later linked into vmlinux by the parent Makefile.
++ "$(AR) rcSTP" to merge these files into one built-in.o file.
++ This is a thin archive without a symbol table, which makes it
++ unsuitable as a linker input.
++
++ The scripts/link-vmlinux.sh script later makes an aggregate
++ built-in.o with "${AR} rcsTP", which creates the thin archive
++ with a symbol table and an index, making it a valid input for
++ the final vmlinux link passes.
+
+ The order of files in $(obj-y) is significant. Duplicates in
+ the lists are allowed: the first instance will be linked into
+diff --git a/arch/Kconfig b/arch/Kconfig
+index 40dc31f..139f5a3 100644
+--- a/arch/Kconfig
++++ b/arch/Kconfig
+@@ -590,12 +590,6 @@ config CC_STACKPROTECTOR_STRONG
+
+ endchoice
+
+-config THIN_ARCHIVES
+- def_bool y
+- help
+- Select this if the architecture wants to use thin archives
+- instead of ld -r to create the built-in.o files.
+-
+ config LD_DEAD_CODE_DATA_ELIMINATION
+ bool
+ help
+diff --git a/scripts/Makefile.build b/scripts/Makefile.build
+index 08de8ba..e1bd7c2 100644
+--- a/scripts/Makefile.build
++++ b/scripts/Makefile.build
+@@ -462,15 +462,13 @@ $(sort $(subdir-obj-y)): $(subdir-ym) ;
+ #
+ ifdef builtin-target
+
+-ifdef CONFIG_THIN_ARCHIVES
+- cmd_make_builtin = rm -f $@; $(AR) rcSTP$(KBUILD_ARFLAGS)
+- cmd_make_empty_builtin = rm -f $@; $(AR) rcSTP$(KBUILD_ARFLAGS)
+- quiet_cmd_link_o_target = AR $@
+-else
+- cmd_make_builtin = $(LD) $(ld_flags) -r -o
+- cmd_make_empty_builtin = rm -f $@; $(AR) rcs$(KBUILD_ARFLAGS)
+- quiet_cmd_link_o_target = LD $@
+-endif
++# built-in.o archives are made with no symbol table or index which
++# makes them small and fast, but unable to be used by the linker.
++# scripts/link-vmlinux.sh builds an aggregate built-in.o with a symbol
++# table and index.
++cmd_make_builtin = rm -f $@; $(AR) rcSTP$(KBUILD_ARFLAGS)
++cmd_make_empty_builtin = rm -f $@; $(AR) rcSTP$(KBUILD_ARFLAGS)
++quiet_cmd_link_o_target = AR $@
+
+ # If the list of objects to link is empty, just create an empty built-in.o
+ cmd_link_o_target = $(if $(strip $(obj-y)),\
+@@ -503,11 +501,8 @@ $(modorder-target): $(subdir-ym) FORCE
+ ifdef lib-target
+ quiet_cmd_link_l_target = AR $@
+
+-ifdef CONFIG_THIN_ARCHIVES
+- cmd_link_l_target = rm -f $@; $(AR) rcsTP$(KBUILD_ARFLAGS) $@ $(lib-y)
+-else
+- cmd_link_l_target = rm -f $@; $(AR) rcs$(KBUILD_ARFLAGS) $@ $(lib-y)
+-endif
++# lib target archives do get a symbol table and index
++cmd_link_l_target = rm -f $@; $(AR) rcsTP$(KBUILD_ARFLAGS) $@ $(lib-y)
+
+ $(lib-target): $(lib-y) FORCE
+ $(call if_changed,link_l_target)
+@@ -555,13 +550,8 @@ $($(subst $(obj)/,,$(@:.o=-m)))), $^)
+
+ cmd_link_multi-link = $(LD) $(ld_flags) -r -o $@ $(link_multi_deps) $(cmd_secanalysis)
+
+-ifdef CONFIG_THIN_ARCHIVES
+- quiet_cmd_link_multi-y = AR $@
+- cmd_link_multi-y = rm -f $@; $(AR) rcSTP$(KBUILD_ARFLAGS) $@ $(link_multi_deps)
+-else
+- quiet_cmd_link_multi-y = LD $@
+- cmd_link_multi-y = $(cmd_link_multi-link)
+-endif
++quiet_cmd_link_multi-y = AR $@
++cmd_link_multi-y = rm -f $@; $(AR) rcSTP$(KBUILD_ARFLAGS) $@ $(link_multi_deps)
+
+ quiet_cmd_link_multi-m = LD [M] $@
+ cmd_link_multi-m = $(cmd_link_multi-link)
+diff --git a/scripts/link-vmlinux.sh b/scripts/link-vmlinux.sh
+index e6818b8e..50ede7b 100755
+--- a/scripts/link-vmlinux.sh
++++ b/scripts/link-vmlinux.sh
+@@ -55,13 +55,11 @@ info()
+ #
+ archive_builtin()
+ {
+- if [ -n "${CONFIG_THIN_ARCHIVES}" ]; then
+- info AR built-in.o
+- rm -f built-in.o;
+- ${AR} rcsTP${KBUILD_ARFLAGS} built-in.o \
+- ${KBUILD_VMLINUX_INIT} \
+- ${KBUILD_VMLINUX_MAIN}
+- fi
++ info AR built-in.o
++ rm -f built-in.o;
++ ${AR} rcsTP${KBUILD_ARFLAGS} built-in.o \
++ ${KBUILD_VMLINUX_INIT} \
++ ${KBUILD_VMLINUX_MAIN}
+ }
+
+ # Link of vmlinux.o used for section mismatch analysis
+@@ -70,20 +68,13 @@ modpost_link()
+ {
+ local objects
+
+- if [ -n "${CONFIG_THIN_ARCHIVES}" ]; then
+- objects="--whole-archive \
+- built-in.o \
+- --no-whole-archive \
+- --start-group \
+- ${KBUILD_VMLINUX_LIBS} \
+- --end-group"
+- else
+- objects="${KBUILD_VMLINUX_INIT} \
+- --start-group \
+- ${KBUILD_VMLINUX_MAIN} \
+- ${KBUILD_VMLINUX_LIBS} \
+- --end-group"
+- fi
++ objects="--whole-archive \
++ built-in.o \
++ --no-whole-archive \
++ --start-group \
++ ${KBUILD_VMLINUX_LIBS} \
++ --end-group"
++
+ ${LD} ${LDFLAGS} -r -o ${1} ${objects}
+ }
+
+@@ -96,46 +87,28 @@ vmlinux_link()
+ local objects
+
+ if [ "${SRCARCH}" != "um" ]; then
+- if [ -n "${CONFIG_THIN_ARCHIVES}" ]; then
+- objects="--whole-archive \
+- built-in.o \
+- --no-whole-archive \
+- --start-group \
+- ${KBUILD_VMLINUX_LIBS} \
+- --end-group \
+- ${1}"
+- else
+- objects="${KBUILD_VMLINUX_INIT} \
+- --start-group \
+- ${KBUILD_VMLINUX_MAIN} \
+- ${KBUILD_VMLINUX_LIBS} \
+- --end-group \
+- ${1}"
+- fi
+-
+- ${LD} ${LDFLAGS} ${LDFLAGS_vmlinux} -o ${2} \
++ objects="--whole-archive \
++ built-in.o \
++ --no-whole-archive \
++ --start-group \
++ ${KBUILD_VMLINUX_LIBS} \
++ --end-group \
++ ${1}"
++
++ ${LD} ${LDFLAGS} ${LDFLAGS_vmlinux} -o ${2} \
+ -T ${lds} ${objects}
+ else
+- if [ -n "${CONFIG_THIN_ARCHIVES}" ]; then
+- objects="-Wl,--whole-archive \
+- built-in.o \
+- -Wl,--no-whole-archive \
+- -Wl,--start-group \
+- ${KBUILD_VMLINUX_LIBS} \
+- -Wl,--end-group \
+- ${1}"
+- else
+- objects="${KBUILD_VMLINUX_INIT} \
+- -Wl,--start-group \
+- ${KBUILD_VMLINUX_MAIN} \
+- ${KBUILD_VMLINUX_LIBS} \
+- -Wl,--end-group \
+- ${1}"
+- fi
+-
+- ${CC} ${CFLAGS_vmlinux} -o ${2} \
+- -Wl,-T,${lds} \
+- ${objects} \
++ objects="-Wl,--whole-archive \
++ built-in.o \
++ -Wl,--no-whole-archive \
++ -Wl,--start-group \
++ ${KBUILD_VMLINUX_LIBS} \
++ -Wl,--end-group \
++ ${1}"
++
++ ${CC} ${CFLAGS_vmlinux} -o ${2} \
++ -Wl,-T,${lds} \
++ ${objects} \
+ -lutil -lrt -lpthread
+ rm -f linux
+ fi
+--
+2.7.4
+