mirror of
https://github.com/yuzu-emu/unicorn.git
synced 2024-12-23 23:25:29 +00:00
target/arm: Rearrange disabled check for watchpoints
Coverity rightly notes that ctz32(bas) on 0 will return 32, which makes the len calculation a BAD_SHIFT. A value of 0 in DBGWCR<n>_EL1.BAS is reserved. Simply move the existing check we have for this case Backports commit ae1111d4def40c6f592c3a307c599272b778eb65 from qemu
This commit is contained in:
parent
8c5f623ac3
commit
d5234c8b3d
|
@ -6038,17 +6038,18 @@ void hw_watchpoint_update(ARMCPU *cpu, int n)
|
|||
int bas = extract64(wcr, 5, 8);
|
||||
int basstart;
|
||||
|
||||
if (bas == 0) {
|
||||
/* This must act as if the watchpoint is disabled */
|
||||
return;
|
||||
}
|
||||
|
||||
if (extract64(wvr, 2, 1)) {
|
||||
/* Deprecated case of an only 4-aligned address. BAS[7:4] are
|
||||
* ignored, and BAS[3:0] define which bytes to watch.
|
||||
*/
|
||||
bas &= 0xf;
|
||||
}
|
||||
|
||||
if (bas == 0) {
|
||||
/* This must act as if the watchpoint is disabled */
|
||||
return;
|
||||
}
|
||||
|
||||
/* The BAS bits are supposed to be programmed to indicate a contiguous
|
||||
* range of bytes. Otherwise it is CONSTRAINED UNPREDICTABLE whether
|
||||
* we fire for each byte in the word/doubleword addressed by the WVR.
|
||||
|
|
Loading…
Reference in a new issue