Bug 11123

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 chainAssignee: 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
$ bitbake rpi-hwup-image
WARNING: Host distribution "debian-9" has not been validated with this version of the build system; you may possibly experience unexpected failures. It is recommended that you use a tested distribution.
Parsing recipes: 100% |#########################################################################################################################################################| Time: 0:00:50
Parsing of 882 .bb files complete (0 cached, 882 parsed). 1360 targets, 78 skipped, 0 masked, 0 errors.
NOTE: Resolving any missing task queue dependencies
 
Build Configuration:
BB_VERSION        = "1.33.2"
BUILD_SYS         = "x86_64-linux"
NATIVELSBSTRING   = "debian-9"
TARGET_SYS        = "arm-poky-linux-gnueabi"
MACHINE           = "raspberrypi"
DISTRO            = "poky"
DISTRO_VERSION    = "2.2+snapshot-20170303"
TUNE_FEATURES     = "arm armv6 vfp arm1176jzfs callconvention-hard"
TARGET_FPU        = "hard"
meta
meta-poky
meta-yocto-bsp    = "master:32e1eac49201fb57ca0d26ef3d2012f7e8573663"
meta-raspberrypi  = "master:9788cffbf072d71d56d1948a5c0b63bbfed220ee"
 
Initialising tasks: 100% |######################################################################################################################################################| Time: 0:00:11
NOTE: Executing SetScene Tasks
NOTE: Executing RunQueue Tasks
ERROR: gcc-cross-initial-arm-6.3.0-r0 do_populate_sysroot: runstrip: '['strip', '--remove-section=.comment', '--remove-section=.note', '/ar0/pbarker/work/toganlabs/rpi/poky/build/tmp/work/x86_64-linux/gcc-cross-initial-arm/6.3.0-r0/sysroot-destdir/ar0/pbarker/work/toganlabs/rpi/poky/build/tmp/work/x86_64-linux/gcc-cross-initial-arm/6.3.0-r0/recipe-sysroot-native/usr/libexec/arm-poky-linux-gnueabi.gcc-cross-initial-arm/gcc/arm-poky-linux-gnueabi/6.3.0/install-tools/fixincl']' strip command failed with 1 (b'strip: /ar0/pbarker/work/toganlabs/rpi/poky/build/tmp/work/x86_64-linux/gcc-cross-initial-arm/6.3.0-r0/sysroot-destdir/ar0/pbarker/work/toganlabs/rpi/poky/build/tmp/work/x86_64-linux/gcc-cross-initial-arm/6.3.0-r0/recipe-sysroot-native/usr/libexec/arm-poky-linux-gnueabi.gcc-cross-initial-arm/gcc/arm-poky-linux-gnueabi/6.3.0/install-tools/stMfU86F: Not enough room for program headers, try linking with -N\nstrip:/ar0/pbarker/work/toganlabs/rpi/poky/build/tmp/work/x86_64-linux/gcc-cross-initial-arm/6.3.0-r0/sysroot-destdir/ar0/pbarker/work/toganlabs/rpi/poky/build/tmp/work/x86_64-linux/gcc-cross-initial-arm/6.3.0-r0/recipe-sysroot-native/usr/libexec/arm-poky-linux-gnueabi.gcc-cross-initial-arm/gcc/arm-poky-linux-gnueabi/6.3.0/install-tools/stMfU86F[.note.ABI-tag]: Bad value\n')

The same error is seen for gcc-cross-arm.

Apparently this has also been seen on the autobuilder from time-to-time but only on Debian 9. Not sure if its specific to an ARM target or not.

It's specific to using uninative. Disabling uninative causes the error to go away.
Comment 1 Richard Purdie 2017-03-04 16:08:36 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.
Comment 2 Richard Purdie 2017-03-04 16:10:00 UTC
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
Comment 3 Richard Purdie 2017-03-06 11:50:51 UTC
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.
Comment 4 Richard Purdie 2017-03-07 11:32:44 UTC
https://github.com/NixOS/patchelf/issues/10 seems pertinent to this issue. Sadly the patches there don't work for me though.