mirror of
https://git.yoctoproject.org/poky
synced 2026-05-30 12:29:55 +00:00
gdb/systemd: enable minidebuginfo support conditionally
Enabling minidebuginfo is not useful if gdb and systemd-coredump are unable to parse it. In order to parse it, gdb needs xz support. Systemd needs coredump enabled, as well as elfutil enabled as well (systemd-coredump loads libdw which is part of elfutils using dlopen). (From OE-Core rev: 0d2df803bebfd7e832ab7da54c4dacaaeeb424a9) Signed-off-by: Etienne Cordonnier <ecordonnier@snap.com> Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
committed by
Richard Purdie
parent
72342e8eea
commit
959b1f7de4
@@ -234,7 +234,7 @@ python () {
|
|||||||
deps = ""
|
deps = ""
|
||||||
for dep in (d.getVar('PACKAGE_DEPENDS') or "").split():
|
for dep in (d.getVar('PACKAGE_DEPENDS') or "").split():
|
||||||
deps += " %s:do_populate_sysroot" % dep
|
deps += " %s:do_populate_sysroot" % dep
|
||||||
if d.getVar('PACKAGE_MINIDEBUGINFO') == '1':
|
if bb.utils.contains('DISTRO_FEATURES', 'minidebuginfo', True, False, d):
|
||||||
deps += ' xz-native:do_populate_sysroot'
|
deps += ' xz-native:do_populate_sysroot'
|
||||||
d.appendVarFlag('do_package', 'depends', deps)
|
d.appendVarFlag('do_package', 'depends', deps)
|
||||||
|
|
||||||
|
|||||||
@@ -1239,7 +1239,7 @@ def process_split_and_strip_files(d):
|
|||||||
oe.utils.multiprocess_launch(oe.package.runstrip, sfiles, d)
|
oe.utils.multiprocess_launch(oe.package.runstrip, sfiles, d)
|
||||||
|
|
||||||
# Build "minidebuginfo" and reinject it back into the stripped binaries
|
# Build "minidebuginfo" and reinject it back into the stripped binaries
|
||||||
if d.getVar('PACKAGE_MINIDEBUGINFO') == '1':
|
if bb.utils.contains('DISTRO_FEATURES', 'minidebuginfo', True, False, d):
|
||||||
oe.utils.multiprocess_launch(inject_minidebuginfo, list(elffiles), d,
|
oe.utils.multiprocess_launch(inject_minidebuginfo, list(elffiles), d,
|
||||||
extraargs=(dvar, dv, d))
|
extraargs=(dvar, dv, d))
|
||||||
|
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
#
|
#
|
||||||
|
|
||||||
import re
|
import re
|
||||||
|
import threading
|
||||||
import time
|
import time
|
||||||
|
|
||||||
from oeqa.runtime.case import OERuntimeTestCase
|
from oeqa.runtime.case import OERuntimeTestCase
|
||||||
@@ -136,6 +137,26 @@ class SystemdServiceTests(SystemdTest):
|
|||||||
status = self.target.run('mount -oro,remount /')[0]
|
status = self.target.run('mount -oro,remount /')[0]
|
||||||
self.assertTrue(status == 0, msg='Remounting / as r/o failed')
|
self.assertTrue(status == 0, msg='Remounting / as r/o failed')
|
||||||
|
|
||||||
|
@skipIfNotFeature('minidebuginfo', 'Test requires minidebuginfo to be in DISTRO_FEATURES')
|
||||||
|
@OEHasPackage(['busybox'])
|
||||||
|
def test_systemd_coredump_minidebuginfo(self):
|
||||||
|
"""
|
||||||
|
Verify that call-stacks generated by systemd-coredump contain symbolicated call-stacks,
|
||||||
|
extracted from the minidebuginfo metadata (.gnu_debugdata elf section).
|
||||||
|
"""
|
||||||
|
t_thread = threading.Thread(target=self.target.run, args=("ulimit -c unlimited && sleep 1000",))
|
||||||
|
t_thread.start()
|
||||||
|
time.sleep(1)
|
||||||
|
|
||||||
|
status, output = self.target.run('pidof sleep')
|
||||||
|
# cause segfault on purpose
|
||||||
|
self.target.run('kill -SEGV %s' % output)
|
||||||
|
self.assertEqual(status, 0, msg = 'Not able to find process that runs sleep, output : %s' % output)
|
||||||
|
|
||||||
|
(status, output) = self.target.run('coredumpctl info')
|
||||||
|
self.assertEqual(status, 0, msg='MiniDebugInfo Test failed: %s' % output)
|
||||||
|
self.assertEqual('sleep_for_duration (busybox.nosuid' in output, True, msg='Call stack is missing minidebuginfo symbols (functions shown as "n/a"): %s' % output)
|
||||||
|
|
||||||
class SystemdJournalTests(SystemdTest):
|
class SystemdJournalTests(SystemdTest):
|
||||||
|
|
||||||
@OETestDepends(['systemd.SystemdBasicTests.test_systemd_basic'])
|
@OETestDepends(['systemd.SystemdBasicTests.test_systemd_basic'])
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ class Minidebuginfo(OESelftestTestCase):
|
|||||||
bb_vars = get_bb_vars(['DEPLOY_DIR_IMAGE', 'IMAGE_LINK_NAME', 'READELF'], image)
|
bb_vars = get_bb_vars(['DEPLOY_DIR_IMAGE', 'IMAGE_LINK_NAME', 'READELF'], image)
|
||||||
|
|
||||||
self.write_config("""
|
self.write_config("""
|
||||||
PACKAGE_MINIDEBUGINFO = "1"
|
DISTRO_FEATURES:append = " minidebuginfo"
|
||||||
IMAGE_FSTYPES = "tar.bz2"
|
IMAGE_FSTYPES = "tar.bz2"
|
||||||
""")
|
""")
|
||||||
bitbake("{} {}:do_addto_recipe_sysroot".format(image, binutils))
|
bitbake("{} {}:do_addto_recipe_sysroot".format(image, binutils))
|
||||||
|
|||||||
@@ -67,6 +67,7 @@ PAM_PLUGINS = " \
|
|||||||
|
|
||||||
PACKAGECONFIG ??= " \
|
PACKAGECONFIG ??= " \
|
||||||
${@bb.utils.filter('DISTRO_FEATURES', 'acl audit efi ldconfig pam selinux smack usrmerge polkit seccomp', d)} \
|
${@bb.utils.filter('DISTRO_FEATURES', 'acl audit efi ldconfig pam selinux smack usrmerge polkit seccomp', d)} \
|
||||||
|
${@bb.utils.contains('DISTRO_FEATURES', 'minidebuginfo', 'coredump elfutils', '', d)} \
|
||||||
${@bb.utils.contains('DISTRO_FEATURES', 'wifi', 'rfkill', '', d)} \
|
${@bb.utils.contains('DISTRO_FEATURES', 'wifi', 'rfkill', '', d)} \
|
||||||
${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'xkbcommon', '', d)} \
|
${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'xkbcommon', '', d)} \
|
||||||
${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', '', 'link-udev-shared', d)} \
|
${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', '', 'link-udev-shared', d)} \
|
||||||
|
|||||||
@@ -39,7 +39,9 @@ BUILD_CFLAGS += "-Wno-error=stringop-overflow"
|
|||||||
DEPENDS_BZIP2 = "bzip2-replacement-native"
|
DEPENDS_BZIP2 = "bzip2-replacement-native"
|
||||||
DEPENDS_BZIP2:class-target = "bzip2"
|
DEPENDS_BZIP2:class-target = "bzip2"
|
||||||
|
|
||||||
PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'debuginfod', 'debuginfod libdebuginfod', '', d)}"
|
PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'debuginfod', 'debuginfod libdebuginfod', '', d)} \
|
||||||
|
${@bb.utils.contains('DISTRO_FEATURES', 'minidebuginfo', 'xz', '', d)} \
|
||||||
|
"
|
||||||
PACKAGECONFIG[bzip2] = "--with-bzlib,--without-bzlib,${DEPENDS_BZIP2}"
|
PACKAGECONFIG[bzip2] = "--with-bzlib,--without-bzlib,${DEPENDS_BZIP2}"
|
||||||
PACKAGECONFIG[xz] = "--with-lzma,--without-lzma,xz"
|
PACKAGECONFIG[xz] = "--with-lzma,--without-lzma,xz"
|
||||||
PACKAGECONFIG[zstd] = "--with-zstd,--without-zstd,zstd"
|
PACKAGECONFIG[zstd] = "--with-zstd,--without-zstd,zstd"
|
||||||
|
|||||||
@@ -30,7 +30,9 @@ EXTRA_OECONF = "--disable-gdbtk --disable-x --disable-werror \
|
|||||||
--with-libgmp-prefix=${STAGING_EXECPREFIXDIR} \
|
--with-libgmp-prefix=${STAGING_EXECPREFIXDIR} \
|
||||||
"
|
"
|
||||||
|
|
||||||
PACKAGECONFIG ??= "readline ${@bb.utils.filter('DISTRO_FEATURES', 'debuginfod', d)} python"
|
PACKAGECONFIG ??= "readline ${@bb.utils.filter('DISTRO_FEATURES', 'debuginfod', d)} python \
|
||||||
|
${@bb.utils.contains('DISTRO_FEATURES', 'minidebuginfo', 'xz', '', d)} \
|
||||||
|
"
|
||||||
# Use --without-system-readline to compile with readline 5.
|
# Use --without-system-readline to compile with readline 5.
|
||||||
PACKAGECONFIG[readline] = "--with-system-readline,--without-system-readline,readline"
|
PACKAGECONFIG[readline] = "--with-system-readline,--without-system-readline,readline"
|
||||||
PACKAGECONFIG[python] = "--with-python=${WORKDIR}/python,--without-python,python3,python3-codecs"
|
PACKAGECONFIG[python] = "--with-python=${WORKDIR}/python,--without-python,python3,python3-codecs"
|
||||||
|
|||||||
Reference in New Issue
Block a user