mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2024-09-20 09:31:47 +00:00
Fix definition of PRIMASK
PRIMASK is handled incorrectly in Sleigh. From the armv6m manual: * Executing the instruction CPSID i sets PRIMASK.PM to 1. * Executing the instruction CPSIE i sets PRIMASK.PM to 0. So interrupts are enabled if the lowest bit is 0. This patch swaps the meaning of 0 and 1, bringing the definition in line with the reference documentation.
This commit is contained in:
parent
a291e872b6
commit
a54692a6fd
|
@ -2809,7 +2809,7 @@ primask: "primask" is epsilon {}
|
|||
Rd0811 = 0;
|
||||
b:1 = isCurrentModePrivileged();
|
||||
if (!b) goto inst_next;
|
||||
Rd0811 = isIRQinterruptsEnabled(); # should reflect primask register/bit
|
||||
Rd0811 = isIRQinterruptsEnabled() ^ 1; # should reflect primask register/bit
|
||||
}
|
||||
|
||||
basepri: "basepri" is epsilon {}
|
||||
|
@ -2925,7 +2925,7 @@ define pcodeop setBasePriority;
|
|||
build ItCond;
|
||||
b:1 = isCurrentModePrivileged();
|
||||
if (!b) goto inst_next;
|
||||
enableIRQinterrupts((Rn0003 & 1) == 1); # should set/clear primask register/bit
|
||||
enableIRQinterrupts((Rn0003 & 1) == 0); # should set/clear primask register/bit
|
||||
}
|
||||
|
||||
:msr^ItCond basepri,Rn0003 is TMode=1 & ItCond & op4=0xf38 & Rn0003; op12=0x8 & th_psrmask=8 & sysm=17 & basepri
|
||||
|
|
Loading…
Reference in New Issue
Block a user