Subject: Re: Solaris emulation problems
To: Eduardo Horvath <eeh@turbolinux.com>
From: Alexander Strauss <strauss@astracom.net>
List: port-sparc
Date: 06/08/2000 23:17:11
Eduardo,

you were right - some of the Solaris libraries didn't have the right
permissions. I would have double-checked if the error messages would
have suggested a problem with dynamic linking, but the "exec format
error" pointed to a generic kernel problem and so brought me onto the
wrong way.

Thanks for your assistance :-)

Regards,
Alex

Eduardo Horvath wrote:
> 
> On Thu, 8 Jun 2000, Alexander Strauss wrote:
> 
> > Eduardo Horvath wrote:
> > >
> > > On Thu, 8 Jun 2000, Alexander Strauss wrote:
> > >
> > > > Hi there,
> > > >
> > > > I've setup a Sparc Classic with Solaris emulation as described in
> > > > compat_svr4(8) - the Solaris files are located in /emul/svr4, and my
> > > > kernel build includes the options "COMPAT_SVR4" and "EXEC_ELF32".
> > > > Anyway, if I try to execute a simple Solaris 7 program, the kernel fails
> > > > to execute it:
> > > >
> > > > alex@modena:/mnt/bin:(5)> ./less
> > > > ./less: Exec format error. Binary file not executable.
> > > > alex@modena:/mnt/bin:(6)>
> > > >
> > > > Any suggestions?
> > >
> > > Make sure it's a 32-bit ELF executable and not 64-bit ELF:
> > >
> > >         file ./less
> > >
> > > You cannot run 64-bit binaries on a 32-bit machine.
> > >
> > > If that checks out, then try ldd to make sure all the libraries can be
> > > found and ktrace to find out where it's dying.
> > >
> > > If it dies inside one execve then try using objdump on it to dump the ELF
> > > headers.
> > >
> > > Eduardo Horvath
> >
> >
> > alex@modena:/tmp:(17)> file /mnt/bin/less
> > /mnt/bin/less: ELF 32-bit MSB executable, SPARC, version 1, dynamically
> > linked (uses shared libs), not stripped
> > alex@modena:/tmp:(18)> ldd /mnt/bin/less
> > ldd: /mnt/bin/less: not a dynamic executable
> > alex@modena:/tmp:(19)> ktrace /mnt/bin/less
> > /mnt/bin/less: 1: Syntax error: "(" unexpected
> > alex@modena:/tmp:(20)> objdump --section-headers /mnt/bin/less
> >
> > /mnt/bin/less:     file format elf32-sparc
> >
> > Sections:
> > Idx Name          Size      VMA       LMA       File off  Algn
> >   0 .interp       00000011  000100d4  000100d4  000000d4  2**0
> >                   CONTENTS, ALLOC, LOAD, READONLY, DATA
> >   1 .hash         00000e1c  000100e8  000100e8  000000e8  2**2
> >                   CONTENTS, ALLOC, LOAD, READONLY, DATA
> >   2 .dynsym       00001bc0  00010f04  00010f04  00000f04  2**2
> >                   CONTENTS, ALLOC, LOAD, READONLY, DATA
> >   3 .dynstr       00001f47  00012ac4  00012ac4  00002ac4  2**0
> >                   CONTENTS, ALLOC, LOAD, READONLY, DATA
> >   4 .SUNW_version 00000040  00014a0c  00014a0c  00004a0c  2**2
> >                   CONTENTS, ALLOC, LOAD, READONLY, DATA
> >   5 .rela.bss     00000018  00014a4c  00014a4c  00004a4c  2**2
> >                   CONTENTS, ALLOC, LOAD, READONLY, DATA
> >   6 .rela.plt     0000030c  00014a64  00014a64  00004a64  2**2
> >                   CONTENTS, ALLOC, LOAD, READONLY, DATA
> >   7 .text         0000f59c  00014d70  00014d70  00004d70  2**2
> >                   CONTENTS, ALLOC, LOAD, READONLY, CODE
> >   8 .init         0000001c  0002430c  0002430c  0001430c  2**2
> >                   CONTENTS, ALLOC, LOAD, READONLY, CODE
> >   9 .fini         00000014  00024328  00024328  00014328  2**2
> >                   CONTENTS, ALLOC, LOAD, READONLY, CODE
> >  10 .rodata       000045c3  00024340 00024340 00014340 2**3
> >                   CONTENTS, ALLOC, LOAD, READONLY, DATA
> >  11 .got          00000020  00038904  00038904  00018904  2**2
> >                   CONTENTS, ALLOC, LOAD, DATA
> >  12 .plt          00000340  00038924  00038924  00018924  2**2
> >                   CONTENTS, ALLOC, LOAD, CODE
> >  13 .dynamic      000000c0  00038c64  00038c64  00018c64  2**2
> >                   CONTENTS, ALLOC, LOAD, DATA
> >  14 .data         00000a64  00038d28  00038d28  00018d28  2**3
> >                   CONTENTS, ALLOC, LOAD, DATA
> >  15 .ctors        00000008  0003978c  0003978c  0001978c  2**2
> >                   CONTENTS, ALLOC, LOAD, DATA
> >  16 .dtors        00000008  00039794  00039794  00019794  2**2
> >                   CONTENTS, ALLOC, LOAD, DATA
> >  17 .eh_frame     00000154  0003979c  0003979c  0001979c  2**2
> >                   CONTENTS, ALLOC, LOAD, DATA
> >  18 .bss          00001fa0  000398f0  000398f0  000198f0  2**3
> >                   ALLOC
> >  19 .comment      000009d6  00000000  00000000  0001e6ec  2**0
> >                   CONTENTS, READONLY
> >  20 .stab.index   00000024  00000000  00000000  0001f0c4  2**2
> >                   CONTENTS, READONLY, DEBUGGING
> >  21 .stab         0002af00  00000000  00000000  0001f0e8  2**2
> >                   CONTENTS, READONLY, DEBUGGING
> >  22 .stab.indexstr 00000171  00000000  00000000  0004a0c6  2**0
> >                   CONTENTS, READONLY, DEBUGGING
> >  23 .stabstr      00046c4e  00000000  00000000  0004a237  2**0
> >                   CONTENTS, READONLY, DEBUGGING
> >
> > Interesting, eh? Probably a kernel configuration problem, but I couldn't
> > find one...same behaviour with any other Solaris binary I've tested.
> 
> Interesting.  Looks O.K. to me.
> 
>         /mnt/bin/less: 1: Syntax error: "(" unexpected
> 
> is because exec_elf() and exec_aout() failed so exec_script() is trying to
> run the binary.
> 
> First of all it is a dynamic executable, so exec_elf() will try to load
> any .intrp sections, and if that fails exec_elf() will fail.  Can you try
> a static binary and see how that works?
> 
> If a static binary works then it's probably some issue with /emul/svr4 and
> possibly LD_LIBRARY_PATH.
> 
> If the static binary does not work then it is some kernel issue and you
> may need to instrument exec_elf() and other parts of execve() to find out
> why it's failing.
> 
> Eduardo Horvath

-- 
best regards,
Alexander Strauss <strauss@astracom.net>