From 771d131c0cc0f1042ae40e480a3d291dea82afbb Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Mon, 24 Jul 2006 11:11:14 +0000 Subject: Add automatic generation of -dbg packages. These contain the debug symbols that are stripped from binaries and the symbols are linked to the original binaries via the gnu-debuglink section.If the -dbg packages are installed, oprofile and gdb will use them for symbol lookup. --- classes/package.bbclass | 26 +++++++++++++++++--------- conf/bitbake.conf | 5 ++++- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/classes/package.bbclass b/classes/package.bbclass index 97e091c254..eb3a0349cb 100644 --- a/classes/package.bbclass +++ b/classes/package.bbclass @@ -177,8 +177,10 @@ runstrip() { ro=1 chmod +w "$1" } + '${OBJCOPY}' --only-keep-debug "$1" "$1.dbg" '${STRIP}' "$1" st=$? + '${OBJCOPY}' --add-gnu-debuglink="$1.dbg" "$1" test -n "$ro" && chmod -w "$1" if test $st -ne 0 then @@ -249,6 +251,21 @@ python populate_packages () { bb.error("%s is listed in PACKAGES mutliple times. Undefined behaviour will result." % pkg) pkgs += pkg + if (bb.data.getVar('INHIBIT_PACKAGE_STRIP', d, 1) != '1'): + stripfunc = "" + for root, dirs, files in os.walk(dvar): + for f in files: + file = os.path.join(root, f) + if not os.path.islink(file) and isexec(file): + stripfunc += "\trunstrip %s || st=1\n" % (file) + if not stripfunc == "": + from bb import build + localdata = bb.data.createCopy(d) + # strip + bb.data.setVar('RUNSTRIP', '\tlocal st\n\tst=0\n%s\treturn $st' % stripfunc, localdata) + bb.data.setVarFlag('RUNSTRIP', 'func', 1, localdata) + bb.build.exec_func('RUNSTRIP', localdata) + for pkg in packages.split(): localdata = bb.data.createCopy(d) root = os.path.join(workdir, "install", pkg) @@ -273,7 +290,6 @@ python populate_packages () { bb.mkdirhier(root) filesvar = bb.data.getVar('FILES', localdata, 1) or "" files = filesvar.split() - stripfunc = "" for file in files: if os.path.isabs(file): file = '.' + file @@ -293,17 +309,9 @@ python populate_packages () { fpath = os.path.join(root,file) dpath = os.path.dirname(fpath) bb.mkdirhier(dpath) - if (bb.data.getVar('INHIBIT_PACKAGE_STRIP', d, 1) != '1') and not os.path.islink(file) and isexec(file): - stripfunc += "\trunstrip %s || st=1\n" % fpath ret = bb.movefile(file,fpath) if ret is None or ret == 0: raise bb.build.FuncFailed("File population failed") - if not stripfunc == "": - from bb import build - # strip - bb.data.setVar('RUNSTRIP', '\tlocal st\n\tst=0\n%s\treturn $st' % stripfunc, localdata) - bb.data.setVarFlag('RUNSTRIP', 'func', 1, localdata) - bb.build.exec_func('RUNSTRIP', localdata) del localdata os.chdir(workdir) diff --git a/conf/bitbake.conf b/conf/bitbake.conf index 7893fd75cf..d446d40b8f 100644 --- a/conf/bitbake.conf +++ b/conf/bitbake.conf @@ -102,7 +102,7 @@ PROVIDES = "" PROVIDES_prepend = "${P} ${PF} ${PN} " RPROVIDES = "" -PACKAGES = "${PN} ${PN}-doc ${PN}-dev ${PN}-locale" +PACKAGES = "${PN}-dbg ${PN} ${PN}-doc ${PN}-dev ${PN}-locale" FILES = "" FILES_${PN} = "${bindir} ${sbindir} ${libexecdir} ${libdir}/lib*.so.* \ ${sysconfdir} ${sharedstatedir} ${localstatedir} \ @@ -118,6 +118,8 @@ FILES_${PN}-dev = "${includedir} ${libdir}/lib*.so ${libdir}/*.la \ ${libdir}/*.a ${libdir}/*.o ${libdir}/pkgconfig \ /lib/*.a /lib/*.o ${datadir}/aclocal" FILES_${PN}-locale = "${datadir}/locale" +FILES_${PN}-dbg = "${bindir}/*.dbg ${sbindir}/*.dbg ${libexecdir}/*.dbg ${libdir}/lib*.so.*.dbg \ + /bin/*.dbg /sbin/*.dbg /lib/*.so*.dbg ${libdir}/${PN}/*.dbg" # File manifest @@ -223,6 +225,7 @@ export AR = "${HOST_PREFIX}ar" export AS = "${HOST_PREFIX}as" export RANLIB = "${HOST_PREFIX}ranlib" export STRIP = "${HOST_PREFIX}strip" +export OBJCOPY = "${HOST_PREFIX}objcopy" export BUILD_CC = "${CCACHE}${BUILD_PREFIX}gcc ${BUILD_CC_ARCH}" export BUILD_CXX = "${CCACHE}${BUILD_PREFIX}g++ ${BUILD_CC_ARCH}" -- cgit v1.2.3