Hi Nicholas, >>> The boot wrapper performs its own relocations and does not require >>> PT_INTERP segment. >>> >>> Without this option, binutils 2.28 and newer tries to create a program >>> header segment due to PT_INTERP, and the link fails because there is no >>> space for it. >> >> 2.28 is not released yet though is it? >> >> So can we just declare versions with that behaviour broken? > > No it's not released yet, but I don't know if it's due entirely to binutils > bug. Let's see what Nick thinks.
Well the patch that caused this problem was an attempt to fix the linker so that it would enforce the ELF standard. Prior to the patch the linker would silently create binaries that violated the standard and which, at least for the people reporting the problem in binutils PR 20815, failed to execute. It now appears however that some programs, including the boot wrapper and the Linux kernel, may actually rely upon non-standard ELF binaries being created. Before I revert the patch however, I would like to ask... >>> +# Do not include PT_INTERP segment when linking pie. Non-pie linking >>> +# just ignores this option. >>> +LD_VERSION=$(${CROSS}ld --version | $srctree/scripts/ld-version.sh) >>> +LD_NO_DL_MIN_VERSION=$(echo 2.26 | $srctree/scripts/ld-version.sh) >>> +if [ "$LD_VERSION" -ge "$LD_NO_DL_MIN_VERSION" ] ; then >>> + nodl="--no-dynamic-linker" >>> +fi ... this actually seems like a better fix to me. If you do not want the PT_INTERP segment, then telling this linker this is a good idea. So wouldn't a patch like this be a better solution to the problem ? Cheers Nick