I played around with uname_hack and glibc to see if it made a difference - you could try to boot 12.x after replacing the existing rootfs.gz with the file here:
http://tinycorelinux.net/12.x/x86/release/src/toolchain/test_i486/
I think this is important so I did my own test. I
do have a AMD K6-2 PC (if the sticker's correct) but it's not set up (by the way "166MHz" in the subject line seems to be a typo, Wikipedia says the slowest K6-2 made ran at 266MHz). Instead I tested on a standard 120MHz Intel Pentium 1 PC which normally runs Damn Small Linux (I'm posting from it now). It's a more concrete benchmark for i586 support anyway.
Booting from HDD (IDE, ext2 formatted) with Grub 0.97 (0.91 doesn't work for TC as I found out, I booted 0.97 from a floppy).
First I booted TC 10.1 (core.gz) -
Boots + runs OKThen I tried regular TC 12.0 (root.gz only) -
Fails init dies immediately after starting, with illegal op code (or similar error) b7fb7081 in ld-2.32.so
Finally I tried Juanito's test_i486 root.gz for TC 12.0 -
Boots + runs OKSo that uname hack seems to solve the problem.
Perhaps Juanito is already well aware of it, but there is
a suggestion in the glibc FAQ that covers this:
How can I compile on my fast ix86 machine a working libc for an older and slower ix86? After installing libc, programs abort with "Illegal Instruction".
glibc and gcc might generate some instructions on your machine that aren't available on an older machine. You've got to tell glibc that you're configuring for e.g. i586 with adding i586 as your machine, for example:
* ../configure --prefix=/usr i586-pc-linux-gnu
And you need to tell gcc to only generate i586 code, just add -march=i586 (just -m586 doesn't work) to your CFLAGS.
Note that i486 is the oldest supported architecture since nptl needs atomic instructions and those were introduced with i486.
Maybe I'll try one of my 486 PCs some time, but setting that up will be more difficult.