mirror of
git://git.yoctoproject.org/poky.git
synced 2025-07-19 21:09:03 +02:00
selftest/package: Add package separated debug symbols hardlink test
Tweak recipe selftest-hardlink - addition of libexecdir to simulate multiple directories - add gdb.sh to run gdb from script which is invoked at test time. - rename `hello' -> `hello1' to workaround name confliction with the one in lmbench Add test_gdb_hardlink_debug to selftest/package - run a qemu and invoke gdb.sh to gdb binaries of selftest-hardlink - check gdb to read symbols from separated debug hardlink file - check debug symbols works correctly [Test without commit `package.bbclass: only one hardlink of separated debug info file in each directory'] 2018-08-26 01:27:30,195 - oe-selftest - INFO - test_gdb_hardlink_debug (package.PackageTests) 2018-08-26 01:30:29,005 - oe-selftest - INFO - gdbtest /usr/bin/hello1 2018-08-26 01:30:36,539 - oe-selftest - INFO - gdbtest /usr/bin/hello2 2018-08-26 01:30:43,568 - oe-selftest - INFO - gdbtest /usr/libexec/hello3 2018-08-26 01:30:50,157 - oe-selftest - ERROR - No debugging symbols found. GDB result: Reading symbols from /usr/libexec/hello3...(no debugging symbols found)...done.^M (gdb) Function "main" not defined.^M Make breakpoint pending on future shared library load? (y or [n]) [answered N; input not from terminal]^M (gdb) Starting program: /usr/libexec/hello3 ^M Hello World!^M [Inferior 1 (process 320) exited normally]^M (gdb) The program is not being run.^M (gdb) 2018-08-26 01:30:51,180 - oe-selftest - INFO - ... FAIL 2018-08-26 01:30:51,181 - oe-selftest - INFO - Traceback (most recent call last): File "oe-core/meta/lib/oeqa/selftest/cases/package.py", line 148, in test_gdb_hardlink_debug self.fail('GDB %s failed' % binary) AssertionError: GDB /usr/libexec/hello3 failed [Test without commit `package.bbclass: only one hardlink of separated debug info file in each directory'] [Test with commit `package.bbclass: only one hardlink of separated debug info file in each directory'] 2018-08-26 12:40:30,976 - oe-selftest - INFO - test_gdb_hardlink_debug (package.PackageTests) 2018-08-26 12:42:15,149 - oe-selftest - INFO - gdbtest /usr/bin/hello1 2018-08-26 12:42:24,064 - oe-selftest - INFO - gdbtest /usr/bin/hello2 2018-08-26 12:42:31,078 - oe-selftest - INFO - gdbtest /usr/libexec/hello3 2018-08-26 12:42:38,646 - oe-selftest - INFO - gdbtest /usr/libexec/hello4 2018-08-26 12:42:46,824 - oe-selftest - INFO - ... ok [Test with commit `package.bbclass: only one hardlink of separated debug info file in each directory'] (From OE-Core rev: 104d07e57488f4a414fb5e1f60d0c8b0c02d6b4d) Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
parent
ec71111c9c
commit
1c048479af
|
@ -2,19 +2,29 @@ LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda
|
||||||
|
|
||||||
LICENSE = "MIT"
|
LICENSE = "MIT"
|
||||||
|
|
||||||
SRC_URI = "file://hello.c"
|
SRC_URI = "file://hello.c \
|
||||||
|
file://gdb.sh \
|
||||||
|
"
|
||||||
|
|
||||||
S = "${WORKDIR}"
|
S = "${WORKDIR}"
|
||||||
|
|
||||||
do_compile () {
|
do_compile () {
|
||||||
${CC} hello.c -o hello ${CFLAGS} ${LDFLAGS}
|
${CC} hello.c -o hello1 ${CFLAGS} ${LDFLAGS}
|
||||||
}
|
}
|
||||||
|
|
||||||
do_install () {
|
do_install () {
|
||||||
install -d ${D}${bindir}
|
install -d ${D}${bindir}
|
||||||
install -m 755 hello ${D}${bindir}/hello
|
install -m 755 ${WORKDIR}/gdb.sh ${D}${bindir}/
|
||||||
ln ${D}${bindir}/hello ${D}${bindir}/hello2
|
install -m 755 hello1 ${D}${bindir}/hello1
|
||||||
ln ${D}${bindir}/hello ${D}${bindir}/hello3
|
ln ${D}${bindir}/hello1 ${D}${bindir}/hello2
|
||||||
ln ${D}${bindir}/hello ${D}${bindir}/hello4
|
|
||||||
|
install -d ${D}${libexecdir}
|
||||||
|
ln ${D}${bindir}/hello1 ${D}${libexecdir}/hello3
|
||||||
|
ln ${D}${bindir}/hello1 ${D}${libexecdir}/hello4
|
||||||
|
|
||||||
dd if=/dev/zero of=${D}${bindir}/sparsetest bs=1 count=0 seek=1M
|
dd if=/dev/zero of=${D}${bindir}/sparsetest bs=1 count=0 seek=1M
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RDEPENDS_${PN}-gdb += "gdb"
|
||||||
|
PACKAGES =+ "${PN}-gdb"
|
||||||
|
FILES_${PN}-gdb = "${bindir}/gdb.sh"
|
||||||
|
|
8
meta-selftest/recipes-test/selftest-hardlink/selftest-hardlink/gdb.sh
Executable file
8
meta-selftest/recipes-test/selftest-hardlink/selftest-hardlink/gdb.sh
Executable file
|
@ -0,0 +1,8 @@
|
||||||
|
#!/bin/sh
|
||||||
|
gdb -q $1 <<'EOF'
|
||||||
|
b main
|
||||||
|
r
|
||||||
|
c
|
||||||
|
q
|
||||||
|
EOF
|
||||||
|
echo ""
|
|
@ -1,6 +1,6 @@
|
||||||
from oeqa.selftest.case import OESelftestTestCase
|
from oeqa.selftest.case import OESelftestTestCase
|
||||||
from oeqa.core.decorator.oeid import OETestID
|
from oeqa.core.decorator.oeid import OETestID
|
||||||
from oeqa.utils.commands import bitbake, get_bb_vars, get_bb_var
|
from oeqa.utils.commands import bitbake, get_bb_vars, get_bb_var, runqemu
|
||||||
import stat
|
import stat
|
||||||
import subprocess, os
|
import subprocess, os
|
||||||
import oe.path
|
import oe.path
|
||||||
|
@ -98,7 +98,7 @@ class PackageTests(OESelftestTestCase):
|
||||||
def checkfiles():
|
def checkfiles():
|
||||||
# Recipe creates 4 hardlinked files, there is a copy in package/ and a copy in packages-split/
|
# Recipe creates 4 hardlinked files, there is a copy in package/ and a copy in packages-split/
|
||||||
# so expect 8 in total.
|
# so expect 8 in total.
|
||||||
self.assertEqual(os.stat(dest + "/selftest-hardlink" + bindir + "/hello").st_nlink, 8)
|
self.assertEqual(os.stat(dest + "/selftest-hardlink" + bindir + "/hello1").st_nlink, 8)
|
||||||
|
|
||||||
# Test a sparse file remains sparse
|
# Test a sparse file remains sparse
|
||||||
sparsestat = os.stat(dest + "/selftest-hardlink" + bindir + "/sparsetest")
|
sparsestat = os.stat(dest + "/selftest-hardlink" + bindir + "/sparsetest")
|
||||||
|
@ -112,3 +112,38 @@ class PackageTests(OESelftestTestCase):
|
||||||
bitbake("selftest-hardlink -c package")
|
bitbake("selftest-hardlink -c package")
|
||||||
|
|
||||||
checkfiles()
|
checkfiles()
|
||||||
|
|
||||||
|
# Verify gdb to read symbols from separated debug hardlink file correctly
|
||||||
|
def test_gdb_hardlink_debug(self):
|
||||||
|
features = 'IMAGE_INSTALL_append = " selftest-hardlink"\n'
|
||||||
|
features += 'IMAGE_INSTALL_append = " selftest-hardlink-dbg"\n'
|
||||||
|
features += 'IMAGE_INSTALL_append = " selftest-hardlink-gdb"\n'
|
||||||
|
self.write_config(features)
|
||||||
|
bitbake("core-image-minimal")
|
||||||
|
|
||||||
|
def gdbtest(qemu, binary):
|
||||||
|
"""
|
||||||
|
Check that gdb ``binary`` to read symbols from separated debug file
|
||||||
|
"""
|
||||||
|
self.logger.info("gdbtest %s" % binary)
|
||||||
|
status, output = qemu.run_serial('/usr/bin/gdb.sh %s' % binary, timeout=60)
|
||||||
|
for l in output.split('\n'):
|
||||||
|
# Check debugging symbols exists
|
||||||
|
if '(no debugging symbols found)' in l:
|
||||||
|
self.logger.error("No debugging symbols found. GDB result:\n%s" % output)
|
||||||
|
return False
|
||||||
|
|
||||||
|
# Check debugging symbols works correctly
|
||||||
|
elif "Breakpoint 1, main () at hello.c:4" in l:
|
||||||
|
return True
|
||||||
|
|
||||||
|
self.logger.error("GDB result:\n%s: %s" % output)
|
||||||
|
return False
|
||||||
|
|
||||||
|
with runqemu('core-image-minimal') as qemu:
|
||||||
|
for binary in ['/usr/bin/hello1',
|
||||||
|
'/usr/bin/hello2',
|
||||||
|
'/usr/libexec/hello3',
|
||||||
|
'/usr/libexec/hello4']:
|
||||||
|
if not gdbtest(qemu, binary):
|
||||||
|
self.fail('GDB %s failed' % binary)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user