Subject: MIPS: Alchemy build broken in latest linus-git

From: Manuel Lauss <[email-masked]>
Date: Thu, 24 Sep 2009 08:44:34 +0200

Hi Sam!

Commit 51b563fc93c8cb5bff1d67a0a71c374e4a4ea049 breaks
Alchemy build in vmlinux.lds:

mipsel-softfloat-linux-gnu-gcc -E
-Wp,-MD,arch/mips/kernel/.vmlinux.lds.d  -nostdinc -isystem
/usr/lib/gcc/mipsel-softfloat-linux-gnu/4.3.4/include -Iinclude
-Iinclude2 -I/mnt/work/au1200/kernel/linux-2.6.git/include
-I/mnt/work/au1200/kernel/linux-2.6.git/arch/mips/include -include
include/linux/autoconf.h -D__KERNEL__
-D"VMLINUX_LOAD_ADDRESS=0xffffffff80100000" -D"DATAOFFSET=0" -P -C
-Umips -D__ASSEMBLY__ -DLINKER_SCRIPT -o arch/mips/kernel/vmlinux.lds
/mnt/work/au1200/kernel/linux-2.6.git/arch/mips/kernel/vmlinux.lds.S
In file included from
/mnt/work/au1200/kernel/linux-2.6.git/arch/mips/kernel/vmlinux.lds.S:2:
/mnt/work/au1200/kernel/linux-2.6.git/arch/mips/include/asm/page.h:12:20:
error: spaces.h: No such file or directory
make[2]: *** [arch/mips/kernel/vmlinux.lds] Error 1
make[1]: *** [arch/mips/kernel] Error 2
make: *** [sub-make] Error 2

I tracked it to this part in the commit:
diff --git a/arch/mips/Makefile b/arch/mips/Makefile
index c825b14..77f5021 100644
--- a/arch/mips/Makefile
+++ b/arch/mips/Makefile
[...]
-#
-# Choosing incompatible machines durings configuration will result in
-# error messages during linking.  Select a default linkscript if
-# none has been choosen above.
-#
-
-CPPFLAGS_vmlinux.lds := \
-       $(KBUILD_CFLAGS) \
-       -D"LOADADDR=$(load-y)" \
-       -D"JIFFIES=$(JIFFIES)" \
-       -D"DATAOFFSET=$(if $(dataoffset-y),$(dataoffset-y),0)"
-

This eliminates the a whole lot of include directives, among which is
"-Iarch/mips/include/asm/mach-generic" which provides a path to the
now-missing "spaces.h".

Is there a cheap way to add this back again?

For reference, here's the full compiler command for the previously-working
case:

mipsel-softfloat-linux-gnu-gcc -E
-Wp,-MD,arch/mips/kernel/.vmlinux.lds.d  -nostdinc -isystem
/usr/lib/gcc/mipsel-softfloat-linux-gnu/4.3.4/include -Iinclude
-Iinclude2 -I/mnt/work/au1200/kernel/linux-2.6.git/include
-I/mnt/work/au1200/kernel/linux-2.6.git/arch/mips/include -include
include/linux/autoconf.h -D__KERNEL__ -Wall -Wundef
-Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common
-Werror-implicit-function-declaration -Wno-format-security
-fno-delete-null-pointer-checks -O2 -ffunction-sections
-mno-check-zero-division -mabi=32 -G 0 -mno-abicalls -fno-pic -pipe
-msoft-float -ffreestanding -march=mips32 -Wa,-mips32 -Wa,--trap
-I/mnt/work/au1200/kernel/linux-2.6.git/arch/mips/include/asm/mach-db1x00
  -I/mnt/work/au1200/kernel/linux-2.6.git/arch/mips/include/asm/mach-au1x00
  -I/mnt/work/au1200/kernel/linux-2.6.git/arch/mips/include/asm/mach-generic
-D"VMLINUX_LOAD_ADDRESS=0xffffffff80100000"
-D"LOADADDR=0xffffffff80100000" -D"JIFFIES=jiffies_64"
-D"DATAOFFSET=0" -P -C -Umips -D__ASSEMBLY__ -o
arch/mips/kernel/vmlinux.lds
/mnt/work/au1200/kernel/linux-2.6.git/arch/mips/kernel/vmlinux.lds.S

Btw, I've been using bash-4 on my hosts since Gentoo added it to
their repos a few months ago, and I haven't noticed any breakages
so far.

Thanks!
        Manuel Lauss

---

From: Dmitri Vorobiev <[email-masked]>
Date: Thu, 24 Sep 2009 10:49:48 +0300

> Hi Sam!

[skipped]

> error: spaces.h: No such file or directory

The same problem for the SGI IP22.

Thanks,
Dmitri

---

From: Sam Ravnborg <[email-masked]>
Date: Thu, 24 Sep 2009 11:15:40 +0200

> -       -D"DATAOFFSET=$(if $(dataoffset-y),$(dataoffset-y),0)"

I'm away from my machine atm.
Could you try to add the following to arch/mips/kernel/makefile:

CPPFFLAGS_vmlinux.lds += $(KBUILD_CFLAGS)

This should fix it.

	Sam

---

From: Manuel Lauss <[email-masked]>
Date: Thu, 24 Sep 2009 11:24:45 +0200

> CPPFFLAGS_vmlinux.lds += $(KBUILD_CFLAGS)

Thank you, that did it.

        Manuel Lauss

---

From: Manuel Lauss <[email-masked]>
Date: Thu, 24 Sep 2009 11:41:41 +0200

>> CPPFFLAGS_vmlinux.lds += $(KBUILD_CFLAGS)

Spoke too soon:

This leaves unprocessed directives in vmlinux.lds:

