arm64 live patching
From: | Torsten Duwe <duwe-AT-lst.de> | |
To: | Catalin Marinas <catalin.marinas-AT-arm.com>, Will Deacon <will.deacon-AT-arm.com>, takahiro.akashi-AT-linaro.org, Jungseok Lee <jungseoklee85-AT-gmail.com>, Arnd Bergmann <arnd-AT-arndb.de>, Li Bin <huawei.libin-AT-huawei.com> | |
Subject: | [PATCH v3 0/2] arm64 live patching | |
Date: | Thu, 11 Aug 2016 18:34:51 +0200 (CEST) | |
Message-ID: | <20160811163451.D455C68C43@newverein.lst.de> | |
Cc: | Steven Rostedt <rostedt-AT-goodmis.org>, Ingo Molnar <mingo-AT-redhat.com>, Christopher Li <sparse-AT-chrisli.org>, Jiri Kosina <jikos-AT-kernel.org>, andrew.wafaa-AT-arm.com, linux-arm-kernel-AT-lists.infradead.org, linux-kernel-AT-vger.kernel.org, live-patching-AT-vger.kernel.org, linux-arch-AT-vger.kernel.org, linux-sparse-AT-vger.kernel.org |
V3, including suggestions from the replies and 2 fixes. Reminder: make sure you have a prolog-pad gcc, and this in your top level Makefile: ifdef CONFIG_LIVEPATCH KBUILD_CFLAGS += $(call cc-option,-fno-ipa-ra) endif Tested with v4.8-rc1 + gcc-6.1 Changes since v2: * Do not skip initial NOP conversion for CC_USING_PROLOG_PAD, in other words: don't introduce new #ifdefs into generic code. (as requested by Steven Rostedt after my intermediate suggestion) Instead, check in arm64 whether a call to mcount is to be NOPed, and be strict again about the expected "old" instructions. * issue a warning should the compiler not know about -fprolog-pad= (as suggested by Josh Poimboeuf) Only strip the compiler flag proper, not the cpp flag, for critical files. * fix thinko / bummer in live patch return address change detection. Skip the graph caller if the addresses are _not_ equal! Changes since v1: * instead of a comment "should be CC_USING_PROLOG_PAD": do it. CC_FLAGS_FTRACE holds it now, and the IPA disabler has become a separate issue (see above). Torsten Duwe (2): arm64: implement FTRACE_WITH_REGS arm64: implement live patching arch/arm64/Kconfig | 4 ++ arch/arm64/Makefile | 9 ++++ arch/arm64/include/asm/ftrace.h | 8 +++ arch/arm64/include/asm/livepatch.h | 37 ++++++++++++++ arch/arm64/kernel/Makefile | 6 +-- arch/arm64/kernel/entry-ftrace.S | 102 +++++++++++++++++++++++++++++++++++++ arch/arm64/kernel/ftrace.c | 45 ++++++++++++++-- include/asm-generic/vmlinux.lds.h | 2 +- include/linux/compiler.h | 4 ++ 9 files changed, 209 insertions(+), 8 deletions(-) create mode 100644 arch/arm64/include/asm/livepatch.h -- 2.6.2