Subject: Strange behaviour of Linux emulation and amd
To: None <port-i386@NetBSD.ORG>
From: Jesus M. Gonzalez <jgb@gsyc.inf.uc3m.es>
List: port-i386
Date: 05/23/1997 00:50:47
	Hi! I'm suspecting some strange interaction of binary emulation
with amd. I have a kernel with COMPAT_LINUX enabled, and /emul
as a link to an amd-mounted NFS filesystem. Linux binaries seem
to work pretty well when I reboot without amd (and manually mounting
/emul), but I cannot do anything with dymanically linked Linux
binaries when I run amd (statically linked binaries also seem to work,
in both situations).

	With /emul mounted by amd, I get the following (being ./gcc a
Linux dynamic binary):

% ./gcc
./gcc: Exec format error. Wrong Architecture.

	If I try to run Linux ldd on it (ldd is statically linked),
I get:

% ./ldd ./gcc
./ldd: can't execute ./gcc (Exec format error)

	ktrace/kdump doesn't produce valuable information (at least
for me):

% ktrace -tc ./gcc
./gcc: 1: Syntax error: "(" unexpected

(see at the end of the message for result of kdump ./gcc).

	Has anybody seen something similar? Am I missing something?
(if this hasn't been already reported, I'll submit a pr, anyway).

	All of this is with vanilla 1.2.1/i386.

	Thanks in advance,

		Jesus.

   490 ktrace   RET   ktrace 0
   490 ktrace   CALL  execve(0xf7bfd91f,0xf7bfd8b0,0xf7bfd8b8)
   490 ktrace   RET   execve -1 errno 8 Exec format error
   490 ktrace   CALL  __sysctl(0xf7bfd3e0,0x2,0xb198,0xf7bfd3e8,0,0)
   490 ktrace   RET   __sysctl 0
   490 ktrace   CALL  break(0xb1d0)
   490 ktrace   RET   break 0
   490 ktrace   CALL  break(0xbffc)
   490 ktrace   RET   break 0
   490 ktrace   CALL  break(0xcffc)
   490 ktrace   RET   break 0
   490 ktrace   CALL  execve(0x2272,0xc000,0xf7bfd8b8)
   490 sh       RET   execve 0
   490 sh       CALL  getpid
   490 sh       RET   getpid 490/0x1ea
   490 sh       CALL  geteuid
   490 sh       RET   geteuid 213/0xd5
   490 sh       CALL  __sysctl(0xf7bfd7e8,0x2,0x4b65c,0xf7bfd7f0,0,0)
   490 sh       RET   __sysctl 0
   490 sh       CALL  break(0x4c2a8)
   490 sh       RET   break 0
   490 sh       CALL  break(0x4cffc)
   490 sh       RET   break 0
   490 sh       CALL  break(0x4dffc)
   490 sh       RET   break 0
   490 sh       CALL  open(0xf7bfd91f,0,0xf7bfd8b4)
   490 sh       RET   open 3
   490 sh       CALL  fcntl(0x3,0,0xa)
   490 sh       RET   fcntl 10/0xa
   490 sh       CALL  close(0x3)
   490 sh       RET   close 0
   490 sh       CALL  break(0x4effc)
   490 sh       RET   break 0
   490 sh       CALL  stat(0x26d24,0xf7bfd6c8)
   490 sh       RET   stat 0
   490 sh       CALL  lstat(0x4e000,0xf7bfd6c8)
   490 sh       RET   lstat 0
   490 sh       CALL  open(0x4e000,0x4,0xf7bfd91c)
   490 sh       RET   open 3
   490 sh       CALL  fstat(0x3,0xf7bfd60c)
   490 sh       RET   fstat 0
   490 sh       CALL  fcntl(0x3,0x2,0x1)
   490 sh       RET   fcntl 0
   490 sh       CALL  break(0x4fffc)
   490 sh       RET   break 0
   490 sh       CALL  fstatfs(0x3,0xf7bfd50c)
   490 sh       RET   fstatfs 0
   490 sh       CALL  break(0x51ffc)
   490 sh       RET   break 0
   490 sh       CALL  fstat(0x3,0xf7bfd6c8)
   490 sh       RET   fstat 0
   490 sh       CALL  getdirentries(0x3,0x50000,0x1000,0x4f014)
   490 sh       RET   getdirentries 512/0x200
   490 sh       CALL  lstat(0x4e000,0xf7bfd6c8)
   490 sh       RET   lstat 0
   490 sh       CALL  lseek(0x3,0,0,0,0)
   490 sh       RET   lseek 0
   490 sh       CALL  close(0x3)
   490 sh       RET   close 0
   490 sh       CALL  lstat(0x4e000,0xf7bfd6c8)
   490 sh       RET   lstat 0
   490 sh       CALL  break(0x52ffc)
   490 sh       RET   break 0
   490 sh       CALL  getuid
   490 sh       RET   getuid 213/0xd5
   490 sh       CALL  geteuid
   490 sh       RET   geteuid 213/0xd5
   490 sh       CALL  getgid
   490 sh       RET   getgid 21/0x15
   490 sh       CALL  getegid
   490 sh       RET   getegid 21/0x15
   490 sh       CALL  read(0xa,0x4bc58,0x3ff)
   490 sh       RET   read 1023/0x3ff
   490 sh       CALL  break(0x53ffc)
   490 sh       RET   break 0
   490 sh       CALL  write(0x2,0x53000,0x27)
   490 sh       RET   write 39/0x27
   490 sh       CALL  exit(0x2)

-- 
Jesus M. Gonzalez Barahona         | addr.:  c/ Butarque, 15
Grupo de Sistemas y Comunicaciones |         28911 Leganes, Spain
Departamento de Informatica        | tel: +34 1 624 94 58
Universidad Carlos III de Madrid   | fax: +34 1 624 94 30
e-mail: jgb@gsyc.inf.uc3m.es       | www: http://www.gsyc.inf.uc3m.es/~jgb