Hi Wilson,
Wilson Callan wrote:
I've been seeing an occasional Illegal Instruction exception on the 5235
coldfire and found that its due to arch/m68knommu/kernel/signal.c which
has an empty push_cache(). I'm using a 100ms ITIMER so there are many
opportunities for this bug.
You cannot put instructions in memory and expect the processor to run
them without flushing the instruction cache. To fix this i've recoded
the return from the user space signal handler to not use instructions on
the stack. Doing it this way is more straight forward and doesnt
require a cache flush (which creates inefficient memory access).
If you dont choose to integrate this patch, also note that there most
likely a bug in setup_rt_frame() where it dangerously goes ahead and
puts machine code on the stack. the 0x4600 instruction is not a "not.l
d0" instruction as the comment suggests.
Thats not what the comment says :-)
/* moveq #,d0; notb d0; trap #0 */
0x4600 is the conventional m68k "not.b d0" instruction.
Now this code path is used by all varients of m68k/coldfire,
so it is obviously broken for ColdFire where this not a
valid instruction.
Is this the real cause of your illegal instruction trap?
The current ColdFire cache support on the 5235 only enables
the instruction cache. Still though the empty push_cache()
is a problem.
Regards
Greg
------------------------------------------------------------------------
Greg Ungerer -- Chief Software Dude EMAIL: [EMAIL PROTECTED]
Secure Computing Corporation PHONE: +61 7 3435 2888
825 Stanley St, FAX: +61 7 3891 3630
Woolloongabba, QLD, 4102, Australia WEB: http://www.SnapGear.com
_______________________________________________
uClinux-dev mailing list
[email protected]
http://mailman.uclinux.org/mailman/listinfo/uclinux-dev
This message was resent by [email protected]
To unsubscribe see:
http://mailman.uclinux.org/mailman/options/uclinux-dev