| Summary: | Stripping fixincl fails in gcc-cross-arm and gcc-cross-initial-arm do_populate_sysroot on Debian 9 | ||
|---|---|---|---|
| Product: | [Build System, Metadata & Runtime] OE-Core | Reporter: | Paul Barker <paul> |
| Component: | devtools / tool chain | Assignee: | Richard Purdie <richard.purdie> |
| Status: | RESOLVED FIXED | QA Contact: | |
| Severity: | normal | ||
| Priority: | Medium+ | CC: | meta.mr.watcher, meta.watcher, richard.purdie, ross.burton, stephano |
| Version: | unspecified | ||
| Target Milestone: | 2.3 M3 | ||
| Hardware: | x86 | ||
| OS: | arm | ||
| Whiteboard: | |||
| OS type for building Yocto: | --- | Type of Regression: | --- |
| Verified: | Documentation change: | Don't know | |
| Bug Depends on: | |||
| Bug Blocks: | 11009 | ||
|
Description
Paul Barker
2017-03-03 17:12:28 UTC
I have some further debug: richard@jet:/media/build1/poky/build/tmp/work/x86_64-linux/gcc-crosssdk-x86_64-pokysdk-linux/6.3.0-r0/gcc-6.3.0/build.x86_64-linux.x86_64-pokysdk-linux/fixincludes$ rm fixinclrm: cannot remove 'fixincl': No such file or directory richard@jet:/media/build1/poky/build/tmp/work/x86_64-linux/gcc-crosssdk-x86_64-pokysdk-linux/6.3.0-r0/gcc-6.3.0/build.x86_64-linux.x86_64-pokysdk-linux/fixincludes$ gcc -isystem/media/build1/poky/build/tmp/work/x86_64-linux/gcc-crosssdk-x86_64-pokysdk-linux/6.3.0-r0/recipe-sysroot-native/usr/include -O2 -pipe -L/media/build1/poky/build/tmp/work/x86_64-linux/gcc-crosssdk-x86_64-pokysdk-linux/6.3.0-r0/recipe-sysroot-native/usr/lib -L/media/build1/poky/build/tmp/work/x86_64-linux/gcc-crosssdk-x86_64-pokysdk-linux/6.3.0-r0/recipe-sysroot-native/lib -Wl,-rpath-link,/media/build1/poky/build/tmp/work/x86_64-linux/gcc-crosssdk-x86_64-pokysdk-linux/6.3.0-r0/recipe-sysroot-native/usr/lib -Wl,-rpath-link,/media/build1/poky/build/tmp/work/x86_64-linux/gcc-crosssdk-x86_64-pokysdk-linux/6.3.0-r0/recipe-sysroot-native/lib -Wl,-rpath,/media/build1/poky/build/tmp/work/x86_64-linux/gcc-crosssdk-x86_64-pokysdk-linux/6.3.0-r0/recipe-sysroot-native/usr/lib -Wl,-rpath,/media/build1/poky/build/tmp/work/x86_64-linux/gcc-crosssdk-x86_64-pokysdk-linux/6.3.0-r0/recipe-sysroot-native/lib -Wl,-O1 -o fixincl fixincl.o fixtests.o fixfixes.o server.o procopen.o fixlib.o fixopts.o ../libiberty/libiberty.a richard@jet:/media/build1/poky/build/tmp/work/x86_64-linux/gcc-crosssdk-x86_64-pokysdk-linux/6.3.0-r0/gcc-6.3.0/build.x86_64-linux.x86_64-pokysdk-linux/fixincludes$ /media/build1/poky/build/tmp/sysroots-uninative/x86_64-linux/usr/bin/patchelf-uninative --set-interpreter /media/build1/poky/build/tmp/sysroots-uninative/x86_64-linux/lib/ld-linux-x86-64.so.2 fixincl warning: working around a Linux kernel bug by creating a hole of 2027520 bytes in ‘fixincl’ richard@jet:/media/build1/poky/build/tmp/work/x86_64-linux/gcc-crosssdk-x86_64-pokysdk-linux/6.3.0-r0/gcc-6.3.0/build.x86_64-linux.x86_64-pokysdk-linux/fixincludes$ strip fixincl strip: stKzBygr: Not enough room for program headers, try linking with -N strip:stKzBygr[.note.ABI-tag]: Bad value richard@jet:/media/build1/poky/build/tmp/work/x86_64-linux/gcc-crosssdk-x86_64-pokysdk-linux/6.3.0-r0/gcc-6.3.0/build.x86_64-linux.x86_64-pokysdk-linux/fixincludes$ Basically, if you link fixincl, then change the interpreter on some systems, it increases the size of the binary such that it can't then be stripped. This was from an Ubuntu 16.10 system. Something about the inflated binaries patchelf generates on some systems seems to break this. Also note we are seeing this on the autobuilders: https://autobuilder.yocto.io/builders/buildtools/builds/178 from buildtools on debian-testing on the new AB cluster Further updates: What triggers whether a binary is ET_DYN or not is whether its linked with the pie flag. If pie linking is chosen, the binary becomes ET_DYN and the workaround in patchelf kicks in. I'm guessing some distros like debian-testing and ubuntu 16.10 have ld which does this by default. https://github.com/NixOS/patchelf/issues/10 seems pertinent to this issue. Sadly the patches there don't work for me though. |