Hello, This is v4 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/[email protected]/ 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 v4: - Fixed the new oe-selftest case (package.PackageKeepSections) itself: it located busybox.nosuid with a hardcoded "usr/bin" prefix, which only exists when the usrmerge distro feature is enabled. https://autobuilder.yoctoproject.org/valkyrie/#/builders/48/builds/4649 https://autobuilder.yoctoproject.org/valkyrie/#/builders/35/builds/4842 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 | 57 ++++++++++++++++++++++++- 3 files changed, 74 insertions(+), 6 deletions(-) -- 2.34.1
-=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#245851): https://lists.openembedded.org/g/openembedded-core/message/245851 Mute This Topic: https://lists.openembedded.org/mt/121261825/21656 Group Owner: [email protected] Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [[email protected]] -=-=-=-=-=-=-=-=-=-=-=-
