* [PATCH v2] kbuild: switch to thin archives
@ 2017-06-07 6:34 Nicholas Piggin
2017-06-08 13:50 ` kbuild test robot
0 siblings, 1 reply; 2+ messages in thread
From: Nicholas Piggin @ 2017-06-07 6:34 UTC (permalink / raw)
To: linux-kernel; +Cc: Nicholas Piggin
Switch from incremental build to thin archives for packaging built-in.o.
binutils version must be bumped to 2.20. Proposed patch for 4.13.
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
---
Documentation/process/changes.rst | 9 ++++-----
Makefile | 3 +++
arch/Kconfig | 6 ------
arch/powerpc/Kconfig | 8 --------
arch/x86/um/vdso/Makefile | 2 +-
scripts/Makefile.build | 27 ++++++-------------------
scripts/link-vmlinux.sh | 42 +++++++++------------------------------
7 files changed, 23 insertions(+), 74 deletions(-)
diff --git a/Documentation/process/changes.rst b/Documentation/process/changes.rst
index e25d63f8c0da..56fd0687bd4a 100644
--- a/Documentation/process/changes.rst
+++ b/Documentation/process/changes.rst
@@ -31,7 +31,7 @@ you probably needn't concern yourself with isdn4k-utils.
====================== =============== ========================================
GNU C 3.2 gcc --version
GNU make 3.81 make --version
-binutils 2.12 ld -v
+binutils 2.20 ld -v
util-linux 2.10o fdformat --version
module-init-tools 0.9.10 depmod -V
e2fsprogs 1.41.4 e2fsck -V
@@ -75,10 +75,9 @@ You will need GNU make 3.81 or later to build the kernel.
Binutils
--------
-Linux on IA-32 has recently switched from using ``as86`` to using ``gas`` for
-assembling the 16-bit boot code, removing the need for ``as86`` to compile
-your kernel. This change does, however, mean that you need a recent
-release of binutils.
+The build system has recently switched to using thin archives (`ar T`) rather
+than incremental linking (`ld -r`) for built-in.o intermediate steps. This
+requires binutils 2.20 or newer.
Perl
----
diff --git a/Makefile b/Makefile
index 470bd4d9513a..58658d7a04a0 100644
--- a/Makefile
+++ b/Makefile
@@ -818,6 +818,9 @@ KBUILD_CFLAGS += $(call cc-option,-Werror=designated-init)
# use the deterministic mode of AR if available
KBUILD_ARFLAGS := $(call ar-option,D)
+# must use thin archives.
+KBUILD_ARFLAGS :=$(KBUILD_ARFLAGS)T
+
include scripts/Makefile.kasan
include scripts/Makefile.extrawarn
include scripts/Makefile.ubsan
diff --git a/arch/Kconfig b/arch/Kconfig
index 6c00e5b00f8b..0a306916968a 100644
--- a/arch/Kconfig
+++ b/arch/Kconfig
@@ -510,12 +510,6 @@ config CC_STACKPROTECTOR_STRONG
endchoice
-config THIN_ARCHIVES
- bool
- 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/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
index f7c8f9972f61..80d882a78426 100644
--- a/arch/powerpc/Kconfig
+++ b/arch/powerpc/Kconfig
@@ -472,14 +472,6 @@ config MPROFILE_KERNEL
depends on PPC64 && CPU_LITTLE_ENDIAN
def_bool !DISABLE_MPROFILE_KERNEL
-config USE_THIN_ARCHIVES
- bool "Build the kernel using thin archives"
- default n
- select THIN_ARCHIVES
- help
- Build the kernel using thin archives.
- If you're unsure say N.
-
config IOMMU_HELPER
def_bool PPC64
diff --git a/arch/x86/um/vdso/Makefile b/arch/x86/um/vdso/Makefile
index d72dec406ccb..329406224330 100644
--- a/arch/x86/um/vdso/Makefile
+++ b/arch/x86/um/vdso/Makefile
@@ -53,7 +53,7 @@ CFLAGS_REMOVE_vdso-note.o = -pg -fprofile-arcs -ftest-coverage
CFLAGS_REMOVE_um_vdso.o = -pg -fprofile-arcs -ftest-coverage
targets += vdso-syms.lds
-obj-$(VDSO64-y) += vdso-syms.lds
+extra-$(VDSO64-y) += vdso-syms.lds
#
# Match symbols in the DSO that look like VDSO*; produce a file of constants.
diff --git a/scripts/Makefile.build b/scripts/Makefile.build
index 733e044fff8b..6cc07d09fce3 100644
--- a/scripts/Makefile.build
+++ b/scripts/Makefile.build
@@ -436,15 +436,9 @@ $(sort $(subdir-obj-y)): $(subdir-ym) ;
#
ifdef builtin-target
-ifdef CONFIG_THIN_ARCHIVES
- cmd_make_builtin = rm -f $@; $(AR) rcST$(KBUILD_ARFLAGS)
- cmd_make_empty_builtin = rm -f $@; $(AR) rcST$(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
+cmd_make_builtin = rm -f $@; $(AR) rcS$(KBUILD_ARFLAGS)
+cmd_make_empty_builtin = rm -f $@; $(AR) rcS$(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)),\
@@ -477,11 +471,7 @@ $(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) rcsT$(KBUILD_ARFLAGS) $@ $(lib-y)
-else
- cmd_link_l_target = rm -f $@; $(AR) rcs$(KBUILD_ARFLAGS) $@ $(lib-y)
-endif
+cmd_link_l_target = rm -f $@; $(AR) rcs$(KBUILD_ARFLAGS) $@ $(lib-y)
$(lib-target): $(lib-y) FORCE
$(call if_changed,link_l_target)
@@ -529,13 +519,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) rcST$(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) rcS$(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 c80291319cb2..a7d319db58f6 100755
--- a/scripts/link-vmlinux.sh
+++ b/scripts/link-vmlinux.sh
@@ -47,13 +47,11 @@ info()
#
archive_builtin()
{
- if [ -n "${CONFIG_THIN_ARCHIVES}" ]; then
- info AR built-in.o
- rm -f built-in.o;
- ${AR} rcsT${KBUILD_ARFLAGS} built-in.o \
- ${KBUILD_VMLINUX_INIT} \
- ${KBUILD_VMLINUX_MAIN}
- fi
+ info AR built-in.o
+ rm -f built-in.o;
+ ${AR} rcs${KBUILD_ARFLAGS} built-in.o \
+ ${KBUILD_VMLINUX_INIT} \
+ ${KBUILD_VMLINUX_MAIN}
}
# Link of vmlinux.o used for section mismatch analysis
@@ -62,14 +60,8 @@ modpost_link()
{
local objects
- if [ -n "${CONFIG_THIN_ARCHIVES}" ]; then
- objects="--whole-archive built-in.o"
- else
- objects="${KBUILD_VMLINUX_INIT} \
- --start-group \
- ${KBUILD_VMLINUX_MAIN} \
- --end-group"
- fi
+ objects="--whole-archive built-in.o --no-whole-archive"
+
${LD} ${LDFLAGS} -r -o ${1} ${objects}
}
@@ -82,28 +74,12 @@ vmlinux_link()
local objects
if [ "${SRCARCH}" != "um" ]; then
- if [ -n "${CONFIG_THIN_ARCHIVES}" ]; then
- objects="--whole-archive built-in.o ${1}"
- else
- objects="${KBUILD_VMLINUX_INIT} \
- --start-group \
- ${KBUILD_VMLINUX_MAIN} \
- --end-group \
- ${1}"
- fi
+ objects="--whole-archive built-in.o ${1} --no-whole-archive"
${LD} ${LDFLAGS} ${LDFLAGS_vmlinux} -o ${2} \
-T ${lds} ${objects}
else
- if [ -n "${CONFIG_THIN_ARCHIVES}" ]; then
- objects="-Wl,--whole-archive built-in.o ${1}"
- else
- objects="${KBUILD_VMLINUX_INIT} \
- -Wl,--start-group \
- ${KBUILD_VMLINUX_MAIN} \
- -Wl,--end-group \
- ${1}"
- fi
+ objects="-Wl,--whole-archive built-in.o ${1} -Wl,--no-whole-archive"
${CC} ${CFLAGS_vmlinux} -o ${2} \
-Wl,-T,${lds} \
--
2.11.0
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH v2] kbuild: switch to thin archives
2017-06-07 6:34 [PATCH v2] kbuild: switch to thin archives Nicholas Piggin
@ 2017-06-08 13:50 ` kbuild test robot
0 siblings, 0 replies; 2+ messages in thread
From: kbuild test robot @ 2017-06-08 13:50 UTC (permalink / raw)
To: Nicholas Piggin; +Cc: kbuild-all, linux-kernel, Nicholas Piggin
[-- Attachment #1: Type: text/plain, Size: 2959 bytes --]
Hi Nicholas,
[auto build test ERROR on linus/master]
[also build test ERROR on v4.12-rc4 next-20170608]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
url: https://github.com/0day-ci/linux/commits/Nicholas-Piggin/kbuild-switch-to-thin-archives/20170608-163425
config: sh-sh7724_generic_defconfig (attached as .config)
compiler: sh4-linux-gnu-gcc (Debian 6.1.1-9) 6.1.1 20160705
reproduce:
wget https://raw.githubusercontent.com/01org/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# save the attached .config to linux build tree
make.cross ARCH=sh
All errors (new ones prefixed by >>):
arch/sh/kernel/process.o: In function `arch_dup_task_struct':
process.c:(.text+0xc0): undefined reference to `save_fpu'
arch/sh/kernel/process_32.o: In function `__switch_to':
process_32.c:(.text+0x2ec): undefined reference to `save_fpu'
arch/sh/kernel/signal_32.o: In function `setup_sigcontext':
signal_32.c:(.text+0x350): undefined reference to `save_fpu'
arch/sh/kernel/signal_32.o: In function `do_signal':
signal_32.c:(.text+0x5c4): undefined reference to `__kernel_sigreturn'
signal_32.c:(.text+0x724): undefined reference to `__kernel_rt_sigreturn'
arch/sh/kernel/cpu/sh3/ex.o: In function `exception_handling_table':
(.data+0x24): undefined reference to `fpu_error_trap_handler'
arch/sh/kernel/cpu/fpu.o: In function `init_fpu':
fpu.c:(.text+0xd0): undefined reference to `save_fpu'
arch/sh/kernel/cpu/fpu.o: In function `__fpu_state_restore':
fpu.c:(.text+0x100): undefined reference to `restore_fpu'
arch/sh/kernel/cpu/sh4/softfloat.o: In function `roundAndPackFloat64':
softfloat.c:(.text+0x1b4): undefined reference to `float_rounding_mode'
softfloat.c:(.text+0x1b8): undefined reference to `float_raise'
arch/sh/kernel/cpu/sh4/softfloat.o: In function `subFloat64Sigs':
softfloat.c:(.text+0x4c4): undefined reference to `float_rounding_mode'
arch/sh/kernel/cpu/sh4/softfloat.o: In function `roundAndPackFloat32':
softfloat.c:(.text+0x884): undefined reference to `float_rounding_mode'
softfloat.c:(.text+0x888): undefined reference to `float_raise'
arch/sh/kernel/cpu/sh4/softfloat.o: In function `subFloat32Sigs':
softfloat.c:(.text+0x9f0): undefined reference to `float_rounding_mode'
arch/sh/kernel/cpu/sh4/softfloat.o: In function `float64_div':
softfloat.c:(.text+0x1334): undefined reference to `float_raise'
kernel/power/hibernate.o: In function `hibernation_snapshot':
>> hibernate.c:(.text+0x6f4): undefined reference to `swsusp_arch_suspend'
kernel/power/hibernate.o: In function `hibernation_restore':
>> hibernate.c:(.text+0x8ac): undefined reference to `swsusp_arch_resume'
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 8980 bytes --]
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2017-06-08 13:51 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-06-07 6:34 [PATCH v2] kbuild: switch to thin archives Nicholas Piggin
2017-06-08 13:50 ` kbuild test robot
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.