[v6,0/8] Add objtool, orc and livepatching support for LoongArch

Message ID 20240130061730.21118-1-yangtiezhu@loongson.cn
Headers
Series Add objtool, orc and livepatching support for LoongArch |

Message

Tiezhu Yang Jan. 30, 2024, 6:17 a.m. UTC
  This version is based on 6.8-rc2, tested with the latest upstream
gcc and binutils (20240129).

v6:
  -- Add "-mno-relax" option
  -- Remove "-fno-optimize-sibling-calls" option
  -- Remove "-falign-functions=4 -falign-labels=4" options
  -- Remove "#ifdef CONFIG_CPU_HAS_LBT" in lbt.S
  -- Remove patch "objtool: Check local label about sibling call"
  -- Silence the objtool warnings under CONFIG_FUNCTION_TRACER
  -- Add livepatching support and fix the problems when testing

Tiezhu Yang (8):
  objtool/LoongArch: Enable objtool to be built
  objtool/LoongArch: Implement instruction decoder
  objtool/x86: Separate arch-specific and generic parts
  objtool/LoongArch: Enable orc to be built
  objtool: Check local label in add_dead_ends()
  objtool: Check local label in read_unwind_hints()
  LoongArch: Add ORC stack unwinder support
  LoongArch: Add kernel livepatching support

 arch/loongarch/Kconfig                        |   6 +
 arch/loongarch/Kconfig.debug                  |  11 +
 arch/loongarch/Makefile                       |  23 +-
 arch/loongarch/include/asm/Kbuild             |   2 +
 arch/loongarch/include/asm/bug.h              |   1 +
 arch/loongarch/include/asm/exception.h        |   2 +
 arch/loongarch/include/asm/module.h           |   7 +
 arch/loongarch/include/asm/orc_header.h       |  18 +
 arch/loongarch/include/asm/orc_lookup.h       |  31 ++
 arch/loongarch/include/asm/orc_types.h        |  58 ++
 arch/loongarch/include/asm/stackframe.h       |   3 +
 arch/loongarch/include/asm/thread_info.h      |   2 +
 arch/loongarch/include/asm/unwind.h           |  20 +-
 arch/loongarch/include/asm/unwind_hints.h     |  28 +
 arch/loongarch/kernel/Makefile                |   4 +
 arch/loongarch/kernel/entry.S                 |   5 +
 arch/loongarch/kernel/fpu.S                   |   7 +
 arch/loongarch/kernel/genex.S                 |   6 +
 arch/loongarch/kernel/lbt.S                   |   2 +
 arch/loongarch/kernel/mcount_dyn.S            |   6 +
 arch/loongarch/kernel/module.c                |  22 +-
 arch/loongarch/kernel/relocate_kernel.S       |   8 +-
 arch/loongarch/kernel/rethook_trampoline.S    |   1 +
 arch/loongarch/kernel/setup.c                 |   2 +
 arch/loongarch/kernel/stacktrace.c            |  42 ++
 arch/loongarch/kernel/traps.c                 |  42 +-
 arch/loongarch/kernel/unwind_orc.c            | 516 ++++++++++++++++++
 arch/loongarch/kernel/vmlinux.lds.S           |   3 +
 arch/loongarch/kvm/switch.S                   |   9 +-
 arch/loongarch/lib/clear_user.S               |   2 +
 arch/loongarch/lib/copy_user.S                |   2 +
 arch/loongarch/lib/memcpy.S                   |   2 +
 arch/loongarch/lib/memset.S                   |   2 +
 arch/loongarch/mm/tlb.c                       |  27 +-
 arch/loongarch/mm/tlbex.S                     |   9 +
 arch/loongarch/vdso/Makefile                  |   1 +
 include/linux/compiler.h                      |   9 +
 scripts/Makefile                              |   7 +-
 tools/arch/loongarch/include/asm/inst.h       | 161 ++++++
 tools/arch/loongarch/include/asm/orc_types.h  |  58 ++
 tools/include/linux/bitops.h                  |  11 +
 tools/objtool/Makefile                        |   4 +
 tools/objtool/arch/loongarch/Build            |   3 +
 tools/objtool/arch/loongarch/decode.c         | 356 ++++++++++++
 .../arch/loongarch/include/arch/cfi_regs.h    |  22 +
 .../objtool/arch/loongarch/include/arch/elf.h |  30 +
 .../arch/loongarch/include/arch/special.h     |  33 ++
 tools/objtool/arch/loongarch/orc.c            | 171 ++++++
 tools/objtool/arch/loongarch/special.c        |  15 +
 tools/objtool/arch/x86/Build                  |   1 +
 tools/objtool/arch/x86/orc.c                  | 188 +++++++
 tools/objtool/check.c                         |  52 +-
 tools/objtool/include/objtool/elf.h           |   1 +
 tools/objtool/include/objtool/orc.h           |  14 +
 tools/objtool/orc_dump.c                      |  69 +--
 tools/objtool/orc_gen.c                       | 113 +---
 56 files changed, 2011 insertions(+), 239 deletions(-)
 create mode 100644 arch/loongarch/include/asm/orc_header.h
 create mode 100644 arch/loongarch/include/asm/orc_lookup.h
 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
 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/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/include/objtool/orc.h
  

Comments

Huacai Chen Feb. 7, 2024, 1:27 p.m. UTC | #1
Hi, Josh and Peter,

This version looks good to me now. Should this series go through the
objtool tree or the loongarch tree? If it should go through the
objtool tree, then please apply the first 6 patches with

