Hello people!

This year we will be having a kernel BoF at Cauldron.  It is scheduled
for Saturday from 15:30 to 16:30.  There will be several kernel
maintainers and hackers in attendance, and the goal of the BoF is to
discuss and collect feedback about several toolchain-related issues that
are of current interest for the kernel.  The output of the discussions
and the feedback collected will then be used as a basis for further
discussions at the Linux Plumbers conference that will be held the next
week in Vienna.  The idea is to get kernel and toolchain hackers
together and advance on these topics.

Find below some of the topics we will be discussing.  Many of them are
relevant to GCC, and we ask you to consider attending if you are coming
to the Cauldron.  The list of topics is of course not closed, and you
are very welcome to bring your own, specially if your work would benefit
from feedback from the kernel hackers.

- LTO and inline asm symbols

  A lot of assembler statements reference C symbols, which need to be
  externally_visible and global for GCC LTO, otherwise they can end up in the
  wrong asm file and cause missing symbols.

  Goal of the discussion:

  Provide an assessment of the reported problem, and discuss the two
  alternatives already proposed in the bugzillas below: one ad-hoc solution
  based on parsing symbol references in inline asm strings, another is to
  allow top-level extended asm that can get input arguments.

  References:

  https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107779
  https://gcc.gnu.org/bugzilla/show_bug.cgi?id=41045

- "noreturn" and jump tables run-time hints

  It has been expressed on the kernel side the desire of having the C compiler
  emit run-time hints marking functions that are not supposed to return and
  also to provide annotations on jump tables.  This is for the benefit of
  objtool in arm64, see references below.

  Goal of the discussion:

  Collect and assess the requirements of these features, discuss their
  pertinence and the way it could be best implemented.  The outcome of the
  discussion will then be used to continue the discussion with the clang/llvm
  and kernel hackers at LPC.

  References:
  
https://lore.kernel.org/linux-arm-kernel/yylmhuxtuanza...@hirez.programming.kicks-ass.net/

- Struct layout randomization (-frandomize-struct-layout) and debug info

  The GCC plugin hooks in a way that emitted debug info doesn't match with the
  resulting randomized structs.  It works in clang because it generates DWARF
  later in the compilation process.

  References:

  https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84052
  https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116457

  Goal of the discussion:

  Determine how to best fix this in the plugin, or by using a different
  approach.  The outcome of the discussion will then be used to continue the
  discussion with the clang/llvm and kernel hackers at LPC.

- Userland stack unwinding from within the Linux kernel

  There are reasons for wanting to unwind both userland and kernel
  stacks from within the kernel.  Currently the kernel can unwind kernel
  stacks based on ORC (which is revese-engineered from kernel compiled
  objects by objtool) and userland stacks provided stack frame pointers
  are present.  SFrame is a format similar to ORC, but general enough to
  be used in userspace, and there is an on-going effort to introduce a
  SFrame based unwinder in the kernel.  This will require some glibc
  support as well.

  References:

  First prototype (V1) from Josh Poimboeuf:
  https://lkml.kernel.org/lkml/cover.1699487758.git.jpoim...@kernel.org/

- Linking BTF in kernel builds

  At the moment the BTF used on the kernel side is not directly
  generated by compilers, but it is instead translated from DWARF by
  pahole:

  vmlinux     DWARF           BTF                   C
  module1.ko -------> pahole -------> vmlinux.btf ------> vmlinux.h
  module2.ko

  On the BPF program side, however, the BTF is generated directly by the
  compiler.  It has been suggested to get DWARF out of the picture, by
  having the compiler generating BTF also in the kernel build, and
  having the BTF linked and deduplicated by the link editor.

  Note that GCC already supports emitting BTF for targets other than
  BPF.  LLVM currently restricts BTF to the BPF target, but it could be
  easily adapted to do the same according to the LLVM BPF backend
  maintainers.

  Goal of the discussion:

  Provide an assessment of the proposed approach considering its
  advantages and possible disadvantages, and kick off the technical
  discussion on necessary BTF extensions needed that will be then
  continued at the LPC Toolchains Track.

- Potential inter-language LTO issues in kernel

  Rust code is (as of now provisionally) being added to the Linux kernel.  On
  the other hand the kernel build can be configured to enable LTO when linking
  vmlinux.  Doing LTO involving both C and Rust compiled code allegedly works
  in clang/llvm.  It would be good to check whether it will also work with GCC.

  Goal of the discussion:

  Produce a first assessment on the ability of GCC of having compiled objects
  from different languages linked with LTO.  Also, make the GCC Rust people
  aware of this use case.

Reply via email to