On Fri, 2011-07-01 at 19:26 +0100, Dave Martin wrote:
The interworking behaviour is uniform for ARMv5(T) and above, but since kernels built in Thumb cannot run on pre-v7, and kernels built in ARM cannot (or certainly should not) contain any Thumb code, these niceties may not matter.
Interworking in different on v7, ARM mode ALU instructions now interwork, e.g. "sub pc, pc, #3" will switch from ARM to Thumb.
When doing doing the kprobes bug fixes it was decided that we should avoid writes to PC which produce unpredictable results, even though such instructions aren't legal and won't occur in normal code. So I believe it follows that we should implement interworking correctly, even on kernels not built for Thumb.
Before I started my work, the kprobes code already had a partial simulation of interworking, so someone else must have thought it worth while. Though it would obviously be a lot simpler if I could just wrap all interworking stuff up in #ifdef CONFIG_THUMB2_KERNEL.