Acked-by: Huacai Chen <chenhuacai@loongson.cn>

And if it can go through the loongarch tree, I will apply the whole 8
patches. Thanks.

Huacai

On Tue, Jan 30, 2024 at 2:17 PM Tiezhu Yang <yangtiezhu@loongson.cn> wrote:
>
> This version is based on 6.8-rc2, tested with the latest upstream
> gcc and binutils (20240129).
>
> v6:
>   -- Add "-mno-relax" option
>   -- Remove "-fno-optimize-sibling-calls" option
>   -- Remove "-falign-functions=4 -falign-labels=4" options
>   -- Remove "#ifdef CONFIG_CPU_HAS_LBT" in lbt.S
>   -- Remove patch "objtool: Check local label about sibling call"
>   -- Silence the objtool warnings under CONFIG_FUNCTION_TRACER
>   -- Add livepatching support and fix the problems when testing
>
> Tiezhu Yang (8):
>   objtool/LoongArch: Enable objtool to be built
>   objtool/LoongArch: Implement instruction decoder
>   objtool/x86: Separate arch-specific and generic parts
>   objtool/LoongArch: Enable orc to be built
>   objtool: Check local label in add_dead_ends()
>   objtool: Check local label in read_unwind_hints()
>   LoongArch: Add ORC stack unwinder support
>   LoongArch: Add kernel livepatching support
>
>  arch/loongarch/Kconfig                        |   6 +
>  arch/loongarch/Kconfig.debug                  |  11 +
>  arch/loongarch/Makefile                       |  23 +-
>  arch/loongarch/include/asm/Kbuild             |   2 +
>  arch/loongarch/include/asm/bug.h              |   1 +
>  arch/loongarch/include/asm/exception.h        |   2 +
>  arch/loongarch/include/asm/module.h           |   7 +
>  arch/loongarch/include/asm/orc_header.h       |  18 +
>  arch/loongarch/include/asm/orc_lookup.h       |  31 ++
>  arch/loongarch/include/asm/orc_types.h        |  58 ++
>  arch/loongarch/include/asm/stackframe.h       |   3 +
>  arch/loongarch/include/asm/thread_info.h      |   2 +
>  arch/loongarch/include/asm/unwind.h           |  20 +-
>  arch/loongarch/include/asm/unwind_hints.h     |  28 +
>  arch/loongarch/kernel/Makefile                |   4 +
>  arch/loongarch/kernel/entry.S                 |   5 +
>  arch/loongarch/kernel/fpu.S                   |   7 +
>  arch/loongarch/kernel/genex.S                 |   6 +
>  arch/loongarch/kernel/lbt.S                   |   2 +
>  arch/loongarch/kernel/mcount_dyn.S            |   6 +
>  arch/loongarch/kernel/module.c                |  22 +-
>  arch/loongarch/kernel/relocate_kernel.S       |   8 +-
>  arch/loongarch/kernel/rethook_trampoline.S    |   1 +
>  arch/loongarch/kernel/setup.c                 |   2 +
>  arch/loongarch/kernel/stacktrace.c            |  42 ++
>  arch/loongarch/kernel/traps.c                 |  42 +-
>  arch/loongarch/kernel/unwind_orc.c            | 516 ++++++++++++++++++
>  arch/loongarch/kernel/vmlinux.lds.S           |   3 +
>  arch/loongarch/kvm/switch.S                   |   9 +-
>  arch/loongarch/lib/clear_user.S               |   2 +
>  arch/loongarch/lib/copy_user.S                |   2 +
>  arch/loongarch/lib/memcpy.S                   |   2 +
>  arch/loongarch/lib/memset.S                   |   2 +
>  arch/loongarch/mm/tlb.c                       |  27 +-
>  arch/loongarch/mm/tlbex.S                     |   9 +
>  arch/loongarch/vdso/Makefile                  |   1 +
>  include/linux/compiler.h                      |   9 +
>  scripts/Makefile                              |   7 +-
>  tools/arch/loongarch/include/asm/inst.h       | 161 ++++++
>  tools/arch/loongarch/include/asm/orc_types.h  |  58 ++
>  tools/include/linux/bitops.h                  |  11 +
>  tools/objtool/Makefile                        |   4 +
>  tools/objtool/arch/loongarch/Build            |   3 +
>  tools/objtool/arch/loongarch/decode.c         | 356 ++++++++++++
>  .../arch/loongarch/include/arch/cfi_regs.h    |  22 +
>  .../objtool/arch/loongarch/include/arch/elf.h |  30 +
>  .../arch/loongarch/include/arch/special.h     |  33 ++
>  tools/objtool/arch/loongarch/orc.c            | 171 ++++++
>  tools/objtool/arch/loongarch/special.c        |  15 +
>  tools/objtool/arch/x86/Build                  |   1 +
>  tools/objtool/arch/x86/orc.c                  | 188 +++++++
>  tools/objtool/check.c                         |  52 +-
>  tools/objtool/include/objtool/elf.h           |   1 +
>  tools/objtool/include/objtool/orc.h           |  14 +
>  tools/objtool/orc_dump.c                      |  69 +--
>  tools/objtool/orc_gen.c                       | 113 +---
>  56 files changed, 2011 insertions(+), 239 deletions(-)
>  create mode 100644 arch/loongarch/include/asm/orc_header.h
>  create mode 100644 arch/loongarch/include/asm/orc_lookup.h
>  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
>  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/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/include/objtool/orc.h
>
> --
> 2.42.0
>