diff options
author | Jonathan Gray <jsg@cvs.openbsd.org> | 2022-02-15 00:27:12 +0000 |
---|---|---|
committer | Jonathan Gray <jsg@cvs.openbsd.org> | 2022-02-15 00:27:12 +0000 |
commit | 989836bd37f26a56bf846b45862c3b2ffcc355bf (patch) | |
tree | 239005955c64e72bc95760dea05bf449ab06716b | |
parent | 4c4f4ecd9c03f30be5953b601e0c40bcd739ab6b (diff) |
fix mask in hppa inst_trap_return()
inst_trap_return() was checking for rfir by masking with 0xfc001fc0
which made it impossible to match rfir (0xca0)
rfi: return from interruption
00 rv rv rv 60 0
6 5 5 3 8 5
rfir: return from interruption and restore
00 rv rv rv 65 0
6 5 5 3 8 5
from "PA-RISC 1.1 Architecture and Instruction Set Reference Manual"
where rv indicates reserved bits
change the mask to only mask out reserved bits and check for rfi
in addition to rfir
ok miod@
-rw-r--r-- | sys/arch/hppa/include/db_machdep.h | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/sys/arch/hppa/include/db_machdep.h b/sys/arch/hppa/include/db_machdep.h index 0cede97b7eb..c8f70a65367 100644 --- a/sys/arch/hppa/include/db_machdep.h +++ b/sys/arch/hppa/include/db_machdep.h @@ -1,4 +1,4 @@ -/* $OpenBSD: db_machdep.h,v 1.22 2021/08/30 08:11:12 jasper Exp $ */ +/* $OpenBSD: db_machdep.h,v 1.23 2022/02/15 00:27:11 jsg Exp $ */ /* * Copyright (c) 1998-2005 Michael Shalayeff @@ -63,7 +63,8 @@ static __inline int inst_return(u_int ins) { (ins & 0xfc000000) == 0xe0000000; } static __inline int inst_trap_return(u_int ins) { - return (ins & 0xfc001fc0) == 0x00000ca0; + return (ins & 0xfc001fff) == 0x00000c00 || /* rfi */ + (ins & 0xfc001fff) == 0x00000ca0; /* rfir */ } #if 0 |