Date: Sun, 8 Nov 2009 10:26:03 +0100 From: Juergen Lock <nox@jelal.kn-bremen.de> To: Ian Lance Taylor <iant@google.com> Cc: Dirk Meyer <dinoex@FreeBSD.org>, Juergen Lock <nox@jelal.kn-bremen.de>, cvs-all@FreeBSD.org, ports-committers@FreeBSD.org, sprewell@jaggeri.com, cvs-ports@FreeBSD.org Subject: Re: cvs commit: ports/devel/gold Makefile Message-ID: <20091108092602.GA53221@triton8.kn-bremen.de> In-Reply-To: <mcr639nw6re.fsf@dhcp-172-17-9-151.mtv.corp.google.com> References: <200909211911.n8LJBlUK002650@repoman.freebsd.org> <20091103213538.GA61624@triton8.kn-bremen.de> <mcr639nw6re.fsf@dhcp-172-17-9-151.mtv.corp.google.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On Fri, Nov 06, 2009 at 03:52:37PM -0800, Ian Lance Taylor wrote: > Juergen Lock <nox@jelal.kn-bremen.de> writes: > > > Is this about `exec format error' (ENOEXEC)? We discussed this > > yesterday on irc (hi Sprewell! :) and found out that gold can produce > > executables that won't run on FreeBSD 7 and 8 too (for him it was > > chromium and some test executables on 7.2/i386, for me it was test > > executables on 8/amd64, I couldnt reproduce it here on 8 and 7 i386) - > > and after some debugging using qemu's gdbstub and a FreeBSD 8/amd64 > > livefs guest that I scp'd a problem executable into I found out that > > its this condition in sys/kern/imgact_elf.c that fails: > > http://fxr.watson.org/fxr/source/kern/imgact_elf.c#L721 > > > > 719 if (phdr[i].p_type == PT_INTERP) { > > 720 /* Path to interpreter */ > > 721 if (phdr[i].p_filesz > MAXPATHLEN || > > 722 phdr[i].p_offset + phdr[i].p_filesz > PAGE_SIZE) > > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ > > 723 return (ENOEXEC); > > 724 interp = imgp->image_header + phdr[i].p_offset; > > 725 break; > > 726 } > > 727 } > > > > (gdb) p/x phdr[1].p_offset > > $11 = 0x1174 > > (gdb) p/x phdr[1].p_filesz > > $12 = 0x15 > > (gdb) > > > > So it seems our kernel expects this data (path of the `image activator' > > aka shared linker aka /libexec/ld-elf.so.1) to be in the first page of > > the executable... > > Technically an ELF executable is permitted to have the PT_INTERP > segment anywhere it likes, so I think the kernel is in error here. > Yes it is a kind of... optimistic assumption. :) > However, it is good practice to put PT_INTERP in the first page of the > executable, and I have made that change to gold. So this issue should > be fixed in the next release of the GNU binutils. Cool, thank you! Juergen
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20091108092602.GA53221>