On 2/7/24 08:20, del...@kernel.org wrote:
From: Helge Deller <del...@gmx.de>

CHECK_MOST_PRIVILEGED() should check the privilege level only when the PSW.P
bit is set.

Signed-off-by: Helge Deller <del...@gmx.de>
---
  target/hppa/translate.c | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/target/hppa/translate.c b/target/hppa/translate.c
index 7e58775bbf..21c2734a1f 100644
--- a/target/hppa/translate.c
+++ b/target/hppa/translate.c
@@ -604,7 +604,7 @@ static bool gen_illegal(DisasContext *ctx)
  #else
  #define CHECK_MOST_PRIVILEGED(EXCP) \
      do {                                     \
-        if (ctx->privilege != 0) {           \
+        if (ctx->privilege != 0 && (ctx->tb_flags & PSW_P)) { \
              return gen_excp_iir(ctx, EXCP);  \
          }                                    \
      } while (0)

PSW_P is documented as applying only to protection identifiers.
I do not believe this to be correct at all.


r~

Reply via email to