Live Patching
 help / color / mirror / Atom feed
From: Xi Ruoyao <xry111@xry111.site>
To: Youling Tang <tangyouling@loongson.cn>,
	Josh Poimboeuf <jpoimboe@kernel.org>,
	Peter Zijlstra <peterz@infradead.org>,
	Huacai Chen <chenhuacai@kernel.org>,
	madvenka@linux.microsoft.com
Cc: chenzhongjin@huawei.com, WANG Xuerui <kernel@xen0n.name>,
	live-patching@vger.kernel.org, linux-kernel@vger.kernel.org,
	loongarch@lists.linux.dev, tangyouling00@gmail.com,
	youling.tang@outlook.com
Subject: Re: [RFC PATCH v1 00/23] LoongArch: Add objtool and ORC unwinder support
Date: Tue, 20 Jun 2023 16:15:52 +0800	[thread overview]
Message-ID: <bed4d386c16701d14a2ea395edeb0368cb3d04ad.camel@xry111.site> (raw)
In-Reply-To: <1687247209-31676-1-git-send-email-tangyouling@loongson.cn>

It looks like only 19 patches are successfully delivered, out of 23.

And AFAIK objtool needs libelf from elfutils, and the LoongArch support
in elfutils is not complete (there are about ten failures in the test
suite as at the latest 0.189 release).  Do we need to add more LoongArch
support into libelf and/or declare a minimal needed libelf version for
LoongArch objtool?

