summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--meta-selftest/recipes-test/selftest-hardlink/selftest-hardlink.bb22
-rwxr-xr-xmeta-selftest/recipes-test/selftest-hardlink/selftest-hardlink/gdb.sh8
-rw-r--r--meta/lib/oeqa/selftest/cases/package.py39
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
3LICENSE = "MIT" 3LICENSE = "MIT"
4 4
5SRC_URI = "file://hello.c" 5SRC_URI = "file://hello.c \
6 file://gdb.sh \
7"
6 8
7S = "${WORKDIR}" 9S = "${WORKDIR}"
8 10
9do_compile () { 11do_compile () {
10 ${CC} hello.c -o hello ${CFLAGS} ${LDFLAGS} 12 ${CC} hello.c -o hello1 ${CFLAGS} ${LDFLAGS}
11} 13}
12 14
13do_install () { 15do_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
28RDEPENDS_${PN}-gdb += "gdb"
29PACKAGES =+ "${PN}-gdb"
30FILES_${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
2gdb -q $1 <<'EOF'
3b main
4r
5c
6q
7EOF
8echo ""
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 @@
1from oeqa.selftest.case import OESelftestTestCase 1from oeqa.selftest.case import OESelftestTestCase
2from oeqa.core.decorator.oeid import OETestID 2from oeqa.core.decorator.oeid import OETestID
3from oeqa.utils.commands import bitbake, get_bb_vars, get_bb_var 3from oeqa.utils.commands import bitbake, get_bb_vars, get_bb_var, runqemu
4import stat 4import stat
5import subprocess, os 5import subprocess, os
6import oe.path 6import 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)