Date: Fri, 15 Apr 2011 11:47:20 +0530 From: "Jayachandran C." <c.jayachandran@gmail.com> To: Andrew Duane <aduane@juniper.net> Cc: "mips@freebsd.org" <mips@freebsd.org> Subject: Re: Trouble with dynamic executables Message-ID: <BANLkTimoc9Xd50LgiubDJGKOiUjztF-EfQ@mail.gmail.com> In-Reply-To: <AC6674AB7BC78549BB231821ABF7A9AEB53018A224@EMBX01-WF.jnpr.net> References: <AC6674AB7BC78549BB231821ABF7A9AEB53018A09F@EMBX01-WF.jnpr.net> <BANLkTi=Jw=q5sUVs8-sEG09nSHwFbMFKjw@mail.gmail.com> <AC6674AB7BC78549BB231821ABF7A9AEB53018A224@EMBX01-WF.jnpr.net>
next in thread | previous in thread | raw e-mail | index | archive | help
On Fri, Apr 15, 2011 at 12:47 AM, Andrew Duane <aduane@juniper.net> wrote: > I've figured out what the problem is. The elf header of a sample dynamic = executable shows: > > Elf file type is EXEC (Executable file) > Entry point 0x1200028f0 > There are 7 program headers, starting at offset 64 > > Program Headers: > =A0Type =A0 =A0 =A0 =A0 =A0 Offset =A0 =A0 =A0 =A0 =A0 =A0 VirtAddr =A0 = =A0 =A0 =A0 =A0 PhysAddr =A0 =A0 =A0 =A0 =A0 FileSiz =A0 =A0 =A0 =A0 =A0 = =A0MemSiz =A0 =A0 =A0 =A0 =A0 =A0 =A0Flags =A0Align > =A0PHDR =A0 =A0 =A0 =A0 =A0 0x0000000000000040 0x0000000120000040 0x00000= 00120000040 0x0000000000000188 0x0000000000000188 =A0R E =A0 =A08 > =A0INTERP =A0 =A0 =A0 =A0 0x0000000000012788 0x0000000120012788 0x0000000= 120012788 0x0000000000000015 0x0000000000000015 =A0R =A0 =A0 =A01 > =A0 =A0 =A0[Requesting program interpreter: /libexec/ld-elf.so.1] > =A0LOAD =A0 =A0 =A0 =A0 =A0 0x0000000000000000 0x0000000120000000 0x00000= 00120000000 0x00000000000127bc 0x00000000000127bc =A0R E =A0 =A010000 > =A0LOAD =A0 =A0 =A0 =A0 =A0 0x0000000000013000 0x0000000120023000 0x00000= 00120023000 0x00000000000017d8 0x0000000000003c28 =A0RW =A0 =A0 10000 > =A0DYNAMIC =A0 =A0 =A0 =A00x0000000000000808 0x0000000120000808 0x0000000= 120000808 0x00000000000001e0 0x00000000000001e0 =A0RWE =A0 =A08 > =A0NOTE =A0 =A0 =A0 =A0 =A0 0x00000000000127a4 0x00000001200127a4 0x00000= 001200127a4 0x0000000000000018 0x0000000000000018 =A0R =A0 =A0 =A04 > =A0NULL =A0 =A0 =A0 =A0 =A0 0x0000000000000000 0x0000000000000000 0x00000= 00000000000 0x0000000000000000 0x0000000000000000 =A0 =A0 =A0 =A0 8 > > Note section 1 the INTERP header: the offset is 0x12788. There's a check = in the ELF64 image activator to see if the offset is outside the first page= and returns ENOEXEC. The exec path reads in the first page first, and trie= s to figure out what to do with the rest. So if the interpreter name isn't = in the first page, it can't decode it. > > This is a toolchain issue, or some setup issue. This may be a mip64r2 issue. I use the mips64 config and 32 and 64 bit dynamic executables have been working for a long time. For reference, here is my setup: Environment for buildworld: export TARGET=3Dmips export TARGET_ARCH=3Dmips64eb export TARGET_CPUTYPE=3Dmips64 Makeoptions in conf file (from XLP64) makeoptions KERNLOADADDR=3D0xffffffff80100000 makeoptions ARCH_FLAGS=3D"-march=3Dmips64 -mabi=3D64" options ISA_MIPS64 And on the XLR engineering board: xlrboard# uname -a FreeBSD xlrboard.netlogicmicro.com 9.0-CURRENT FreeBSD 9.0-CURRENT #2 r220649M: Fri Apr 15 11:27:57 IST 2011 jc@daemon.razamicroelectronics.com:/var/obj/jc/freebsd-obj-64/mips.mips64eb= /work/jayachandranc/freebsd-devel-clean/sys/XLRJC64 mips xlrboard# ldd /bin/ls /bin/ls: libutil.so.9 =3D> /lib/libutil.so.9 (0x16024d000) libncurses.so.8 =3D> /lib/libncurses.so.8 (0x16035f000) libc.so.7 =3D> /lib/libc.so.7 (0x1604b3000) xlrboard# readelf -a /bin/ls ELF Header: Magic: 7f 45 4c 46 02 02 01 09 00 00 00 00 00 00 00 00 Class: ELF64 Data: 2's complement, big endian Version: 1 (current) OS/ABI: UNIX - FreeBSD ABI Version: 0 Type: EXEC (Executable file) Machine: MIPS R3000 Version: 0x1 Entry point address: 0x120001dd0 Start of program headers: 64 (bytes into file) Start of section headers: 34808 (bytes into file) Flags: 0x60000007, noreorder, pic, cpic, mips= 64 Size of this header: 64 (bytes) Size of program headers: 56 (bytes) Number of program headers: 6 Size of section headers: 64 (bytes) Number of section headers: 29 Section header string table index: 28 Section Headers: [Nr] Name Type Address Offset Size EntSize Flags Link Info Align [ 0] NULL 0000000000000000 00000000 0000000000000000 0000000000000000 0 0 0 [ 1] .interp PROGBITS 0000000120000190 00000190 0000000000000015 0000000000000000 A 0 0 1 [ 2] .note.ABI-tag NOTE 00000001200001a8 000001a8 0000000000000018 0000000000000000 A 0 0 4 [ 3] .MIPS.options MIPS_OPTIONS 00000001200001c0 000001c0 0000000000000168 0000000000000001 Ao 0 0 8 [ 4] .dynamic DYNAMIC 0000000120000328 00000328 0000000000000200 0000000000000010 A 7 0 8 [ 5] .hash HASH 0000000120000528 00000528 0000000000000450 0000000000000004 A 6 0 8 [ 6] .dynsym DYNSYM 0000000120000978 00000978 .... The .interp offset is reasonable here... JC.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?BANLkTimoc9Xd50LgiubDJGKOiUjztF-EfQ>