Re: 386 'ls' gets SIGILL iff /proc is mounted

Eric Buddington (eric@sparrow.nad.adelphia.net)
Wed, 28 Mar 2001 12:48:45 -0500


On Tue, Mar 27, 2001 at 09:22:19AM -0500, Brian Gerst wrote:
> Try running ls under gdb and find out what instruction is causing SIGILL
> (illegal opcode). It is possible that it was compiled to use
> instructions available only on later processors, or it could potentially
> be a bug in the math emulation code.

OK. Context again (since I clipped preceding notes): 386SX/20 nfsroot,
getting SIGILL on lots of processes, math emulation is enabled, ls and
glibc were compiled with '-march=i386 -mcpu=i386' to be sure.

I include two gdb dumps below, one from ls, one from mount, both
died with SIGILL. If these were indeed illegal instructions on 386,
I'll take my woes to the glibc folks and stop bothering y'all.

-Eric

-------------------

bash-2.04$ gdb /tftpboot/bin/ls core
GNU gdb 5.0
Copyright 2000 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "i586-pc-linux-gnu"...
Core was generated by `ls -l'.
Program terminated with signal 4, Illegal instruction.
Reading symbols from /packages/glibc/2.2.2/i386/lib/libc.so.6...done.
Loaded symbols for /packages/glibc/2.2.2/i386/lib/libc.so.6
Reading symbols from /lib/ld-linux.so.2...done.
Loaded symbols for /lib/ld-linux.so.2
#0 0x401248b4 in compare_and_swap ()
from /packages/glibc/2.2.2/i386/lib/libc.so.6
(gdb) disassemble
Dump of assembler code for function compare_and_swap:
0x401248a4 <compare_and_swap>: push %ebp
0x401248a5 <compare_and_swap+1>: mov %esp,%ebp
0x401248a7 <compare_and_swap+3>: sub $0x24,%esp
0x401248aa <compare_and_swap+6>: push %esi
0x401248ab <compare_and_swap+7>: mov 0x8(%ebp),%ecx
0x401248ae <compare_and_swap+10>: mov 0x10(%ebp),%edx
0x401248b1 <compare_and_swap+13>: mov 0xc(%ebp),%eax
0x401248b4 <compare_and_swap+16>: lock cmpxchg %edx,(%ecx)
0x401248b8 <compare_and_swap+20>: sete %dl
0x401248bb <compare_and_swap+23>: mov %dl,0xfffffff7(%ebp)
...

---------------------

bash-2.04$ gdb /tftpboot/bin/mount core
GNU gdb 5.0
Copyright 2000 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "i586-pc-linux-gnu"...
(no debugging symbols found)...
Core was generated by `mount -t nfs 192.168.1.1:/xfer /mnt'.
Program terminated with signal 4, Illegal instruction.
Reading symbols from /packages/glibc/2.2.2/i386/lib/libc.so.6...done.
Loaded symbols for /packages/glibc/2.2.2/i386/lib/libc.so.6
Reading symbols from /lib/ld-linux.so.2...done.
Loaded symbols for /lib/ld-linux.so.2
#0 0x40136764 in htonl () from /packages/glibc/2.2.2/i386/lib/libc.so.6
(gdb) disassemble
Dump of assembler code for function htonl:
0x40136760 <htonl>: mov 0x4(%esp,1),%eax
0x40136764 <htonl+4>: bswap %eax
0x40136766 <htonl+6>: ret
End of assembler dump.

------------------------

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/