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

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

Message

Tiezhu Yang Nov. 29, 2023, 1:06 p.m. UTC
  This version is based on 6.7-rc3, tested with the latest upstream
gcc and binutils (20231127).

v5:
  -- Fix the partial backtrace about irq stack
  -- Check on_stack() again after get_stack_info()
  -- Silence the orc warning about handle_syscall
  -- Silence the objtool warnings if CONFIG_CPU_HAS_LBT=y
  -- Update the commit message about objdump and readelf info

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 about sibling call
  objtool: Check local label in add_dead_ends()
  objtool: Check local label in read_unwind_hints()
  LoongArch: Add ORC stack unwinder support

 arch/loongarch/Kconfig                        |   2 +
 arch/loongarch/Kconfig.debug                  |  11 +
 arch/loongarch/Makefile                       |  19 +
 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/unwind.h           |  19 +-
 arch/loongarch/include/asm/unwind_hints.h     |  28 +
 arch/loongarch/kernel/Makefile                |   4 +
 arch/loongarch/kernel/entry.S                 |   6 +-
 arch/loongarch/kernel/fpu.S                   |   7 +
 arch/loongarch/kernel/genex.S                 |   6 +-
 arch/loongarch/kernel/lbt.S                   |   5 +
 arch/loongarch/kernel/module.c                |  22 +-
 arch/loongarch/kernel/relocate_kernel.S       |   2 +
 arch/loongarch/kernel/setup.c                 |   2 +
 arch/loongarch/kernel/stacktrace.c            |   1 +
 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                   |   7 +-
 arch/loongarch/lib/Makefile                   |   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                         | 117 ++--
 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 +---
 50 files changed, 1983 insertions(+), 263 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 Dec. 2, 2023, 1:52 p.m. UTC | #1
Hi, Tiezhu,

There are still some build warnings.

If FUNCTION_TRACER enabled, we get
  AS      arch/loongarch/kernel/mcount_dyn.o
arch/loongarch/kernel/mcount_dyn.o: warning: objtool:
ftrace_common+0x0: unreachable instruction
arch/loongarch/kernel/mcount_dyn.o: warning: objtool:
ftrace_caller+0x0: unreachable instruction
arch/loongarch/kernel/mcount_dyn.o: warning: objtool:
ftrace_regs_caller+0x0: unreachable instruction
arch/loongarch/kernel/mcount_dyn.o: warning: objtool:
ftrace_graph_caller+0x0: unreachable instruction
arch/loongarch/kernel/mcount_dyn.o: warning: objtool:
return_to_handler+0x0: unreachable instruction
arch/loongarch/kernel/mcount_dyn.o: warning: objtool:
ftrace_stub_direct_tramp+0x0: unreachable instruction

  AS      arch/loongarch/kernel/rethook_trampoline.o
arch/loongarch/kernel/rethook_trampoline.o: warning: objtool:
arch_rethook_trampoline+0x0: unreachable instruction

And when I use the latest binutils/gcc for native build, there are
some warnings in some files from the {init, kernel} directory. But
cross-building is fine, I don't know why.

Huacai

On Wed, Nov 29, 2023 at 9:07 PM Tiezhu Yang <yangtiezhu@loongson.cn> wrote:
>
> This version is based on 6.7-rc3, tested with the latest upstream
> gcc and binutils (20231127).
>
> v5:
>   -- Fix the partial backtrace about irq stack
>   -- Check on_stack() again after get_stack_info()
>   -- Silence the orc warning about handle_syscall
>   -- Silence the objtool warnings if CONFIG_CPU_HAS_LBT=y
>   -- Update the commit message about objdump and readelf info
>
> 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 about sibling call
>   objtool: Check local label in add_dead_ends()
>   objtool: Check local label in read_unwind_hints()
>   LoongArch: Add ORC stack unwinder support
>
>  arch/loongarch/Kconfig                        |   2 +
>  arch/loongarch/Kconfig.debug                  |  11 +
>  arch/loongarch/Makefile                       |  19 +
>  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/unwind.h           |  19 +-
>  arch/loongarch/include/asm/unwind_hints.h     |  28 +
>  arch/loongarch/kernel/Makefile                |   4 +
>  arch/loongarch/kernel/entry.S                 |   6 +-
>  arch/loongarch/kernel/fpu.S                   |   7 +
>  arch/loongarch/kernel/genex.S                 |   6 +-
>  arch/loongarch/kernel/lbt.S                   |   5 +
>  arch/loongarch/kernel/module.c                |  22 +-
>  arch/loongarch/kernel/relocate_kernel.S       |   2 +
>  arch/loongarch/kernel/setup.c                 |   2 +
>  arch/loongarch/kernel/stacktrace.c            |   1 +
>  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                   |   7 +-
>  arch/loongarch/lib/Makefile                   |   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                         | 117 ++--
>  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 +---
>  50 files changed, 1983 insertions(+), 263 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
>
>
  
Tiezhu Yang Dec. 7, 2023, 7:14 a.m. UTC | #2
On 12/02/2023 09:52 PM, Huacai Chen wrote:
> Hi, Tiezhu,
>
> There are still some build warnings.
>
> If FUNCTION_TRACER enabled, we get
>   AS      arch/loongarch/kernel/mcount_dyn.o
> arch/loongarch/kernel/mcount_dyn.o: warning: objtool:
> ftrace_common+0x0: unreachable instruction
> arch/loongarch/kernel/mcount_dyn.o: warning: objtool:
> ftrace_caller+0x0: unreachable instruction
> arch/loongarch/kernel/mcount_dyn.o: warning: objtool:
> ftrace_regs_caller+0x0: unreachable instruction
> arch/loongarch/kernel/mcount_dyn.o: warning: objtool:
> ftrace_graph_caller+0x0: unreachable instruction
> arch/loongarch/kernel/mcount_dyn.o: warning: objtool:
> return_to_handler+0x0: unreachable instruction
> arch/loongarch/kernel/mcount_dyn.o: warning: objtool:
> ftrace_stub_direct_tramp+0x0: unreachable instruction
>
>   AS      arch/loongarch/kernel/rethook_trampoline.o
> arch/loongarch/kernel/rethook_trampoline.o: warning: objtool:
> arch_rethook_trampoline+0x0: unreachable instruction

I tested with the default config loongson3_defconfig,
the FUNCTION_TRACE is not enabled, let me try to fix it.

> And when I use the latest binutils/gcc for native build, there are
> some warnings in some files from the {init, kernel} directory. But
> cross-building is fine, I don't know why.

I can not reproduce it for native build, it works well,
I will analysis if it can reproduce someday.

Thanks,
Tiezhu