Re: [RFC PATCH v1 00/23] LoongArch: Add objtool and ORC unwinder support

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi, Ruoyao

On 06/20/2023 04:15 PM, Xi Ruoyao wrote:
It looks like only 19 patches are successfully delivered, out of 23.
I'm sorry, somehow the patchset didn't reach the mailing list. Probably
due to the sending limit being reached.


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?
After the following series of patches [1], the elfutils test results
are passed.

[1]: https://sourceware.org/pipermail/elfutils-devel/2023q2/006107.html

Thanks,
Youling

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@xxxxxxxxxxxxxxxxxxx/#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






[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux Kernel]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux SCSI]

  Powered by Linux