Re: [PATCH 3/4] sim/mips: Deliver the reserved instruction exception

Andrew Burgess <[email protected]>
Newsgroups gmane.comp.gdb.patches
Message-ID <[email protected]>
Sebastian Huber <[email protected]> writes:

> The ReservedInstruction and CoProcessorUnusable cases of
> signal_exception() compute CAUSE, SR and EPC and set PC to the exception
> handler address, and then assign PC = EPC, which discards all of it.
> The client resumes on the faulting instruction rather than in its
> handler, so it raises the same exception again and never advances.  The
> address error cases immediately above deliberately do not do this and
> say so in a comment.
>
> The consequence is that a target which handles the exception never runs.
> A compiler emits rdhwr to read the thread pointer for every access to a
> thread-local object on every MIPS target, because the instruction exists
> since MIPS32r2 and the operating system is expected to emulate it where
> the processor lacks it.  The R3900 lacks it.
>
> Signed-off-by: Sebastian Huber <[email protected]>

Please remove the 'Signed-off-by' tag from all commits.  This tag has no
meaning for the GDB project, but might in the future.  Sorry I missed
giving this feedback on the earlier patches.

Otherwise:

Approved-By: Andrew Burgess <[email protected]>

Thanks,
Andrew

> ---
>  sim/mips/interp.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/sim/mips/interp.c b/sim/mips/interp.c
> index a2757ec5ef7..5dbd1482b99 100644
> --- a/sim/mips/interp.c
> +++ b/sim/mips/interp.c
> @@ -1992,7 +1992,8 @@ signal_exception (SIM_DESC sd,
>  
>         case ReservedInstruction:
>         case CoProcessorUnusable:
> -	 PC = EPC;
> +	 /* Leave PC at the exception handler address.  This allows emulating
> +	    an instruction the CPU lacks.  */
>  	 sim_engine_halt (SD, CPU, NULL, PC,
>  			  sim_stopped, SIM_SIGILL);
>  
> -- 
> 2.51.0
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.