mbox series

[v3,0/1] lib/oe/package: Add strip keep-section support

Message ID 20260911220138.32414-1-othacehe@gnu.org
Headers show
Series lib/oe/package: Add strip keep-section support | expand

Message

Mathieu Othacehe Sept. 11, 2026, 10:01 p.m. UTC
Hello,

This is v3 of the .debug_frame / keep-section patch, picking back up the
thread from last year:

  v1 (PACKAGE_KEEP_DEBUG_FRAME):
  https://lists.openembedded.org/g/openembedded-core/message/203797

  v2 (PACKAGE_KEEP_SECTIONS):
  https://patchwork.yoctoproject.org/project/oe-core/patch/20250204103744.27883-1-othacehe@gnu.org/

Quick recap of the motivation: on 32-bit Arm, GCC's default EHABI unwind
tables (.ARM.exidx / .ARM.extab) don't currently allow libunwind to
produce a full backtrace once execution reaches the C++ termination path
(https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117941). GCC also emits
DWARF Call Frame Information for the same functions under .debug_frame,
which does allow a complete backtrace, but that section is unconditionally
stripped today. This series lets a recipe opt back in on a per-section
basis via PACKAGE_KEEP_SECTIONS, e.g.:

  PACKAGE_KEEP_SECTIONS:pn-myrecipe = ".debug_frame"

What's new in v3:

- Rebased on master, in particular on top of the runstrip() argument
  cleanup that landed since v2 -- no more tuple unpacking

- Added an oe-selftest case (package.PackageKeepSections) that builds
  core-image-minimal for qemuarm and uses readelf to show busybox loses
  .debug_frame by default and keeps it once PACKAGE_KEEP_SECTIONS is set,
  per Alexander's request for test coverage on v2.

- A couple of open points from the v2 thread I'd like to address before
  this goes further:

  * Richard asked whether this should just be folded into minidebuginfo
    instead of being a separate "magic" option. minidebuginfo only
    injects compressed *symbol* information (.gnu_debugdata); it says
    nothing about unwind data. PACKAGE_KEEP_SECTIONS is orthogonal --
    you need both symbols and unwind information to get a readable
    on-target backtrace, but a user may reasonably want only one of the
    two (e.g. GDB against a remote symbol store vs. a fully standalone
    coredump). I'd rather keep this as a separate, generic, opt-in knob
    than silently grow every minidebuginfo image by ~70KB per Arm binary
    that uses C++ exceptions.

  * Khem asked whether minidebuginfo could reuse .ARM.exidx/.ARM.extab
    the way it uses .eh_frame elsewhere. Per the GCC bug above, those
    EHABI tables are exactly the ones that currently produce partial
    backtraces on Arm -- that limitation is the reason this series exists.
    If that gets fixed on the GCC side, PACKAGE_KEEP_SECTIONS simply
    becomes unnecessary for this particular use case, but until then
    .debug_frame is the only way to get complete backtraces on 32-bit Arm.

- The matching ref-manual documentation for PACKAGE_KEEP_SECTIONS has been
  sent as a separate patch to the docs list.

Mathieu Othacehe (1):
  lib/oe/package: Add strip keep-section support

 meta/classes-global/staging.bbclass     |  4 +-
 meta/lib/oe/package.py                  | 19 +++++++--
 meta/lib/oeqa/selftest/cases/package.py | 52 ++++++++++++++++++++++++-
 3 files changed, 69 insertions(+), 6 deletions(-)