Subject: Re: linux-next: build failure after merge of the arm-current tree

From: Stephen Rothwell <[email-masked]>
Date: Thu, 19 Apr 2018 09:51:55 +1000

Hi Russell,

On Wed, 18 Apr 2018 19:17:23 +0100 Russell King <[email-masked]> wrote:
>
> Hmm, I guess it's a result of:
> 
> # echo $(( ))
> dash: 4: arithmetic expression: expecting primary: " "
> 
> which points to the sed expression producing no output.  If that's the
> case, then something else went wrong with the build earlier - there
> should be no case where the built vmlinux does not contain the
> __bss_start and __bss_stop symbols on ARM, since every kernel contains
> a .bss section.
> 
> Olof's autobuilder shows no errors, but that could be because it's
> using bash - I don't know.  kernelci.org also shows no failures.
> 
> I think more information is needed to debug this, such as:
> 
> - does nm of the vmlinux contain the __bss_start and __bss_stop
>   symbols, and are they formatted as one would expect (iow, marked
>   as a global BSS symbol?)

$ /opt/cross/gcc-4.6.3-nolibc/arm-unknown-linux-gnueabi/bin/arm-unknown-linux-gnueabi-nm vmlinux | grep __bss_st
008af260 A __bss_start
008b4394 A __bss_stop

so, that's our problem.  Note we are building with gcc 4.6.3 and binutils 2.22

> - does the nm | sed pipeline produce the expected output when run
>   outside of everything else?
> - does dash evaluate the output correctly outside of the makefile?

so dash returns the above error for 'echo $(( ))' and bash returns '0'

I had to actually symlink /bin/sh to dash to get it to fail - running
with in dash and setting SHELL to /bin/dash was not sufficient.

So under bash, we don't get an error, but we use 0 as the bss length :-(

I will this patch to linux-next today:

From: Stephen Rothwell <[email-masked]>
Date: Thu, 19 Apr 2018 09:46:22 +1000
Subject: [PATCH] arm: check for A as well as B type sybols when calculating BSS size

older compilers produce those

Fixes: 429f7a062e3b ("ARM: decompressor: fix BSS size calculation")
Signed-off-by: Stephen Rothwell <[email-masked]>
---
 arch/arm/boot/compressed/Makefile | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/arch/arm/boot/compressed/Makefile b/arch/arm/boot/compressed/Makefile
index b0354dfc7055..6a4e7341ecd3 100644
--- a/arch/arm/boot/compressed/Makefile
+++ b/arch/arm/boot/compressed/Makefile
@@ -118,8 +118,8 @@ asflags-y := -DZIMAGE
 
 # Supply kernel BSS size to the decompressor via a linker symbol.
 KBSS_SZ = $(shell echo $$(($$($(CROSS_COMPILE)nm $(obj)/../../../../vmlinux | \
-		sed -n -e 's/^\([^ ]*\) B __bss_start$$/-0x\1/p' \
-		       -e 's/^\([^ ]*\) B __bss_stop$$/+0x\1/p') )) )
+		sed -n -e 's/^\([^ ]*\) [AB] __bss_start$$/-0x\1/p' \
+		       -e 's/^\([^ ]*\) [AB] __bss_stop$$/+0x\1/p') )) )
 LDFLAGS_vmlinux = --defsym _kernel_bss_size=$(KBSS_SZ)
 # Supply ZRELADDR to the decompressor via a linker symbol.
 ifneq ($(CONFIG_AUTO_ZRELADDR),y)
-- 
2.17.0

-- 
Cheers,
Stephen Rothwell