powerpc/Makefile: Use cflags-y/aflags-y for setting endian options
When we introduced the little endian support, we added the endian flags to CC directly using override. I don't know the history of why we did that, I suspect no one does. Although this mostly works, it has one bug, which is that CROSS32CC doesn't get -mbig-endian. That means when the compiler is little endian by default and the user is building big endian, vdso32 is incorrectly compiled as little endian and the kernel fails to build. Instead we can add the endian flags to cflags-y/aflags-y, and then append those to KBUILD_CFLAGS/KBUILD_AFLAGS. This has the advantage of being 1) less ugly, 2) the documented way of adding flags in the arch Makefile and 3) it fixes building vdso32 with a LE toolchain. Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
This commit is contained in:
Родитель
97f6e0cc35
Коммит
164af597ce
|
@ -66,29 +66,28 @@ endif
|
||||||
UTS_MACHINE := $(OLDARCH)
|
UTS_MACHINE := $(OLDARCH)
|
||||||
|
|
||||||
ifeq ($(CONFIG_CPU_LITTLE_ENDIAN),y)
|
ifeq ($(CONFIG_CPU_LITTLE_ENDIAN),y)
|
||||||
override CC += -mlittle-endian
|
|
||||||
ifneq ($(cc-name),clang)
|
|
||||||
override CC += -mno-strict-align
|
|
||||||
endif
|
|
||||||
override AS += -mlittle-endian
|
|
||||||
override LD += -EL
|
override LD += -EL
|
||||||
override CROSS32CC += -mlittle-endian
|
|
||||||
override CROSS32AS += -mlittle-endian
|
override CROSS32AS += -mlittle-endian
|
||||||
LDEMULATION := lppc
|
LDEMULATION := lppc
|
||||||
GNUTARGET := powerpcle
|
GNUTARGET := powerpcle
|
||||||
MULTIPLEWORD := -mno-multiple
|
MULTIPLEWORD := -mno-multiple
|
||||||
KBUILD_CFLAGS_MODULE += $(call cc-option,-mno-save-toc-indirect)
|
KBUILD_CFLAGS_MODULE += $(call cc-option,-mno-save-toc-indirect)
|
||||||
else
|
else
|
||||||
ifeq ($(call cc-option-yn,-mbig-endian),y)
|
|
||||||
override CC += -mbig-endian
|
|
||||||
override AS += -mbig-endian
|
|
||||||
endif
|
|
||||||
override LD += -EB
|
override LD += -EB
|
||||||
LDEMULATION := ppc
|
LDEMULATION := ppc
|
||||||
GNUTARGET := powerpc
|
GNUTARGET := powerpc
|
||||||
MULTIPLEWORD := -mmultiple
|
MULTIPLEWORD := -mmultiple
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
cflags-$(CONFIG_CPU_BIG_ENDIAN) += $(call cc-option,-mbig-endian)
|
||||||
|
cflags-$(CONFIG_CPU_LITTLE_ENDIAN) += -mlittle-endian
|
||||||
|
ifneq ($(cc-name),clang)
|
||||||
|
cflags-$(CONFIG_CPU_LITTLE_ENDIAN) += -mno-strict-align
|
||||||
|
endif
|
||||||
|
|
||||||
|
aflags-$(CONFIG_CPU_BIG_ENDIAN) += $(call cc-option,-mbig-endian)
|
||||||
|
aflags-$(CONFIG_CPU_LITTLE_ENDIAN) += -mlittle-endian
|
||||||
|
|
||||||
ifeq ($(HAS_BIARCH),y)
|
ifeq ($(HAS_BIARCH),y)
|
||||||
override AS += -a$(CONFIG_WORD_SIZE)
|
override AS += -a$(CONFIG_WORD_SIZE)
|
||||||
override LD += -m elf$(CONFIG_WORD_SIZE)$(LDEMULATION)
|
override LD += -m elf$(CONFIG_WORD_SIZE)$(LDEMULATION)
|
||||||
|
@ -232,6 +231,9 @@ cpu-as-$(CONFIG_E200) += -Wa,-me200
|
||||||
KBUILD_AFLAGS += $(cpu-as-y)
|
KBUILD_AFLAGS += $(cpu-as-y)
|
||||||
KBUILD_CFLAGS += $(cpu-as-y)
|
KBUILD_CFLAGS += $(cpu-as-y)
|
||||||
|
|
||||||
|
KBUILD_AFLAGS += $(aflags-y)
|
||||||
|
KBUILD_CFLAGS += $(cflags-y)
|
||||||
|
|
||||||
head-y := arch/powerpc/kernel/head_$(CONFIG_WORD_SIZE).o
|
head-y := arch/powerpc/kernel/head_$(CONFIG_WORD_SIZE).o
|
||||||
head-$(CONFIG_8xx) := arch/powerpc/kernel/head_8xx.o
|
head-$(CONFIG_8xx) := arch/powerpc/kernel/head_8xx.o
|
||||||
head-$(CONFIG_40x) := arch/powerpc/kernel/head_40x.o
|
head-$(CONFIG_40x) := arch/powerpc/kernel/head_40x.o
|
||||||
|
|
Загрузка…
Ссылка в новой задаче