linux-user: Handle microMIPS encoding when processing trap exceptions
PATCH v2 1/1 linux-user: Handle microMIPS encoding when processing trap exceptions
Decode trap instructions during the handling of an EXCP_TRAP according to the current ISA mode.
--- linux-user/main.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-)
v2: Read microMIPS instructions sequentially as 16-bit values to avoid
endianess issues. Add braces to if statement to conform to formatting standards.
linux-user/main.c +18 -2
@@ -2372,14 +2372,30 @@ done_syscall:abi_ulong trap_instr;unsigned int code =0 ; - ret =get_user_ual (trap_instr, env->active_tc.PC); +if (env->hflags &MIPS_HFLAG_M16 ) { +/* 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 ]; + }else { + ret =get_user_ual (trap_instr, env->active_tc.PC); + } +if (ret !=0 ) { goto error; }/* The immediate versions don't provide a code. */ if (!(trap_instr &0xFC000000 )) { - code = ((trap_instr >>6 ) & ((1 <<10 ) -1 )); +if (env->hflags &MIPS_HFLAG_M16 ) { +/* microMIPS mode */ + code = ((trap_instr >>12 ) & ((1 <<4 ) -1 )); + }else { + code = ((trap_instr >>6 ) & ((1 <<10 ) -1 )); + } }if (do_break (env, &info, code) !=0 ) {
Signature · 1 line
1.8.3.3
Quoted 11 lines · Kwok Cheung Yeung
Decode trap instructions during the handling of an
EXCP_TRAPaccording to the current ISA mode.Signed-off-by Kwok Cheung Yeung <[email protected]>--- linux-user/main.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-)v2: Read microMIPS instructions sequentially as 16-bit values to avoid
endianess issues. Add braces to if statement to conform to formatting standards.
This code looks OK but last time round I asked about EXCP_BREAK -- why doesn't that also need to change?
thanks
-- PMM
Quoted 9 lines · Peter Maydell
Quoted 8 lines · Kwok Cheung Yeung
Decode trap instructions during the handling of an
EXCP_TRAPaccording to the current ISA mode.Signed-off-by Kwok Cheung Yeung <[email protected]>--- linux-user/main.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-)
Quoted 7 lines
Quoted 3 lines
v2: Read microMIPS instructions sequentially as 16-bit values to avoid
endianess issues. Add braces to if statement to conform to formatting standards.This code looks OK but last time round I asked about
EXCP_BREAK-- why doesn't that also need to change?
This patch was intended to fix the handling of floating-point exceptions while running the GCC unit tests (gcc.c-torture/execute/20101011-1.c) on microMIPS, which only requires EXCP_TRAP to work properly. I'll post a version with EXCP_BREAK fixed shortly.
Thanks
Kwok