• R/O
  • HTTP
  • SSH
  • HTTPS

linux-2.4.36: Commit

2.4.36-stable kernel tree


Commit MetaInfo

Revision50fa1ba19fbdaec7550253d56d067a1b5fc946df (tree)
Zeit2007-08-06 05:02:11
AutorWilly Tarreau <w@1wt....>
CommiterWilly Tarreau

Log Message

[PATCH] fix incorrect use of -fno-unit-at-a-time on GCC >= 4

Axel Reinhold reported wrong code being emitted for arch/i386/kernel/i8259.c
using gcc-4.2, while the same code with gcc-4.1 was valid. The problem was
tracked down to gcc-4.2 messing up with sections with this option which is
already deprecated for gcc 4.x, and the asm statements were incorrectly
assigned to section .data. It was also possible to trick gcc-4.1 into the
same error by simply declaring an array before any asm statement.

The correct fix is to remove -fno-unit-at-a-time with gcc >= 4, which is
also what has been done in 2.6. In anticipation of such other problems with
gcc 4.x, a new function "if_gcc4" has been added to the main Makefile.

Signed-off-by: Willy Tarreau <w@1wt.eu>

Ändern Zusammenfassung

Diff

--- a/Makefile
+++ b/Makefile
@@ -100,6 +100,7 @@ endif
100100 AFLAGS := -D__ASSEMBLY__ $(CPPFLAGS)
101101
102102 check_gcc = $(shell if $(CC) $(1) -S -o /dev/null -xc /dev/null > /dev/null 2>&1; then echo "$(1)"; else echo "$(2)"; fi)
103+if_gcc4 = $(shell if echo __GNUC__ | $(CC) -E -xc - | grep -q '^4$$' > /dev/null 2>&1; then echo "$(1)"; else echo "$(2)"; fi)
103104
104105 # disable pointer signedness warnings in gcc 4.0
105106 CFLAGS += $(call check_gcc,-Wno-pointer-sign,)
--- a/arch/i386/Makefile
+++ b/arch/i386/Makefile
@@ -92,9 +92,9 @@ ifdef CONFIG_MVIAC3_2
9292 CFLAGS += $(call check_gcc,-march=c3-2,-march=i686)
9393 endif
9494
95-# Disable unit-at-a-time mode, it makes gcc use a lot more stack
96-# due to the lack of sharing of stacklots.
97-CFLAGS += $(call check_gcc,-fno-unit-at-a-time,)
95+# Disable unit-at-a-time mode on pre-gcc-4.0 compilers, it makes gcc use
96+# a lot more stack due to the lack of sharing of stacklots.
97+CFLAGS += $(call if_gcc4,,$(call check_gcc,-fno-unit-at-a-time,))
9898
9999 HEAD := arch/i386/kernel/head.o arch/i386/kernel/init_task.o
100100
Show on old repository browser