On Tue, 2023-06-20 at 15:46 +0800, Youling Tang wrote:
> This series of patches adds objtool and ORC unwinder support for
> LoongArch.
> 
> Patch 01 - 07 are from "Madhavan T. Venkataraman" [1] with minor
> code tweaks. The "objtool: Reorganize ORC types" patch was not
> added, because LoongArch cannot share `strcut orc_entry`, it also
> needs to include ra_offset and ra_reg.
> 
> Since the changes in Patch 01 - 08 in [1] are architecture-
> independent,
> it might be better if they could be separated separately from the
> series
> of patches.
> 
> ORC unwinder can get a reliable stack trace, which provides a
> prerequisite
> for the subsequent addition of livepatch support.
> 
> 
> Instruction decoder
> ===================
> 
> To do this, an instruction decoder needs to be implemented. I have
> implemented
> a simple, table-driven decoder for LoongArch. Only a subset of the
> instructions
> needs to be fully decoded for this purpose:
> 
>         - Load-Store instructions
>         - Add instructions
>         - Branch instructions
>         - Call instructions
>         - Return instructions
>         - Stack pointer authentication instruction
> 
> 
> Unwind hints
> ============
> 
> Unwind hints are collected in a special section. Objtool converts
> unwind hints
> to ORC data. The unwinder processes unwind hints to handle special
> cases
> mentioned above.
> 
> 
> ORC unwinder
> ============
> 
> Before vmlinux created, we check all metadata, find the stack
> operation,
> note stack state and create orc data. Objtool insert two sections into
> vmlinux. '.orc_unwind_ip' and '.orc_unwind'. (For modules, insert
> '.rela.orc_unwind_ip' to relocate '.orc_unwind_ip'.) Each insn has
> only
> one stack state in .orc_unwind and orc_unwind_ip hint its pc address.
> Through unwinding orc data, we can get stack info both kernel and
> module.
> 
> 
> This is a series of RFC patches, which may require long-term
> discussions
> and revisions. It is not based on the latest code but based on 6.3-
> rc3.
> Any ideas or suggestions are welcome.
> 
> base-commit: e8d018dd0257f744ca50a729e3d042cf2ec9da65 (Linux 6.3-rc3)
> 
> Link:
> [1]:
> https://lore.kernel.org/lkml/20230202074036.507249-1-madvenka@linux.microsoft.com/#r
> 
> Madhavan T. Venkataraman (7):
>   objtool: Reorganize CFI code
>   objtool: Reorganize instruction-related code
>   objtool: Move decode_instructions() to a separate file
>   objtool: Reorganize Unwind hint code
>   objtool: Reorganize ORC code
>   objtool: Reorganize ORC kernel code
>   objtool: Introduce STATIC_CHECK
> 
> Youling Tang (16):
>   tools: LoongArch: Copy inst.h and asm.h to tools
>   objtool: LoongArch: Add base definition for LoongArch
>   objtool: LoongArch: Implement decoder
>   objtool: Add annotate_reachable() for objtools
>   LoongArch: bug: Add reachable annotation to warning macros
>   objtool: Add next member in struct reloc
>   objtool: Add orc_print_dump() package
>   objtool: Add ORC support for LoongArch
>   LoongArch: Add ORC unwinder support
>   LoongArch: Support R_LARCH_32_PCREL relocation type in kernel module
>   LoongArch: Fix fpu.S objtool warning
>   LoongArch: Annotate unwind_hint
>   LoongArch: Move some data definitions into the .data section
>   objtool: Add arch-specific "noreturn" function handling
>   objtool: Make update_cfi_state() arch-specific function
>   LoongArch: objtool: Mark non-standard object files and directories
> 
>  arch/loongarch/Kconfig                        |   2 +
>  arch/loongarch/Kconfig.debug                  |  11 +
>  arch/loongarch/Makefile                       |   4 +
>  arch/loongarch/include/asm/bug.h              |   1 +
>  arch/loongarch/include/asm/module.h           |   7 +
>  arch/loongarch/include/asm/orc_types.h        |  58 ++
>  arch/loongarch/include/asm/stackframe.h       |   3 +
>  arch/loongarch/include/asm/unwind.h           |  17 +-
>  arch/loongarch/include/asm/unwind_hints.h     | 110 +++
>  arch/loongarch/kernel/Makefile                |   3 +
>  arch/loongarch/kernel/entry.S                 |   2 +
>  arch/loongarch/kernel/fpu.S                   |  11 +-
>  arch/loongarch/kernel/genex.S                 |   2 +
>  arch/loongarch/kernel/head.S                  |   1 +
>  arch/loongarch/kernel/module.c                |  21 +-
>  arch/loongarch/kernel/relocate_kernel.S       |  12 +-
>  arch/loongarch/kernel/setup.c                 |   2 +
>  arch/loongarch/kernel/stacktrace.c            |   1 +
>  arch/loongarch/kernel/unwind_orc.c            | 301 +++++++++
>  arch/loongarch/kernel/vmlinux.lds.S           |   3 +
>  arch/loongarch/power/Makefile                 |   2 +
>  arch/loongarch/vdso/Makefile                  |   2 +
>  arch/x86/include/asm/unwind.h                 |   5 -
>  arch/x86/include/asm/unwind_hints.h           |  86 +++
>  arch/x86/kernel/module.c                      |   7 +-
>  arch/x86/kernel/unwind_orc.c                  | 268 +-------
>  arch/x86/kernel/vmlinux.lds.S                 |   2 +-
>  .../asm => include/asm-generic}/orc_lookup.h  |  43 ++
>  include/linux/compiler.h                      |   9 +
>  include/linux/objtool.h                       |  70 --
>  kernel/Makefile                               |   2 +
>  kernel/orc_lookup.c                           | 261 ++++++++
>  scripts/Makefile                              |   5 +-
>  tools/arch/loongarch/include/asm/asm.h        | 201 ++++++
>  tools/arch/loongarch/include/asm/inst.h       | 629
> ++++++++++++++++++
>  tools/arch/loongarch/include/asm/orc_types.h  |  58 ++
>  .../arch/loongarch/include/asm/unwind_hints.h | 110 +++
>  tools/arch/x86/include/asm/unwind_hints.h     | 160 +++++
>  tools/include/linux/bitops.h                  |  10 +
>  tools/include/linux/objtool.h                 |  70 --
>  tools/objtool/Build                           |   8 +-
>  tools/objtool/Makefile                        |   9 +-
>  tools/objtool/arch/loongarch/Build            |   3 +
>  tools/objtool/arch/loongarch/decode.c         | 352 ++++++++++
>  .../arch/loongarch/include/arch/cfi_regs.h    |  14 +
>  .../objtool/arch/loongarch/include/arch/elf.h |  15 +
>  .../arch/loongarch/include/arch/special.h     |  21 +
>  tools/objtool/arch/loongarch/orc.c            | 155 +++++
>  tools/objtool/arch/loongarch/special.c        |  25 +
>  tools/objtool/arch/powerpc/special.c          |   3 +
>  tools/objtool/arch/x86/Build                  |   1 +
>  tools/objtool/arch/x86/include/arch/elf.h     |   1 +
>  tools/objtool/arch/x86/orc.c                  | 164 +++++
>  tools/objtool/arch/x86/special.c              |   4 +
>  tools/objtool/cfi.c                           | 108 +++
>  tools/objtool/check.c                         | 568 +---------------
>  tools/objtool/decode.c                        | 136 ++++
>  tools/objtool/elf.c                           |  11 +-
>  tools/objtool/include/objtool/arch.h          |   3 +
>  tools/objtool/include/objtool/cfi.h           |  12 +
>  tools/objtool/include/objtool/check.h         |  97 +--
>  tools/objtool/include/objtool/elf.h           |   1 +
>  tools/objtool/include/objtool/insn.h          | 166 +++++
>  tools/objtool/include/objtool/objtool.h       |   3 +
>  tools/objtool/include/objtool/orc.h           |  15 +
>  tools/objtool/include/objtool/special.h       |   3 +
>  tools/objtool/insn.c                          | 195 ++++++
>  tools/objtool/orc_dump.c                      |  67 +-
>  tools/objtool/orc_gen.c                       |  79 +--
>  tools/objtool/sync-check.sh                   |   9 +
>  tools/objtool/unwind_hints.c                  | 107 +++
>  71 files changed, 3721 insertions(+), 1206 deletions(-)
>  create mode 100644 arch/loongarch/include/asm/orc_types.h
>  create mode 100644 arch/loongarch/include/asm/unwind_hints.h
>  create mode 100644 arch/loongarch/kernel/unwind_orc.c
>  rename {arch/x86/include/asm => include/asm-generic}/orc_lookup.h
> (50%)
>  create mode 100644 kernel/orc_lookup.c
>  create mode 100644 tools/arch/loongarch/include/asm/asm.h
>  create mode 100644 tools/arch/loongarch/include/asm/inst.h
>  create mode 100644 tools/arch/loongarch/include/asm/orc_types.h
>  create mode 100644 tools/arch/loongarch/include/asm/unwind_hints.h
>  create mode 100644 tools/arch/x86/include/asm/unwind_hints.h
>  create mode 100644 tools/objtool/arch/loongarch/Build
>  create mode 100644 tools/objtool/arch/loongarch/decode.c
>  create mode 100644
> tools/objtool/arch/loongarch/include/arch/cfi_regs.h
>  create mode 100644 tools/objtool/arch/loongarch/include/arch/elf.h
>  create mode 100644
> tools/objtool/arch/loongarch/include/arch/special.h
>  create mode 100644 tools/objtool/arch/loongarch/orc.c
>  create mode 100644 tools/objtool/arch/loongarch/special.c
>  create mode 100644 tools/objtool/arch/x86/orc.c
>  create mode 100644 tools/objtool/cfi.c
>  create mode 100644 tools/objtool/decode.c
>  create mode 100644 tools/objtool/include/objtool/insn.h
>  create mode 100644 tools/objtool/include/objtool/orc.h
>  create mode 100644 tools/objtool/insn.c
>  create mode 100644 tools/objtool/unwind_hints.c
> 

