diff options
3 files changed, 61 insertions, 8 deletions
diff --git a/meta-selftest/recipes-test/selftest-hardlink/selftest-hardlink.bb b/meta-selftest/recipes-test/selftest-hardlink/selftest-hardlink.bb index ec330fa9ff..842a9772cb 100644 --- a/meta-selftest/recipes-test/selftest-hardlink/selftest-hardlink.bb +++ b/meta-selftest/recipes-test/selftest-hardlink/selftest-hardlink.bb | |||
| @@ -2,19 +2,29 @@ LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda | |||
| 2 | 2 | ||
| 3 | LICENSE = "MIT" | 3 | LICENSE = "MIT" |
| 4 | 4 | ||
| 5 | SRC_URI = "file://hello.c" | 5 | SRC_URI = "file://hello.c \ |
| 6 | file://gdb.sh \ | ||
| 7 | " | ||
| 6 | 8 | ||
| 7 | S = "${WORKDIR}" | 9 | S = "${WORKDIR}" |
| 8 | 10 | ||
| 9 | do_compile () { | 11 | do_compile () { |
| 10 | ${CC} hello.c -o hello ${CFLAGS} ${LDFLAGS} | 12 | ${CC} hello.c -o hello1 ${CFLAGS} ${LDFLAGS} |
| 11 | } | 13 | } |
| 12 | 14 | ||
| 13 | do_install () { | 15 | do_install () { |
| 14 | install -d ${D}${bindir} | 16 | install -d ${D}${bindir} |
| 15 | install -m 755 hello ${D}${bindir}/hello | 17 | install -m 755 ${WORKDIR}/gdb.sh ${D}${bindir}/ |
| 16 | ln ${D}${bindir}/hello ${D}${bindir}/hello2 | 18 | install -m 755 hello1 ${D}${bindir}/hello1 |
| 17 | ln ${D}${bindir}/hello ${D}${bindir}/hello3 | 19 | ln ${D}${bindir}/hello1 ${D}${bindir}/hello2 |
| 18 | ln ${D}${bindir}/hello ${D}${bindir}/hello4 | 20 | |
| 21 | install -d ${D}${libexecdir} | ||
| 22 | ln ${D}${bindir}/hello1 ${D}${libexecdir}/hello3 | ||
| 23 | ln ${D}${bindir}/hello1 ${D}${libexecdir}/hello4 | ||
| 24 | |||
| 19 | dd if=/dev/zero of=${D}${bindir}/sparsetest bs=1 count=0 seek=1M | 25 | dd if=/dev/zero of=${D}${bindir}/sparsetest bs=1 count=0 seek=1M |
| 20 | } | 26 | } |
| 27 | |||
| 28 | RDEPENDS_${PN}-gdb += "gdb" | ||
| 29 | PACKAGES =+ "${PN}-gdb" | ||
| 30 | FILES_${PN}-gdb = "${bindir}/gdb.sh" | ||
diff --git a/meta-selftest/recipes-test/selftest-hardlink/selftest-hardlink/gdb.sh b/meta-selftest/recipes-test/selftest-hardlink/selftest-hardlink/gdb.sh new file mode 100755 index 0000000000..f6417d5458 --- /dev/null +++ b/meta-selftest/recipes-test/selftest-hardlink/selftest-hardlink/gdb.sh | |||
| @@ -0,0 +1,8 @@ | |||
| 1 | #!/bin/sh | ||
| 2 | gdb -q $1 <<'EOF' | ||
| 3 | b main | ||
| 4 | r | ||
| 5 | c | ||
| 6 | q | ||
| 7 | EOF | ||
| 8 | echo "" | ||
diff --git a/meta/lib/oeqa/selftest/cases/package.py b/meta/lib/oeqa/selftest/cases/package.py index ee6430a184..0a88dc25b3 100644 --- a/meta/lib/oeqa/selftest/cases/package.py +++ b/meta/lib/oeqa/selftest/cases/package.py | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | from oeqa.selftest.case import OESelftestTestCase | 1 | from oeqa.selftest.case import OESelftestTestCase |
| 2 | from oeqa.core.decorator.oeid import OETestID | 2 | from oeqa.core.decorator.oeid import OETestID |
| 3 | from oeqa.utils.commands import bitbake, get_bb_vars, get_bb_var | 3 | from oeqa.utils.commands import bitbake, get_bb_vars, get_bb_var, runqemu |
| 4 | import stat | 4 | import stat |
| 5 | import subprocess, os | 5 | import subprocess, os |
| 6 | import oe.path | 6 | import oe.path |
| @@ -98,7 +98,7 @@ class PackageTests(OESelftestTestCase): | |||
| 98 | def checkfiles(): | 98 | def checkfiles(): |
| 99 | # Recipe creates 4 hardlinked files, there is a copy in package/ and a copy in packages-split/ | 99 | # Recipe creates 4 hardlinked files, there is a copy in package/ and a copy in packages-split/ |
| 100 | # so expect 8 in total. | 100 | # so expect 8 in total. |
| 101 | self.assertEqual(os.stat(dest + "/selftest-hardlink" + bindir + "/hello").st_nlink, 8) | 101 | self.assertEqual(os.stat(dest + "/selftest-hardlink" + bindir + "/hello1").st_nlink, 8) |
| 102 | 102 | ||
| 103 | # Test a sparse file remains sparse | 103 | # Test a sparse file remains sparse |
| 104 | sparsestat = os.stat(dest + "/selftest-hardlink" + bindir + "/sparsetest") | 104 | sparsestat = os.stat(dest + "/selftest-hardlink" + bindir + "/sparsetest") |
| @@ -112,3 +112,38 @@ class PackageTests(OESelftestTestCase): | |||
| 112 | bitbake("selftest-hardlink -c package") | 112 | bitbake("selftest-hardlink -c package") |
| 113 | 113 | ||
| 114 | checkfiles() | 114 | checkfiles() |
| 115 | |||
| 116 | # Verify gdb to read symbols from separated debug hardlink file correctly | ||
| 117 | def test_gdb_hardlink_debug(self): | ||
| 118 | features = 'IMAGE_INSTALL_append = " selftest-hardlink"\n' | ||
| 119 | features += 'IMAGE_INSTALL_append = " selftest-hardlink-dbg"\n' | ||
| 120 | features += 'IMAGE_INSTALL_append = " selftest-hardlink-gdb"\n' | ||
| 121 | self.write_config(features) | ||
| 122 | bitbake("core-image-minimal") | ||
| 123 | |||
| 124 | def gdbtest(qemu, binary): | ||
| 125 | """ | ||
| 126 | Check that gdb ``binary`` to read symbols from separated debug file | ||
| 127 | """ | ||
| 128 | self.logger.info("gdbtest %s" % binary) | ||
| 129 | status, output = qemu.run_serial('/usr/bin/gdb.sh %s' % binary, timeout=60) | ||
| 130 | for l in output.split('\n'): | ||
| 131 | # Check debugging symbols exists | ||
| 132 | if '(no debugging symbols found)' in l: | ||
| 133 | self.logger.error("No debugging symbols found. GDB result:\n%s" % output) | ||
| 134 | return False | ||
| 135 | |||
| 136 | # Check debugging symbols works correctly | ||
| 137 | elif "Breakpoint 1, main () at hello.c:4" in l: | ||
| 138 | return True | ||
| 139 | |||
| 140 | self.logger.error("GDB result:\n%s: %s" % output) | ||
| 141 | return False | ||
| 142 | |||
| 143 | with runqemu('core-image-minimal') as qemu: | ||
| 144 | for binary in ['/usr/bin/hello1', | ||
| 145 | '/usr/bin/hello2', | ||
| 146 | '/usr/libexec/hello3', | ||
| 147 | '/usr/libexec/hello4']: | ||
| 148 | if not gdbtest(qemu, binary): | ||
| 149 | self.fail('GDB %s failed' % binary) | ||
