Revise and add CFI CFA and register rule annotations to the vDSO functions for proper stack unwinding and debugging. Because glibc might call the vDSO in special ways, the vDSO code does not rely on a stack frame created by the caller. The TOD clock value can be therefore not stored in the pre-allocated stack area and additional stack space is required. To correctly annotate these situations with CFI, the .cfi_val_offset directive is required to create relative offsets on the value of the stack register %r15. Because the .cfi_val_offset directive is available with recent GNU assembler versions only, additional checks are necessary. Note that if the vDSO is assembled with an older assembler version, stack unwinding and debugging from within the vDSO code might not be possible. Signed-off-by: Hendrik Brueckner <brueckner@linux.vnet.ibm.com> Reviewed-by: Heiko Carstens <heiko.carstens@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
147 lines
4.3 KiB
Makefile
147 lines
4.3 KiB
Makefile
# SPDX-License-Identifier: GPL-2.0
|
|
#
|
|
# s390/Makefile
|
|
#
|
|
# This file is included by the global makefile so that you can add your own
|
|
# architecture-specific flags and dependencies. Remember to do have actions
|
|
# for "archclean" and "archdep" for cleaning up and making dependencies for
|
|
# this architecture
|
|
#
|
|
# Copyright (C) 1994 by Linus Torvalds
|
|
#
|
|
|
|
LD_BFD := elf64-s390
|
|
LDFLAGS := -m elf64_s390
|
|
KBUILD_AFLAGS_MODULE += -fPIC
|
|
KBUILD_CFLAGS_MODULE += -fPIC
|
|
KBUILD_CFLAGS += -m64
|
|
KBUILD_AFLAGS += -m64
|
|
UTS_MACHINE := s390x
|
|
STACK_SIZE := 16384
|
|
CHECKFLAGS += -D__s390__ -D__s390x__ -mbig-endian
|
|
|
|
export LD_BFD
|
|
|
|
mflags-$(CONFIG_MARCH_Z900) := -march=z900
|
|
mflags-$(CONFIG_MARCH_Z990) := -march=z990
|
|
mflags-$(CONFIG_MARCH_Z9_109) := -march=z9-109
|
|
mflags-$(CONFIG_MARCH_Z10) := -march=z10
|
|
mflags-$(CONFIG_MARCH_Z196) := -march=z196
|
|
mflags-$(CONFIG_MARCH_ZEC12) := -march=zEC12
|
|
mflags-$(CONFIG_MARCH_Z13) := -march=z13
|
|
mflags-$(CONFIG_MARCH_Z14) := -march=z14
|
|
|
|
export CC_FLAGS_MARCH := $(mflags-y)
|
|
|
|
aflags-y += $(mflags-y)
|
|
cflags-y += $(mflags-y)
|
|
|
|
cflags-$(CONFIG_MARCH_Z900_TUNE) += -mtune=z900
|
|
cflags-$(CONFIG_MARCH_Z990_TUNE) += -mtune=z990
|
|
cflags-$(CONFIG_MARCH_Z9_109_TUNE) += -mtune=z9-109
|
|
cflags-$(CONFIG_MARCH_Z10_TUNE) += -mtune=z10
|
|
cflags-$(CONFIG_MARCH_Z196_TUNE) += -mtune=z196
|
|
cflags-$(CONFIG_MARCH_ZEC12_TUNE) += -mtune=zEC12
|
|
cflags-$(CONFIG_MARCH_Z13_TUNE) += -mtune=z13
|
|
cflags-$(CONFIG_MARCH_Z14_TUNE) += -mtune=z14
|
|
|
|
cflags-y += -Wa,-I$(srctree)/arch/$(ARCH)/include
|
|
|
|
#KBUILD_IMAGE is necessary for make rpm
|
|
KBUILD_IMAGE :=arch/s390/boot/image
|
|
|
|
#
|
|
# Prevent tail-call optimizations, to get clearer backtraces:
|
|
#
|
|
cflags-$(CONFIG_FRAME_POINTER) += -fno-optimize-sibling-calls
|
|
|
|
# old style option for packed stacks
|
|
ifeq ($(call cc-option-yn,-mkernel-backchain),y)
|
|
cflags-$(CONFIG_PACK_STACK) += -mkernel-backchain -D__PACK_STACK
|
|
aflags-$(CONFIG_PACK_STACK) += -D__PACK_STACK
|
|
endif
|
|
|
|
# new style option for packed stacks
|
|
ifeq ($(call cc-option-yn,-mpacked-stack),y)
|
|
cflags-$(CONFIG_PACK_STACK) += -mpacked-stack -D__PACK_STACK
|
|
aflags-$(CONFIG_PACK_STACK) += -D__PACK_STACK
|
|
endif
|
|
|
|
ifeq ($(call cc-option-yn,-mstack-size=8192 -mstack-guard=128),y)
|
|
cflags-$(CONFIG_CHECK_STACK) += -mstack-size=$(STACK_SIZE)
|
|
ifneq ($(call cc-option-yn,-mstack-size=8192),y)
|
|
cflags-$(CONFIG_CHECK_STACK) += -mstack-guard=$(CONFIG_STACK_GUARD)
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(call cc-option-yn,-mwarn-dynamicstack),y)
|
|
cflags-$(CONFIG_WARN_DYNAMIC_STACK) += -mwarn-dynamicstack
|
|
endif
|
|
|
|
ifdef CONFIG_FUNCTION_TRACER
|
|
# make use of hotpatch feature if the compiler supports it
|
|
cc_hotpatch := -mhotpatch=0,3
|
|
ifeq ($(call cc-option-yn,$(cc_hotpatch)),y)
|
|
CC_FLAGS_FTRACE := $(cc_hotpatch)
|
|
KBUILD_AFLAGS += -DCC_USING_HOTPATCH
|
|
KBUILD_CFLAGS += -DCC_USING_HOTPATCH
|
|
endif
|
|
endif
|
|
|
|
# Test CFI features of binutils
|
|
cfi := $(call as-instr,.cfi_startproc\n.cfi_val_offset 15$(comma)-160\n.cfi_endproc,-DCONFIG_AS_CFI_VAL_OFFSET=1)
|
|
|
|
KBUILD_CFLAGS += -mbackchain -msoft-float $(cflags-y)
|
|
KBUILD_CFLAGS += -pipe -fno-strength-reduce -Wno-sign-compare
|
|
KBUILD_CFLAGS += -fno-asynchronous-unwind-tables $(cfi)
|
|
KBUILD_AFLAGS += $(aflags-y) $(cfi)
|
|
|
|
OBJCOPYFLAGS := -O binary
|
|
|
|
head-y := arch/s390/kernel/head.o
|
|
head-y += arch/s390/kernel/head64.o
|
|
|
|
# See arch/s390/Kbuild for content of core part of the kernel
|
|
core-y += arch/s390/
|
|
|
|
libs-y += arch/s390/lib/
|
|
drivers-y += drivers/s390/
|
|
|
|
# must be linked after kernel
|
|
drivers-$(CONFIG_OPROFILE) += arch/s390/oprofile/
|
|
|
|
boot := arch/s390/boot
|
|
tools := arch/s390/tools
|
|
|
|
all: image bzImage
|
|
|
|
install: vmlinux
|
|
$(Q)$(MAKE) $(build)=$(boot) $@
|
|
|
|
image bzImage: vmlinux
|
|
$(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
|
|
|
|
zfcpdump:
|
|
$(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
|
|
|
|
vdso_install:
|
|
$(Q)$(MAKE) $(build)=arch/$(ARCH)/kernel/vdso64 $@
|
|
$(Q)$(MAKE) $(build)=arch/$(ARCH)/kernel/vdso32 $@
|
|
|
|
archclean:
|
|
$(Q)$(MAKE) $(clean)=$(boot)
|
|
$(Q)$(MAKE) $(clean)=$(tools)
|
|
|
|
archprepare:
|
|
$(Q)$(MAKE) $(build)=$(tools) include/generated/facilities.h
|
|
$(Q)$(MAKE) $(build)=$(tools) include/generated/dis.h
|
|
|
|
# Don't use tabs in echo arguments
|
|
define archhelp
|
|
echo '* image - Kernel image for IPL ($(boot)/image)'
|
|
echo '* bzImage - Compressed kernel image for IPL ($(boot)/bzImage)'
|
|
echo ' install - Install kernel using'
|
|
echo ' (your) ~/bin/$(INSTALLKERNEL) or'
|
|
echo ' (distribution) /sbin/$(INSTALLKERNEL) or'
|
|
echo ' install to $$(INSTALL_PATH)'
|
|
endef
|