[...]
OUTPUT_ARCH(mips)
ENTRY(kernel_entry)
PHDRS {
 text PT_LOAD FLAGS(7); /* RWX */
 note PT_NOTE FLAGS(4); /* R__ */
}
ifdef 1
 ifdef 1
  jiffies = jiffies_64;
 else
  jiffies = jiffies_64 + 4;
 endif
else
 jiffies = jiffies_64;
endif
SECTIONS
{
 . = 0xffffffff80100000;
 /* read-only */
 _text = .; /* Text and read-only data */
[...]

        Manuel Lauss

---

From: Manuel Lauss <[email-masked]>
Date: Thu, 24 Sep 2009 14:09:45 +0200

Manuel Lauss wrote:
>  jiffies = jiffies_6

... which is of course easily fixed after consumption of
unhealthy amounts of coffee.

Patch below works for me.

Thank you Sam!
	Manuel Lauss

---

From: Manuel Lauss <[email-masked]>
Subject: [PATCH] MIPS: fix build of vmlinux.lds

Commit 51b563fc93c8cb5bff1d67a0a71c374e4a4ea049 removed a few
CPPFLAGS with vital include paths necessary to build vmlinux.lds
on MIPS, and moved the calculation of the 'jiffies' symbol
directly to vmlinux.lds.S but forgot to change make ifdef/... to
cpp macros.

Signed-off-by: Manuel Lauss <[email-masked]>
---
 arch/mips/kernel/Makefile      |    2 ++
 arch/mips/kernel/vmlinux.lds.S |   12 ++++++------
 2 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/arch/mips/kernel/Makefile b/arch/mips/kernel/Makefile
index e961221..8e26e9c 100644
--- a/arch/mips/kernel/Makefile
+++ b/arch/mips/kernel/Makefile
@@ -91,3 +91,5 @@ CFLAGS_cpu-bugs64.o	= $(shell if $(CC) $(KBUILD_CFLAGS) -Wa,-mdaddi -c -o /dev/n
 obj-$(CONFIG_HAVE_STD_PC_SERIAL_PORT)	+= 8250-platform.o

 EXTRA_CFLAGS += -Werror
+
+CPPFLAGS_vmlinux.lds		:= $(KBUILD_CFLAGS)
diff --git a/arch/mips/kernel/vmlinux.lds.S b/arch/mips/kernel/vmlinux.lds.S
index 9bf0e3d..162b299 100644
--- a/arch/mips/kernel/vmlinux.lds.S
+++ b/arch/mips/kernel/vmlinux.lds.S
@@ -11,15 +11,15 @@ PHDRS {
 	note PT_NOTE FLAGS(4);	/* R__ */
 }

-ifdef CONFIG_32BIT
-	ifdef CONFIG_CPU_LITTLE_ENDIAN
+#ifdef CONFIG_32BIT
+	#ifdef CONFIG_CPU_LITTLE_ENDIAN
 		jiffies  = jiffies_64;
-	else
+	#else
 		jiffies  = jiffies_64 + 4;
-	endif
-else
+	#endif
+#else
 	jiffies  = jiffies_64;
-endif
+#endif

 SECTIONS
 {
--
1.6.5.rc1

---

From: Dmitri Vorobiev <[email-masked]>
Date: Thu, 24 Sep 2009 15:23:51 +0300

> Patch below works for me.

For me too, and I am using a custom IP22 config.

Thanks!

Dmitri

---

From: Sam Ravnborg <[email-masked]>
Date: Thu, 24 Sep 2009 21:43:48 +0200

> Signed-off-by: Manuel Lauss <[email-masked]>

Thanks for providing a patch!

The assignment of CPPFLAGS was supposed to be
in arch/mips/kernel/MAkefile.

I fixed this up.
Please test this patch - I will await testing
feedback before I submit to Linus.

	Sam

From bfc4d46080e26f5806f0aa59e95fd5d284ca1fd4 Mon Sep 17 00:00:00 2001
From: Manuel Lauss <[email-masked]>
Date: Thu, 24 Sep 2009 21:44:24 +0200
Subject: [PATCH] mips: fix build of vmlinux.lds

Commit 51b563fc93c8cb5bff1d67a0a71c374e4a4ea049 ("arm, cris, mips,
sparc, powerpc, um, xtensa: fix build with bash 4.0") removed a few
CPPFLAGS with vital include paths necessary to build vmlinux.lds
on MIPS, and moved the calculation of the 'jiffies' symbol
directly to vmlinux.lds.S but forgot to change make ifdef/... to
cpp macros.

Signed-off-by: Manuel Lauss <[email-masked]>
[sam: moved assignment of CPPFLAGS arch/mips/kernel/Makefile]
Signed-off-by: Sam Ravnborg <[email-masked]>
---
 arch/mips/kernel/Makefile      |    2 ++
 arch/mips/kernel/vmlinux.lds.S |   12 ++++++------
 2 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/arch/mips/kernel/Makefile b/arch/mips/kernel/Makefile
index e961221..eecd2a9 100644
--- a/arch/mips/kernel/Makefile
+++ b/arch/mips/kernel/Makefile
@@ -2,6 +2,8 @@
 # Makefile for the Linux/MIPS kernel.
 #
 
+CPPFLAGS_vmlinux.lds := $(KBUILD_CFLAGS)
+
 extra-y		:= head.o init_task.o vmlinux.lds
 
 obj-y		+= cpu-probe.o branch.o entry.o genex.o irq.o process.o \
 
-ifdef CONFIG_32BIT
 
 SECTIONS
 {
-- 
1.6.2.5

---

From: Dmitri Vorobiev <[email-masked]>
Date: Fri, 25 Sep 2009 11:48:25 +0300

> Signed-off-by: Sam Ravnborg <[email-masked]>

Acked-by: Dmitri Vorobiev <[email-masked]>