[Soekris] SIGILL on net5501

Brandon Black blblack at gmail.com
Mon Oct 29 18:10:18 UTC 2007


On 10/29/07, Michael Smith <msmith at cbnco.com> wrote:
> Hi all,
>
> This is kind of off-topic, but there are enough smart people here I figure
> somebody might be able to tell me where I'm being an idiot... I'm trying
> to run the same software on a net5501 as I do on net4801 & net4501. It's
> Linux 2.6.18.3, glibc 2.3.5, all compiled by gcc 3.3.5 for i486.
>
> Programs like awk and rz are dying with "Illegal instruction" all over the
> place. I ran them in a debugger and it looks like they are dying on
> opcode DFC0: "fild st(0), ax": load 16-bit integer into floating point
> stack.
>
> I've been Googling for any special requirements the Geode LX FPU might
> have, but I've come up empty so far.
>
> net5501:/ # ald /bin/awk
> Assembly Language Debugger 0.1.7
> Copyright (C) 2000-2004 Patrick Alken
>
> initRC: warning: cannot determine location of configuration file
> /bin/awk: ELF Intel 80386 (32 bit), LSB - little endian, Executable, Version 1 (Current)
> Loading debugging symbols...(no symbols found)
> ald> run {print$1}
> Starting program: /bin/awk {print$1}
>
> Program received signal SIGILL (Illegal instruction)
> Location: 0x0804C63E
> eax = 0x00000001 ebx = 0x000000A7 ecx = 0x3FF00000 edx = 0x3FF00000
> esp = 0xBF823890 ebp = 0xBF8238C8 esi = 0x00000000 edi = 0xBF823C56
> ds  = 0x007B es  = 0x007B fs  = 0x0000 gs  = 0x0033
> ss  = 0x007B cs  = 0x0073 eip = 0x0804C63E eflags = 0x00010293
>
> Flags: CF AF SF IF RF
>
>
> 0804C63E                      DFC0                 fild st(0), ax

That does seem really odd.  FILD is an ancient 8087 instruction.
Virtually any x86-compat CPU with an FPU should support it I would
think.

Are you using the exact same kernel binary you used on the net4801, or
did you mean you recompiled for the 5501?  If you haven't recompiled,
you probably should.  This could be related to which instructions the
kernel is or isn't using in some places, or the behavior of the kernel
on task swapping (like FXSAVE type of stuff).  Picking the right
processor in your kernel config is pretty critical when you're on
oddball x86 variants like these.

The net4801 is a "GeodeGX1" in the "Processor family" part of the
kernel config.  A net5501 is "Geode GX/LX".  The net4501 is a totally
different beast: earlier on in the Sub-architecture part of the kernel
config, you have to choose "AMD Elan" instead of "PC Compatible".

-- Brandon


More information about the Soekris-tech mailing list