Rust for Linux List
 help / color / mirror / Atom feed
* [PATCH 00/27] objtool: dynamically detect noreturns
@ 2026-08-28  4:51 Josh Poimboeuf
  2026-08-28  4:51 ` [PATCH 01/27] objtool: Remove obsolete noreturns.h entries Josh Poimboeuf
                   ` (26 more replies)
  0 siblings, 27 replies; 31+ messages in thread
From: Josh Poimboeuf @ 2026-08-28  4:51 UTC (permalink / raw)
  To: x86
  Cc: linux-kernel, Peter Zijlstra, Gary Guo, rust-for-linux,
	Ard Biesheuvel, Miguel Ojeda, Nathan Chancellor, Nicolas Schier,
	linux-kbuild, Huacai Chen

The C and rust manual noreturn lists are a maintenance nightmare.  Get
rid of them by taking advantage of the fact that objtool can run on
linked objects (vmlinux.o and modules) and can thus detect noreturns
dynamically:

  1) When features are enabled which require the noreturn knowledge
     (i.e., control flow analysis) always defer objtool to run on linked
     objects.  That obsoletes most of noreturns.h. (patch 12)

  2) For noreturn functions which are exported by vmlinux, dynamically
     write their names to a file which is then read by objtool running
     on modules.  That obsoletes most of the remaining noreturns.h
     entries and the entirety of is_rust_noreturn(). (patch 24)

  3) For the (four) noreturn functions which are exported by modules,
     manually annotate them at their declaration sites with a new
     ANNOTATE_EXPORTED_NORETURN().  That removes the last few stragglers
     in noreturns.h. (patch 26)

Josh Poimboeuf (27):
  objtool: Remove obsolete noreturns.h entries
  kbuild: Add CONFIG_OBJTOOL_DEFERRED
  kbuild: Add CONFIG_OBJTOOL_CONTROL_FLOW
  objtool: Fix dead end detection for sibling calls
  objtool: Refactor the noreturn/dead-end detection
  objtool: Ignore traps after noreturn calls in STT_CODE
  objtool: Make .discard.stack_frame_non_standard non-allocatable
  efi/libstub: Drop .discard.addressable from the stub objects
  efi/loongarch: Mark loongarch efi_boot_kernel() non-standard for
    objtool
  objtool: Add ANNOTATE_IGNORE_NORETURN()
  LoongArch: Annotate reboot and kexec paths as returnable
  kbuild: Defer running objtool to link time for all CFG features
  rust: Annotate the intrinsic stubs as returnable
  panic: Mark abort() __noreturn
  x86/xen: Ignore noreturn status of weak mem_map_via_hcall()
  objtool: Detect noreturns in weak functions
  x86/entry: Make rewind_stack_and_make_dead() a real function
  x86/xen: Make xen_cpu_bringup_again() a real function
  x86/xen: Make xen_start_kernel() noreturn
  x86/boot: Rework how pi startup symbols get exposed to vmlinux
  objtool: Fix noreturn detection for non-sibling jumps to SYM_CODE
  objtool: Add options to write/read exported noreturns to/from a file
  kbuild: Do the per-module objtool pass right before linking
  kbuild: Generate the noreturn list and validate modules against it
  objtool: Add ANNOTATE_EXPORTED_NORETURN()
  objtool: Annotate all module-exported noreturns and remove noreturns.h
  objtool: Warn about missing/stale ANNOTATE_EXPORTED_NORETURN() usage

 Makefile                                 |   8 +
 arch/arc/kernel/traps.c                  |   4 +-
 arch/arm/kernel/traps.c                  |   2 +-
 arch/loongarch/kernel/machine_kexec.c    |   2 +
 arch/loongarch/kernel/reset.c            |   4 +
 arch/x86/boot/startup/Makefile           |  16 +-
 arch/x86/boot/startup/exports.h          |  14 -
 arch/x86/boot/startup/unprefix.syms      |  13 +
 arch/x86/entry/entry_64.S                |   7 +-
 arch/x86/kernel/vmlinux.lds.S            |   2 -
 arch/x86/platform/pvh/enlighten.c        |   1 +
 arch/x86/xen/enlighten_pv.c              |   5 +-
 arch/x86/xen/xen-head.S                  |   5 +-
 arch/x86/xen/xen-ops.h                   |   2 +-
 drivers/firmware/efi/libstub/Makefile    |   4 +
 drivers/firmware/efi/libstub/loongarch.c |   8 +
 drivers/message/fusion/mptbase.h         |   2 +
 include/kunit/test.h                     |   1 +
 include/kunit/try-catch.h                |   2 +
 include/linux/annotate.h                 |  24 ++
 include/linux/objtool.h                  |  13 +-
 include/linux/objtool_types.h            |   1 +
 include/linux/panic.h                    |   2 +-
 include/linux/rtc/ds1685.h               |   2 +
 kernel/exit.c                            |   2 +-
 lib/Kconfig.debug                        |  14 +
 lib/Kconfig.ubsan                        |   2 +-
 rust/.gitignore                          |   1 +
 rust/Makefile                            |  17 +
 scripts/.gitignore                       |   1 +
 scripts/Makefile.build                   |  31 +-
 scripts/Makefile.lib                     |   4 +-
 scripts/Makefile.modfinal                |  35 +-
 scripts/Makefile.vmlinux_o               |  13 +-
 scripts/link-vmlinux.sh                  |   3 +-
 scripts/livepatch/klp-build              |   4 +-
 tools/include/linux/objtool_types.h      |   1 +
 tools/objtool/Documentation/objtool.txt  |  30 +-
 tools/objtool/builtin-check.c            |  12 +
 tools/objtool/check.c                    | 435 +++++++++++++++++------
 tools/objtool/include/objtool/builtin.h  |   2 +
 tools/objtool/include/objtool/elf.h      |   4 +
 tools/objtool/klp-diff.c                 |  32 ++
 tools/objtool/noreturns.h                |  55 ---
 44 files changed, 584 insertions(+), 258 deletions(-)
 delete mode 100644 arch/x86/boot/startup/exports.h
 create mode 100644 arch/x86/boot/startup/unprefix.syms
 delete mode 100644 tools/objtool/noreturns.h

