On Fri, Nov 06, 2009 at 03:52:37PM -0800, Ian Lance Taylor wrote:
> Juergen Lock <[email protected]> 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
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/cvs-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to