Merge tag 'm68k-for-v4.20-tag1' of git://git.kernel.org/pub/scm/linux/kernel/git...
[sfrench/cifs-2.6.git] / arch / powerpc / Makefile
index 42f225f6ec9311e01eda204065e18878ed7b5941..17be664dafa2f2166d12025c8ee536d49c593b14 100644 (file)
@@ -112,6 +112,13 @@ KBUILD_LDFLAGS     += -m elf$(BITS)$(LDEMULATION)
 KBUILD_ARFLAGS += --target=elf$(BITS)-$(GNUTARGET)
 endif
 
+cflags-$(CONFIG_STACKPROTECTOR)        += -mstack-protector-guard=tls
+ifdef CONFIG_PPC64
+cflags-$(CONFIG_STACKPROTECTOR)        += -mstack-protector-guard-reg=r13
+else
+cflags-$(CONFIG_STACKPROTECTOR)        += -mstack-protector-guard-reg=r2
+endif
+
 LDFLAGS_vmlinux-y := -Bstatic
 LDFLAGS_vmlinux-$(CONFIG_RELOCATABLE) := -pie
 LDFLAGS_vmlinux        := $(LDFLAGS_vmlinux-y)
@@ -160,8 +167,17 @@ else
 CFLAGS-$(CONFIG_GENERIC_CPU) += -mcpu=powerpc64
 endif
 
+ifdef CONFIG_FUNCTION_TRACER
+CC_FLAGS_FTRACE := -pg
 ifdef CONFIG_MPROFILE_KERNEL
-       CC_FLAGS_FTRACE := -pg -mprofile-kernel
+CC_FLAGS_FTRACE += -mprofile-kernel
+endif
+# Work around gcc code-gen bugs with -pg / -fno-omit-frame-pointer in gcc <= 4.8
+# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=44199
+# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52828
+ifneq ($(cc-name),clang)
+CC_FLAGS_FTRACE        += $(call cc-ifversion, -lt, 0409, -mno-sched-epilog)
+endif
 endif
 
 CFLAGS-$(CONFIG_TARGET_CPU_BOOL) += $(call cc-option,-mcpu=$(CONFIG_TARGET_CPU))
@@ -229,16 +245,15 @@ ifdef CONFIG_6xx
 KBUILD_CFLAGS          += -mcpu=powerpc
 endif
 
-# Work around a gcc code-gen bug with -fno-omit-frame-pointer.
-ifdef CONFIG_FUNCTION_TRACER
-KBUILD_CFLAGS          += -mno-sched-epilog
-endif
-
 cpu-as-$(CONFIG_4xx)           += -Wa,-m405
 cpu-as-$(CONFIG_ALTIVEC)       += $(call as-option,-Wa$(comma)-maltivec)
 cpu-as-$(CONFIG_E200)          += -Wa,-me200
 cpu-as-$(CONFIG_E500)          += -Wa,-me500
-cpu-as-$(CONFIG_PPC_BOOK3S_64) += -Wa,-mpower4
+
+# When using '-many -mpower4' gas will first try and find a matching power4
+# mnemonic and failing that it will allow any valid mnemonic that GAS knows
+# about. GCC will pass -many to GAS when assembling, clang does not.
+cpu-as-$(CONFIG_PPC_BOOK3S_64) += -Wa,-mpower4 -Wa,-many
 cpu-as-$(CONFIG_PPC_E500MC)    += $(call as-option,-Wa$(comma)-me500mc)
 
 KBUILD_AFLAGS += $(cpu-as-y)
@@ -258,18 +273,8 @@ head-$(CONFIG_PPC_FPU)             += arch/powerpc/kernel/fpu.o
 head-$(CONFIG_ALTIVEC)         += arch/powerpc/kernel/vector.o
 head-$(CONFIG_PPC_OF_BOOT_TRAMPOLINE)  += arch/powerpc/kernel/prom_init.o
 
-core-y                         += arch/powerpc/kernel/ \
-                                  arch/powerpc/mm/ \
-                                  arch/powerpc/lib/ \
-                                  arch/powerpc/sysdev/ \
-                                  arch/powerpc/platforms/ \
-                                  arch/powerpc/math-emu/ \
-                                  arch/powerpc/crypto/ \
-                                  arch/powerpc/net/
-core-$(CONFIG_XMON)            += arch/powerpc/xmon/
-core-$(CONFIG_KVM)             += arch/powerpc/kvm/
-core-$(CONFIG_PERF_EVENTS)     += arch/powerpc/perf/
-core-$(CONFIG_KEXEC_FILE)      += arch/powerpc/purgatory/
+# See arch/powerpc/Kbuild for content of core part of the kernel
+core-y += arch/powerpc/
 
 drivers-$(CONFIG_OPROFILE)     += arch/powerpc/oprofile/
 
@@ -397,40 +402,20 @@ archclean:
 
 archprepare: checkbin
 
-# Use the file '.tmp_gas_check' for binutils tests, as gas won't output
-# to stdout and these checks are run even on install targets.
-TOUT   := .tmp_gas_check
+ifdef CONFIG_STACKPROTECTOR
+prepare: stack_protector_prepare
 
-# Check gcc and binutils versions:
-# - gcc-3.4 and binutils-2.14 are a fatal combination
-# - Require gcc 4.0 or above on 64-bit
-# - gcc-4.2.0 has issues compiling modules on 64-bit
+stack_protector_prepare: prepare0
+ifdef CONFIG_PPC64
+       $(eval KBUILD_CFLAGS += -mstack-protector-guard-offset=$(shell awk '{if ($$2 == "PACA_CANARY") print $$3;}' include/generated/asm-offsets.h))
+else
+       $(eval KBUILD_CFLAGS += -mstack-protector-guard-offset=$(shell awk '{if ($$2 == "TASK_CANARY") print $$3;}' include/generated/asm-offsets.h))
+endif
+endif
+
+# Check toolchain versions:
+# - gcc-4.6 is the minimum kernel-wide version so nothing required.
 checkbin:
-       @if test "$(cc-name)" != "clang" \
-           && test "$(cc-version)" = "0304" ; then \
-               if ! /bin/echo mftb 5 | $(AS) -v -mppc -many -o $(TOUT) >/dev/null 2>&1 ; then \
-                       echo -n '*** ${VERSION}.${PATCHLEVEL} kernels no longer build '; \
-                       echo 'correctly with gcc-3.4 and your version of binutils.'; \
-                       echo '*** Please upgrade your binutils or downgrade your gcc'; \
-                       false; \
-               fi ; \
-       fi
-       @if test "$(cc-name)" != "clang" \
-           && test "$(cc-version)" -lt "0400" \
-           && test "x${CONFIG_PPC64}" = "xy" ; then \
-                echo -n "Sorry, GCC v4.0 or above is required to build " ; \
-                echo "the 64-bit powerpc kernel." ; \
-                false ; \
-        fi
-       @if test "$(cc-name)" != "clang" \
-           && test "$(cc-fullversion)" = "040200" \
-           && test "x${CONFIG_MODULES}${CONFIG_PPC64}" = "xyy" ; then \
-               echo -n '*** GCC-4.2.0 cannot compile the 64-bit powerpc ' ; \
-               echo 'kernel with modules enabled.' ; \
-               echo -n '*** Please use a different GCC version or ' ; \
-               echo 'disable kernel modules' ; \
-               false ; \
-       fi
        @if test "x${CONFIG_CPU_LITTLE_ENDIAN}" = "xy" \
            && $(LD) --version | head -1 | grep ' 2\.24$$' >/dev/null ; then \
                echo -n '*** binutils 2.24 miscompiles weak symbols ' ; \
@@ -438,7 +423,3 @@ checkbin:
                echo -n '*** Please use a different binutils version.' ; \
                false ; \
        fi
-
-
-CLEAN_FILES += $(TOUT)
-