I'll provide more detailed info, if necessary, but the following shuold be enough to reproduce the bug... I've installed RHL6.0 on a 486 and then moved the disk (old ~500Mb IDE) to a 386 system (32Mb of RAM). Everything is ok, except DNS related stuff, named, host, nslookup... Name resolution for commands like telnet and ping works. But host terminates with SIGILL even before showing its usage. A strace shows that it fails before opening and reading /etc/resolv.conf. Removing it cures the SIGILL problem, but of course after that, name resolution is gone. The same is true for nslookup. On a 486 or Pentium (K5) everything works just fine. I've tried also to reinstall from scratch (on the 486, as before), and the new system shows exactly the same bug when moved to the 386. The 386 system is one of our nameserves which is had been running 5.2 (and 5.1 before that) without problems (it is running 5.2 right now, BTW). I moved the disk to another 386 (a completely different system), same results. It seems the there's a piece of code that is not i386 friendly sitting in glibc-2.1.1-6. I'll try and find if any other executable is affected... .TM.
bind (and ~8 other packages IIRC) were poisoned by a change in the definitions generated when invoked with "-m486". The change, defining __i486__, caused the inline assembly for ntohl/ntohs to use an i486 instruction that is illegal on i386 to be compiled in. The problem is (or will be) fixed in the compiler. Meanwhile, recompile bind (and other packages) from src.rpm's making sure that rpm optflags does not set -m486. Here's the list of affected packages: arpwatch-2.1a4-10 bind-8.2-6 bind-utils-8.2-6 dip-3.3.7o-14 dosemu-0.99.10-4 ftp-0.10-22 guavac-1.2-4 ipchains-1.3.8-3 knfsd-1.3.3-1 knfsd-clients-1.3.3-1 mars-nwe-0.99pl15-3 routed-0.10-14 rpm-3.0.1-12 rpm2html-1.1-2 strace-3.99-1 tcpdump-3.4-10 xboing-2.4-7 ytalk-3.1-3 Here's the script (from Alan Cox) that was used to detect "poisoned" i386 packages: #!/bin/sh for i in $*; do X=`file $i` echo -n $i case "$X" in *ELF*) (objdump --disassemble $i 2>/dev/null)|grep bswap >/tmp/x1 if [ -s /tmp/x1 ]; then echo " contaminated" else echo " ok" fi ;; *) echo " not ELF" esac done