On Fri, 19 Jul 2013, Kwok Cheung Yeung wrote: > Decode trap instructions during the handling of an EXCP_BREAK or EXCP_TRAP > according to the current ISA mode. > > Signed-off-by: Kwok Cheung Yeung <k...@codesourcery.com> > --- > linux-user/main.c | 46 +++++++++++++++++++++++++++++++++++++++++++--- > 1 file changed, 43 insertions(+), 3 deletions(-) > > v2->v3: Handle microMIPS and MIPS16e instructions when processing EXCP_BREAK. > > diff --git a/linux-user/main.c b/linux-user/main.c > index 7f15d3d..b137216 100644 > --- a/linux-user/main.c > +++ b/linux-user/main.c > @@ -2348,7 +2348,31 @@ done_syscall: > abi_ulong trap_instr; > unsigned int code; > > - ret = get_user_ual(trap_instr, env->active_tc.PC); > + if (env->hflags & MIPS_HFLAG_M16) { > + if (env->insn_flags & ASE_MICROMIPS) { > + /* microMIPS mode */ > + abi_ulong instr[2]; > + > + ret = get_user_u16(instr[0], env->active_tc.PC) || > + get_user_u16(instr[1], env->active_tc.PC + 2); > + > + trap_instr = (instr[0] << 16) | instr[1];
You need to tell 16-bit and 32-bit microMIPS BREAK instructions apart somehow. Maciej