From: Raphael Gault <raphael.gault@arm.com> To: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Cc: jpoimboe@redhat.com, peterz@infradead.org, catalin.marinas@arm.com, will.deacon@arm.com, julien.thierry@arm.com, Raphael Gault <raphael.gault@arm.com> Subject: [RFC V3 00/18] objtool: Add support for arm64 Date: Mon, 24 Jun 2019 10:55:30 +0100 [thread overview] Message-ID: <20190624095548.8578-1-raphael.gault@arm.com> (raw) As of now, objtool only supports the x86_64 architecture but the groundwork has already been done in order to add support for other architectures without too much effort. This series of patches adds support for the arm64 architecture based on the Armv8.5 Architecture Reference Manual. Objtool will be a valuable tool to progress and provide more guarentees on live patching which is a work in progress for arm64. Once we have the base of objtool working the next steps will be to port Peter Z's uaccess validation for arm64. Changes since previous version: * Rebased on tip/master: Note that I had to re-expose the `struct alternative` using check.h because it is now used outside of check.c. * Reorder commits for a more coherent progression * Introduce GCC plugin to help detect switch-tables for arm64 This plugins could be improve: It plugs in after the RTL control flow graph passes but only extract information about the switch tables. I originally intended for it to introduce new code_label/note within the RTL representation in order to reference them and thus get the address of the branch instruction. However I did not manage to do it properly using gen_rtx_CODE_LABEL/emit_label_before/after. If anyone has some experience with RTL plugins I am all ears for advices. Raphael Gault (18): objtool: Add abstraction for computation of symbols offsets objtool: orc: Refactor ORC API for other architectures to implement. objtool: Move registers and control flow to arch-dependent code objtool: arm64: Add required implementation for supporting the aarch64 architecture in objtool. objtool: special: Adapt special section handling objtool: arm64: Adapt the stack frame checks for arm architecture objtool: Introduce INSN_UNKNOWN type objtool: Refactor switch-tables code to support other architectures gcc-plugins: objtool: Add plugin to detect switch table on arm64 objtool: arm64: Implement functions to add switch tables alternatives arm64: alternative: Mark .altinstr_replacement as containing executable instructions arm64: assembler: Add macro to annotate asm function having non standard stack-frame. arm64: sleep: Prevent stack frame warnings from objtool arm64: kvm: Annotate non-standard stack frame functions arm64: kernel: Add exception on kuser32 to prevent stack analysis arm64: crypto: Add exceptions for crypto object to prevent stack analysis arm64: kernel: Annotate non-standard stack frame functions objtool: arm64: Enable stack validation for arm64 arch/arm64/Kconfig | 1 + arch/arm64/crypto/Makefile | 3 + arch/arm64/include/asm/alternative.h | 2 +- arch/arm64/include/asm/assembler.h | 13 + arch/arm64/kernel/Makefile | 3 + arch/arm64/kernel/hyp-stub.S | 2 + arch/arm64/kernel/sleep.S | 4 + arch/arm64/kvm/hyp-init.S | 2 + arch/arm64/kvm/hyp/entry.S | 2 + scripts/Makefile.gcc-plugins | 2 + scripts/gcc-plugins/Kconfig | 9 + .../arm64_switch_table_detection_plugin.c | 58 + tools/objtool/Build | 2 - tools/objtool/arch.h | 21 +- tools/objtool/arch/arm64/Build | 8 + tools/objtool/arch/arm64/arch_special.c | 173 + tools/objtool/arch/arm64/bit_operations.c | 67 + tools/objtool/arch/arm64/decode.c | 2809 +++++++++++++++++ .../objtool/arch/arm64/include/arch_special.h | 52 + .../arch/arm64/include/asm/orc_types.h | 96 + .../arch/arm64/include/bit_operations.h | 24 + tools/objtool/arch/arm64/include/cfi.h | 74 + .../objtool/arch/arm64/include/insn_decode.h | 210 ++ tools/objtool/arch/arm64/orc_dump.c | 26 + tools/objtool/arch/arm64/orc_gen.c | 40 + tools/objtool/arch/x86/Build | 3 + tools/objtool/arch/x86/arch_special.c | 101 + tools/objtool/arch/x86/decode.c | 16 + tools/objtool/arch/x86/include/arch_special.h | 45 + tools/objtool/{ => arch/x86/include}/cfi.h | 0 tools/objtool/{ => arch/x86}/orc_dump.c | 4 +- tools/objtool/{ => arch/x86}/orc_gen.c | 104 +- tools/objtool/check.c | 309 +- tools/objtool/check.h | 10 + tools/objtool/elf.c | 3 +- tools/objtool/orc.h | 4 +- tools/objtool/special.c | 28 +- tools/objtool/special.h | 13 +- 38 files changed, 4119 insertions(+), 224 deletions(-) create mode 100644 scripts/gcc-plugins/arm64_switch_table_detection_plugin.c create mode 100644 tools/objtool/arch/arm64/Build create mode 100644 tools/objtool/arch/arm64/arch_special.c create mode 100644 tools/objtool/arch/arm64/bit_operations.c create mode 100644 tools/objtool/arch/arm64/decode.c create mode 100644 tools/objtool/arch/arm64/include/arch_special.h create mode 100644 tools/objtool/arch/arm64/include/asm/orc_types.h create mode 100644 tools/objtool/arch/arm64/include/bit_operations.h create mode 100644 tools/objtool/arch/arm64/include/cfi.h create mode 100644 tools/objtool/arch/arm64/include/insn_decode.h create mode 100644 tools/objtool/arch/arm64/orc_dump.c create mode 100644 tools/objtool/arch/arm64/orc_gen.c create mode 100644 tools/objtool/arch/x86/arch_special.c create mode 100644 tools/objtool/arch/x86/include/arch_special.h rename tools/objtool/{ => arch/x86/include}/cfi.h (100%) rename tools/objtool/{ => arch/x86}/orc_dump.c (98%) rename tools/objtool/{ => arch/x86}/orc_gen.c (66%) -- 2.17.1
WARNING: multiple messages have this Message-ID (diff)
From: Raphael Gault <raphael.gault@arm.com> To: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Cc: julien.thierry@arm.com, peterz@infradead.org, catalin.marinas@arm.com, will.deacon@arm.com, Raphael Gault <raphael.gault@arm.com>, jpoimboe@redhat.com Subject: [RFC V3 00/18] objtool: Add support for arm64 Date: Mon, 24 Jun 2019 10:55:30 +0100 [thread overview] Message-ID: <20190624095548.8578-1-raphael.gault@arm.com> (raw) As of now, objtool only supports the x86_64 architecture but the groundwork has already been done in order to add support for other architectures without too much effort. This series of patches adds support for the arm64 architecture based on the Armv8.5 Architecture Reference Manual. Objtool will be a valuable tool to progress and provide more guarentees on live patching which is a work in progress for arm64. Once we have the base of objtool working the next steps will be to port Peter Z's uaccess validation for arm64. Changes since previous version: * Rebased on tip/master: Note that I had to re-expose the `struct alternative` using check.h because it is now used outside of check.c. * Reorder commits for a more coherent progression * Introduce GCC plugin to help detect switch-tables for arm64 This plugins could be improve: It plugs in after the RTL control flow graph passes but only extract information about the switch tables. I originally intended for it to introduce new code_label/note within the RTL representation in order to reference them and thus get the address of the branch instruction. However I did not manage to do it properly using gen_rtx_CODE_LABEL/emit_label_before/after. If anyone has some experience with RTL plugins I am all ears for advices. Raphael Gault (18): objtool: Add abstraction for computation of symbols offsets objtool: orc: Refactor ORC API for other architectures to implement. objtool: Move registers and control flow to arch-dependent code objtool: arm64: Add required implementation for supporting the aarch64 architecture in objtool. objtool: special: Adapt special section handling objtool: arm64: Adapt the stack frame checks for arm architecture objtool: Introduce INSN_UNKNOWN type objtool: Refactor switch-tables code to support other architectures gcc-plugins: objtool: Add plugin to detect switch table on arm64 objtool: arm64: Implement functions to add switch tables alternatives arm64: alternative: Mark .altinstr_replacement as containing executable instructions arm64: assembler: Add macro to annotate asm function having non standard stack-frame. arm64: sleep: Prevent stack frame warnings from objtool arm64: kvm: Annotate non-standard stack frame functions arm64: kernel: Add exception on kuser32 to prevent stack analysis arm64: crypto: Add exceptions for crypto object to prevent stack analysis arm64: kernel: Annotate non-standard stack frame functions objtool: arm64: Enable stack validation for arm64 arch/arm64/Kconfig | 1 + arch/arm64/crypto/Makefile | 3 + arch/arm64/include/asm/alternative.h | 2 +- arch/arm64/include/asm/assembler.h | 13 + arch/arm64/kernel/Makefile | 3 + arch/arm64/kernel/hyp-stub.S | 2 + arch/arm64/kernel/sleep.S | 4 + arch/arm64/kvm/hyp-init.S | 2 + arch/arm64/kvm/hyp/entry.S | 2 + scripts/Makefile.gcc-plugins | 2 + scripts/gcc-plugins/Kconfig | 9 + .../arm64_switch_table_detection_plugin.c | 58 + tools/objtool/Build | 2 - tools/objtool/arch.h | 21 +- tools/objtool/arch/arm64/Build | 8 + tools/objtool/arch/arm64/arch_special.c | 173 + tools/objtool/arch/arm64/bit_operations.c | 67 + tools/objtool/arch/arm64/decode.c | 2809 +++++++++++++++++ .../objtool/arch/arm64/include/arch_special.h | 52 + .../arch/arm64/include/asm/orc_types.h | 96 + .../arch/arm64/include/bit_operations.h | 24 + tools/objtool/arch/arm64/include/cfi.h | 74 + .../objtool/arch/arm64/include/insn_decode.h | 210 ++ tools/objtool/arch/arm64/orc_dump.c | 26 + tools/objtool/arch/arm64/orc_gen.c | 40 + tools/objtool/arch/x86/Build | 3 + tools/objtool/arch/x86/arch_special.c | 101 + tools/objtool/arch/x86/decode.c | 16 + tools/objtool/arch/x86/include/arch_special.h | 45 + tools/objtool/{ => arch/x86/include}/cfi.h | 0 tools/objtool/{ => arch/x86}/orc_dump.c | 4 +- tools/objtool/{ => arch/x86}/orc_gen.c | 104 +- tools/objtool/check.c | 309 +- tools/objtool/check.h | 10 + tools/objtool/elf.c | 3 +- tools/objtool/orc.h | 4 +- tools/objtool/special.c | 28 +- tools/objtool/special.h | 13 +- 38 files changed, 4119 insertions(+), 224 deletions(-) create mode 100644 scripts/gcc-plugins/arm64_switch_table_detection_plugin.c create mode 100644 tools/objtool/arch/arm64/Build create mode 100644 tools/objtool/arch/arm64/arch_special.c create mode 100644 tools/objtool/arch/arm64/bit_operations.c create mode 100644 tools/objtool/arch/arm64/decode.c create mode 100644 tools/objtool/arch/arm64/include/arch_special.h create mode 100644 tools/objtool/arch/arm64/include/asm/orc_types.h create mode 100644 tools/objtool/arch/arm64/include/bit_operations.h create mode 100644 tools/objtool/arch/arm64/include/cfi.h create mode 100644 tools/objtool/arch/arm64/include/insn_decode.h create mode 100644 tools/objtool/arch/arm64/orc_dump.c create mode 100644 tools/objtool/arch/arm64/orc_gen.c create mode 100644 tools/objtool/arch/x86/arch_special.c create mode 100644 tools/objtool/arch/x86/include/arch_special.h rename tools/objtool/{ => arch/x86/include}/cfi.h (100%) rename tools/objtool/{ => arch/x86}/orc_dump.c (98%) rename tools/objtool/{ => arch/x86}/orc_gen.c (66%) -- 2.17.1 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next reply other threads:[~2019-06-24 9:56 UTC|newest] Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-06-24 9:55 Raphael Gault [this message] 2019-06-24 9:55 ` [RFC V3 00/18] objtool: Add support for arm64 Raphael Gault 2019-06-24 9:55 ` [RFC V3 01/18] objtool: Add abstraction for computation of symbols offsets Raphael Gault 2019-06-24 9:55 ` Raphael Gault 2019-06-24 9:55 ` [RFC V3 02/18] objtool: orc: Refactor ORC API for other architectures to implement Raphael Gault 2019-06-24 9:55 ` Raphael Gault 2019-06-24 9:55 ` [RFC V3 03/18] objtool: Move registers and control flow to arch-dependent code Raphael Gault 2019-06-24 9:55 ` Raphael Gault 2019-06-24 9:55 ` [RFC V3 04/18] objtool: arm64: Add required implementation for supporting the aarch64 architecture in objtool Raphael Gault 2019-06-24 9:55 ` Raphael Gault 2019-06-24 9:55 ` [RFC V3 05/18] objtool: special: Adapt special section handling Raphael Gault 2019-06-24 9:55 ` Raphael Gault 2019-06-24 9:55 ` [RFC V3 06/18] objtool: arm64: Adapt the stack frame checks for arm architecture Raphael Gault 2019-06-24 9:55 ` Raphael Gault 2019-06-24 9:55 ` [RFC V3 07/18] objtool: Introduce INSN_UNKNOWN type Raphael Gault 2019-06-24 9:55 ` Raphael Gault 2019-06-24 9:55 ` [RFC V3 08/18] objtool: Refactor switch-tables code to support other architectures Raphael Gault 2019-06-24 9:55 ` Raphael Gault 2019-06-24 9:55 ` [RFC V3 09/18] gcc-plugins: objtool: Add plugin to detect switch table on arm64 Raphael Gault 2019-06-24 9:55 ` Raphael Gault 2019-06-24 9:55 ` [RFC V3 10/18] objtool: arm64: Implement functions to add switch tables alternatives Raphael Gault 2019-06-24 9:55 ` Raphael Gault 2019-06-24 9:55 ` [RFC V3 11/18] arm64: alternative: Mark .altinstr_replacement as containing executable instructions Raphael Gault 2019-06-24 9:55 ` Raphael Gault 2019-07-01 14:51 ` Catalin Marinas 2019-07-01 14:51 ` Catalin Marinas 2019-06-24 9:55 ` [RFC V3 12/18] arm64: assembler: Add macro to annotate asm function having non standard stack-frame Raphael Gault 2019-06-24 9:55 ` Raphael Gault 2019-07-01 14:40 ` Catalin Marinas 2019-07-01 14:40 ` Catalin Marinas 2019-07-02 9:49 ` Raphael Gault 2019-07-02 9:49 ` Raphael Gault 2019-06-24 9:55 ` [RFC V3 13/18] arm64: sleep: Prevent stack frame warnings from objtool Raphael Gault 2019-06-24 9:55 ` Raphael Gault 2019-06-24 9:55 ` [RFC V3 14/18] arm64: kvm: Annotate non-standard stack frame functions Raphael Gault 2019-06-24 9:55 ` Raphael Gault 2019-06-24 9:55 ` [RFC V3 15/18] arm64: kernel: Add exception on kuser32 to prevent stack analysis Raphael Gault 2019-06-24 9:55 ` Raphael Gault 2019-06-24 9:55 ` [RFC V3 16/18] arm64: crypto: Add exceptions for crypto object " Raphael Gault 2019-06-24 9:55 ` Raphael Gault 2019-06-24 9:55 ` [RFC V3 17/18] arm64: kernel: Annotate non-standard stack frame functions Raphael Gault 2019-06-24 9:55 ` Raphael Gault 2019-06-24 9:55 ` [RFC V3 18/18] objtool: arm64: Enable stack validation for arm64 Raphael Gault 2019-06-24 9:55 ` Raphael Gault 2019-07-10 7:31 ` [RFC V3 00/18] objtool: Add support " Raphael Gault 2019-07-10 7:31 ` Raphael Gault 2019-07-10 14:33 ` Josh Poimboeuf 2019-07-10 14:33 ` Josh Poimboeuf
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20190624095548.8578-1-raphael.gault@arm.com \ --to=raphael.gault@arm.com \ --cc=catalin.marinas@arm.com \ --cc=jpoimboe@redhat.com \ --cc=julien.thierry@arm.com \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-kernel@vger.kernel.org \ --cc=peterz@infradead.org \ --cc=will.deacon@arm.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.