-- 
2.55.0


^ permalink raw reply	[flat|nested] 31+ messages in thread

end of thread, other threads:[~2026-08-28 19:28 UTC | newest]

Thread overview: 31+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-28  4:51 [PATCH 00/27] objtool: dynamically detect noreturns Josh Poimboeuf
2026-08-28  4:51 ` [PATCH 01/27] objtool: Remove obsolete noreturns.h entries Josh Poimboeuf
2026-08-28  4:51 ` [PATCH 02/27] kbuild: Add CONFIG_OBJTOOL_DEFERRED Josh Poimboeuf
2026-08-28  4:51 ` [PATCH 03/27] kbuild: Add CONFIG_OBJTOOL_CONTROL_FLOW Josh Poimboeuf
2026-08-28  4:51 ` [PATCH 04/27] objtool: Fix dead end detection for sibling calls Josh Poimboeuf
2026-08-28  4:51 ` [PATCH 05/27] objtool: Refactor the noreturn/dead-end detection Josh Poimboeuf
2026-08-28  4:51 ` [PATCH 06/27] objtool: Ignore traps after noreturn calls in STT_CODE Josh Poimboeuf
2026-08-28  4:51 ` [PATCH 07/27] objtool: Make .discard.stack_frame_non_standard non-allocatable Josh Poimboeuf
2026-08-28  4:51 ` [PATCH 08/27] efi/libstub: Drop .discard.addressable from the stub objects Josh Poimboeuf
2026-08-28  4:51 ` [PATCH 09/27] efi/loongarch: Mark loongarch efi_boot_kernel() non-standard for objtool Josh Poimboeuf
2026-08-28  4:51 ` [PATCH 10/27] objtool: Add ANNOTATE_IGNORE_NORETURN() Josh Poimboeuf
2026-08-28  4:51 ` [PATCH 11/27] LoongArch: Annotate reboot and kexec paths as returnable Josh Poimboeuf
2026-08-28  4:51 ` [PATCH 12/27] kbuild: Defer running objtool to link time for all CFG features Josh Poimboeuf
2026-08-28 17:57   ` Nathan Chancellor
2026-08-28 18:19     ` Josh Poimboeuf
2026-08-28 19:27       ` Nathan Chancellor
2026-08-28  4:51 ` [PATCH 13/27] rust: Annotate the intrinsic stubs as returnable Josh Poimboeuf
2026-08-28  4:51 ` [PATCH 14/27] panic: Mark abort() __noreturn Josh Poimboeuf
2026-08-28  4:51 ` [PATCH 15/27] x86/xen: Ignore noreturn status of weak mem_map_via_hcall() Josh Poimboeuf
2026-08-28  4:51 ` [PATCH 16/27] objtool: Detect noreturns in weak functions Josh Poimboeuf
2026-08-28  4:51 ` [PATCH 17/27] x86/entry: Make rewind_stack_and_make_dead() a real function Josh Poimboeuf
2026-08-28  4:51 ` [PATCH 18/27] x86/xen: Make xen_cpu_bringup_again() " Josh Poimboeuf
2026-08-28  4:51 ` [PATCH 19/27] x86/xen: Make xen_start_kernel() noreturn Josh Poimboeuf
2026-08-28  4:51 ` [PATCH 20/27] x86/boot: Rework how pi startup symbols get exposed to vmlinux Josh Poimboeuf
2026-08-28  4:51 ` [PATCH 21/27] objtool: Fix noreturn detection for non-sibling jumps to SYM_CODE Josh Poimboeuf
2026-08-28  4:51 ` [PATCH 22/27] objtool: Add options to write/read exported noreturns to/from a file Josh Poimboeuf
2026-08-28  4:51 ` [PATCH 23/27] kbuild: Do the per-module objtool pass right before linking Josh Poimboeuf
2026-08-28  4:51 ` [PATCH 24/27] kbuild: Generate the noreturn list and validate modules against it Josh Poimboeuf
2026-08-28  4:51 ` [PATCH 25/27] objtool: Add ANNOTATE_EXPORTED_NORETURN() Josh Poimboeuf
2026-08-28  4:51 ` [PATCH 26/27] objtool: Annotate all module-exported noreturns and remove noreturns.h Josh Poimboeuf
2026-08-28  4:51 ` [PATCH 27/27] objtool: Warn about missing/stale ANNOTATE_EXPORTED_NORETURN() usage Josh Poimboeuf

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox