0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011 LD_BFD := elf64-s390
0012 KBUILD_LDFLAGS := -m elf64_s390
0013 KBUILD_AFLAGS_MODULE += -fPIC
0014 KBUILD_CFLAGS_MODULE += -fPIC
0015 KBUILD_AFLAGS += -m64
0016 KBUILD_CFLAGS += -m64
0017 ifeq ($(CONFIG_RELOCATABLE),y)
0018 KBUILD_CFLAGS += -fPIE
0019 LDFLAGS_vmlinux := -pie
0020 endif
0021 aflags_dwarf := -Wa,-gdwarf-2
0022 KBUILD_AFLAGS_DECOMPRESSOR := $(CLANG_FLAGS) -m64 -D__ASSEMBLY__
0023 ifndef CONFIG_AS_IS_LLVM
0024 KBUILD_AFLAGS_DECOMPRESSOR += $(if $(CONFIG_DEBUG_INFO),$(aflags_dwarf))
0025 endif
0026 KBUILD_CFLAGS_DECOMPRESSOR := $(CLANG_FLAGS) -m64 -O2 -mpacked-stack
0027 KBUILD_CFLAGS_DECOMPRESSOR += -DDISABLE_BRANCH_PROFILING -D__NO_FORTIFY
0028 KBUILD_CFLAGS_DECOMPRESSOR += -fno-delete-null-pointer-checks -msoft-float -mbackchain
0029 KBUILD_CFLAGS_DECOMPRESSOR += -fno-asynchronous-unwind-tables
0030 KBUILD_CFLAGS_DECOMPRESSOR += -ffreestanding
0031 KBUILD_CFLAGS_DECOMPRESSOR += -fno-stack-protector
0032 KBUILD_CFLAGS_DECOMPRESSOR += $(call cc-disable-warning, address-of-packed-member)
0033 KBUILD_CFLAGS_DECOMPRESSOR += $(if $(CONFIG_DEBUG_INFO),-g)
0034 KBUILD_CFLAGS_DECOMPRESSOR += $(if $(CONFIG_DEBUG_INFO_DWARF4), $(call cc-option, -gdwarf-4,))
0035 KBUILD_CFLAGS_DECOMPRESSOR += $(if $(CONFIG_CC_NO_ARRAY_BOUNDS),-Wno-array-bounds)
0036
0037 UTS_MACHINE := s390x
0038 STACK_SIZE := $(if $(CONFIG_KASAN),65536,16384)
0039 CHECKFLAGS += -D__s390__ -D__s390x__
0040
0041 export LD_BFD
0042
0043 mflags-$(CONFIG_MARCH_Z10) := -march=z10
0044 mflags-$(CONFIG_MARCH_Z196) := -march=z196
0045 mflags-$(CONFIG_MARCH_ZEC12) := -march=zEC12
0046 mflags-$(CONFIG_MARCH_Z13) := -march=z13
0047 mflags-$(CONFIG_MARCH_Z14) := -march=z14
0048 mflags-$(CONFIG_MARCH_Z15) := -march=z15
0049 mflags-$(CONFIG_MARCH_Z16) := -march=z16
0050
0051 export CC_FLAGS_MARCH := $(mflags-y)
0052
0053 aflags-y += $(mflags-y)
0054 cflags-y += $(mflags-y)
0055
0056 cflags-$(CONFIG_MARCH_Z10_TUNE) += -mtune=z10
0057 cflags-$(CONFIG_MARCH_Z196_TUNE) += -mtune=z196
0058 cflags-$(CONFIG_MARCH_ZEC12_TUNE) += -mtune=zEC12
0059 cflags-$(CONFIG_MARCH_Z13_TUNE) += -mtune=z13
0060 cflags-$(CONFIG_MARCH_Z14_TUNE) += -mtune=z14
0061 cflags-$(CONFIG_MARCH_Z15_TUNE) += -mtune=z15
0062 cflags-$(CONFIG_MARCH_Z16_TUNE) += -mtune=z16
0063
0064 cflags-y += -Wa,-I$(srctree)/arch/$(ARCH)/include
0065
0066
0067
0068
0069 cflags-$(CONFIG_FRAME_POINTER) += -fno-optimize-sibling-calls
0070
0071 KBUILD_AFLAGS_DECOMPRESSOR += $(aflags-y)
0072 KBUILD_CFLAGS_DECOMPRESSOR += $(cflags-y)
0073
0074 ifneq ($(call cc-option,-mstack-size=8192 -mstack-guard=128),)
0075 CC_FLAGS_CHECK_STACK := -mstack-size=$(STACK_SIZE)
0076 ifeq ($(call cc-option,-mstack-size=8192),)
0077 CC_FLAGS_CHECK_STACK += -mstack-guard=$(CONFIG_STACK_GUARD)
0078 endif
0079 export CC_FLAGS_CHECK_STACK
0080 cflags-$(CONFIG_CHECK_STACK) += $(CC_FLAGS_CHECK_STACK)
0081 endif
0082
0083 ifdef CONFIG_EXPOLINE
0084 ifdef CONFIG_EXPOLINE_EXTERN
0085 KBUILD_LDFLAGS_MODULE += arch/s390/lib/expoline/expoline.o
0086 CC_FLAGS_EXPOLINE := -mindirect-branch=thunk-extern
0087 CC_FLAGS_EXPOLINE += -mfunction-return=thunk-extern
0088 else
0089 CC_FLAGS_EXPOLINE := -mindirect-branch=thunk
0090 CC_FLAGS_EXPOLINE += -mfunction-return=thunk
0091 endif
0092 CC_FLAGS_EXPOLINE += -mindirect-branch-table
0093 export CC_FLAGS_EXPOLINE
0094 cflags-y += $(CC_FLAGS_EXPOLINE) -DCC_USING_EXPOLINE
0095 aflags-y += -DCC_USING_EXPOLINE
0096 endif
0097
0098 ifdef CONFIG_FUNCTION_TRACER
0099 ifeq ($(call cc-option,-mfentry -mnop-mcount),)
0100
0101 cc_hotpatch := -mhotpatch=0,3
0102 ifneq ($(call cc-option,$(cc_hotpatch)),)
0103 CC_FLAGS_FTRACE := $(cc_hotpatch)
0104 KBUILD_AFLAGS += -DCC_USING_HOTPATCH
0105 KBUILD_CFLAGS += -DCC_USING_HOTPATCH
0106 endif
0107 endif
0108 endif
0109
0110
0111 cfi := $(call as-instr,.cfi_startproc\n.cfi_val_offset 15$(comma)-160\n.cfi_endproc,-DCONFIG_AS_CFI_VAL_OFFSET=1)
0112
0113 KBUILD_CFLAGS += -mpacked-stack -mbackchain -msoft-float $(cflags-y)
0114 KBUILD_CFLAGS += -pipe -Wno-sign-compare
0115 KBUILD_CFLAGS += -fno-asynchronous-unwind-tables $(cfi)
0116 KBUILD_AFLAGS += $(aflags-y) $(cfi)
0117 export KBUILD_AFLAGS_DECOMPRESSOR
0118 export KBUILD_CFLAGS_DECOMPRESSOR
0119
0120 OBJCOPYFLAGS := -O binary
0121
0122 head-y := arch/s390/kernel/head64.o
0123
0124 libs-y += arch/s390/lib/
0125 drivers-y += drivers/s390/
0126
0127 boot := arch/s390/boot
0128 syscalls := arch/s390/kernel/syscalls
0129 tools := arch/s390/tools
0130
0131 all: bzImage
0132
0133
0134 KBUILD_IMAGE := $(boot)/bzImage
0135
0136 install:
0137 $(call cmd,install)
0138
0139 bzImage: vmlinux
0140 $(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
0141
0142 zfcpdump:
0143 $(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
0144
0145 vdso_install:
0146 $(Q)$(MAKE) $(build)=arch/$(ARCH)/kernel/vdso64 $@
0147
0148 archheaders:
0149 $(Q)$(MAKE) $(build)=$(syscalls) uapi
0150
0151 archprepare:
0152 $(Q)$(MAKE) $(build)=$(syscalls) kapi
0153 $(Q)$(MAKE) $(build)=$(tools) kapi
0154 ifeq ($(KBUILD_EXTMOD),)
0155
0156
0157
0158
0159
0160
0161 prepare: vdso_prepare
0162 vdso_prepare: prepare0
0163 $(Q)$(MAKE) $(build)=arch/s390/kernel/vdso64 include/generated/vdso64-offsets.h
0164 $(if $(CONFIG_COMPAT),$(Q)$(MAKE) \
0165 $(build)=arch/s390/kernel/vdso32 include/generated/vdso32-offsets.h)
0166
0167 ifdef CONFIG_EXPOLINE_EXTERN
0168 modules_prepare: expoline_prepare
0169 expoline_prepare:
0170 $(Q)$(MAKE) $(build)=arch/s390/lib/expoline arch/s390/lib/expoline/expoline.o
0171 endif
0172 endif
0173
0174
0175 define archhelp
0176 echo '* bzImage - Kernel image for IPL ($(boot)/bzImage)'
0177 echo ' install - Install kernel using'
0178 echo ' (your) ~/bin/$(INSTALLKERNEL) or'
0179 echo ' (distribution) /sbin/$(INSTALLKERNEL) or'
0180 echo ' install to $$(INSTALL_PATH)'
0181 endef