diff options
author | Richard Purdie <richard@openedhand.com> | 2006-07-24 08:35:37 +0000 |
---|---|---|
committer | Richard Purdie <richard@openedhand.com> | 2006-07-24 08:35:37 +0000 |
commit | 2ca73b57dc7df958ce80bfa3c2e3dc3fc18950b5 (patch) | |
tree | 3e901319353dfdc6d8175b9d65a021943ae91a2c /meta/classes/package.bbclass | |
parent | 23b93ceb820de17f28c2bf2bf114c0fca70cf159 (diff) | |
download | poky-2ca73b57dc7df958ce80bfa3c2e3dc3fc18950b5.tar.gz |
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.
git-svn-id: https://svn.o-hand.com/repos/poky/trunk@546 311d38ba-8fff-0310-9ca6-ca027cbcb966
Diffstat (limited to 'meta/classes/package.bbclass')
-rw-r--r-- | meta/classes/package.bbclass | 26 |
1 files changed, 17 insertions, 9 deletions
diff --git a/meta/classes/package.bbclass b/meta/classes/package.bbclass index 9edcc1e5ed..6365748956 100644 --- a/meta/classes/package.bbclass +++ b/meta/classes/package.bbclass | |||
@@ -177,8 +177,10 @@ runstrip() { | |||
177 | ro=1 | 177 | ro=1 |
178 | chmod +w "$1" | 178 | chmod +w "$1" |
179 | } | 179 | } |
180 | '${OBJCOPY}' --only-keep-debug "$1" "$1.dbg" | ||
180 | '${STRIP}' "$1" | 181 | '${STRIP}' "$1" |
181 | st=$? | 182 | st=$? |
183 | '${OBJCOPY}' --add-gnu-debuglink="$1.dbg" "$1" | ||
182 | test -n "$ro" && chmod -w "$1" | 184 | test -n "$ro" && chmod -w "$1" |
183 | if test $st -ne 0 | 185 | if test $st -ne 0 |
184 | then | 186 | then |
@@ -249,6 +251,21 @@ python populate_packages () { | |||
249 | bb.error("%s is listed in PACKAGES mutliple times. Undefined behaviour will result." % pkg) | 251 | bb.error("%s is listed in PACKAGES mutliple times. Undefined behaviour will result." % pkg) |
250 | pkgs += pkg | 252 | pkgs += pkg |
251 | 253 | ||
254 | if (bb.data.getVar('INHIBIT_PACKAGE_STRIP', d, 1) != '1'): | ||
255 | stripfunc = "" | ||
256 | for root, dirs, files in os.walk(dvar): | ||
257 | for f in files: | ||
258 | file = os.path.join(root, f) | ||
259 | if not os.path.islink(file) and isexec(file): | ||
260 | stripfunc += "\trunstrip %s || st=1\n" % (file) | ||
261 | if not stripfunc == "": | ||
262 | from bb import build | ||
263 | localdata = bb.data.createCopy(d) | ||
264 | # strip | ||
265 | bb.data.setVar('RUNSTRIP', '\tlocal st\n\tst=0\n%s\treturn $st' % stripfunc, localdata) | ||
266 | bb.data.setVarFlag('RUNSTRIP', 'func', 1, localdata) | ||
267 | bb.build.exec_func('RUNSTRIP', localdata) | ||
268 | |||
252 | for pkg in packages.split(): | 269 | for pkg in packages.split(): |
253 | localdata = bb.data.createCopy(d) | 270 | localdata = bb.data.createCopy(d) |
254 | root = os.path.join(workdir, "install", pkg) | 271 | root = os.path.join(workdir, "install", pkg) |
@@ -273,7 +290,6 @@ python populate_packages () { | |||
273 | bb.mkdirhier(root) | 290 | bb.mkdirhier(root) |
274 | filesvar = bb.data.getVar('FILES', localdata, 1) or "" | 291 | filesvar = bb.data.getVar('FILES', localdata, 1) or "" |
275 | files = filesvar.split() | 292 | files = filesvar.split() |
276 | stripfunc = "" | ||
277 | for file in files: | 293 | for file in files: |
278 | if os.path.isabs(file): | 294 | if os.path.isabs(file): |
279 | file = '.' + file | 295 | file = '.' + file |
@@ -293,17 +309,9 @@ python populate_packages () { | |||
293 | fpath = os.path.join(root,file) | 309 | fpath = os.path.join(root,file) |
294 | dpath = os.path.dirname(fpath) | 310 | dpath = os.path.dirname(fpath) |
295 | bb.mkdirhier(dpath) | 311 | bb.mkdirhier(dpath) |
296 | if (bb.data.getVar('INHIBIT_PACKAGE_STRIP', d, 1) != '1') and not os.path.islink(file) and isexec(file): | ||
297 | stripfunc += "\trunstrip %s || st=1\n" % fpath | ||
298 | ret = bb.movefile(file,fpath) | 312 | ret = bb.movefile(file,fpath) |
299 | if ret is None or ret == 0: | 313 | if ret is None or ret == 0: |
300 | raise bb.build.FuncFailed("File population failed") | 314 | raise bb.build.FuncFailed("File population failed") |
301 | if not stripfunc == "": | ||
302 | from bb import build | ||
303 | # strip | ||
304 | bb.data.setVar('RUNSTRIP', '\tlocal st\n\tst=0\n%s\treturn $st' % stripfunc, localdata) | ||
305 | bb.data.setVarFlag('RUNSTRIP', 'func', 1, localdata) | ||
306 | bb.build.exec_func('RUNSTRIP', localdata) | ||
307 | del localdata | 315 | del localdata |
308 | os.chdir(workdir) | 316 | os.chdir(workdir) |
309 | 317 | ||