-- 
Xi Ruoyao <xry111@xry111.site>
School of Aerospace Science and Technology, Xidian University

  parent reply	other threads:[~2023-06-20  8:16 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-06-20  7:46 [RFC PATCH v1 00/23] LoongArch: Add objtool and ORC unwinder support Youling Tang
2023-06-20  7:46 ` [RFC PATCH v1 01/23] objtool: Reorganize CFI code Youling Tang
2023-06-20  7:46 ` [RFC PATCH v1 02/23] objtool: Reorganize instruction-related code Youling Tang
2023-06-20  7:46 ` [RFC PATCH v1 03/23] objtool: Move decode_instructions() to a separate file Youling Tang
2023-06-20  7:46 ` [RFC PATCH v1 04/23] objtool: Reorganize Unwind hint code Youling Tang
2023-06-20  8:15 ` Xi Ruoyao [this message]
2023-06-20  8:29   ` [RFC PATCH v1 00/23] LoongArch: Add objtool and ORC unwinder support Youling Tang
2023-06-20  8:32     ` Xi Ruoyao
2023-06-20  8:38     ` Peter Zijlstra
2023-06-20  8:48       ` Xi Ruoyao
2023-06-20  8:49       ` Youling Tang
2023-06-20  8:42 ` Peter Zijlstra

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=bed4d386c16701d14a2ea395edeb0368cb3d04ad.camel@xry111.site \
    --to=xry111@xry111.site \
    --cc=chenhuacai@kernel.org \
    --cc=chenzhongjin@huawei.com \
    --cc=jpoimboe@kernel.org \
    --cc=kernel@xen0n.name \
    --cc=linux-kernel@vger.kernel.org \
    --cc=live-patching@vger.kernel.org \
    --cc=loongarch@lists.linux.dev \
    --cc=madvenka@linux.microsoft.com \
    --cc=peterz@infradead.org \
    --cc=tangyouling00@gmail.com \
    --cc=tangyouling@loongson.cn \
    --cc=youling.tang@outlook.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: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox