Skip to content

Commit

Permalink
aarch32: change dbg register fields
Browse files Browse the repository at this point in the history
Changing the debug register fields to what they are referred to
as in the ARMv7 and ARMv8 manuals. Mostly a cosmetic change,
but improves clarity.

Signed-off-by: Alwin Joshy <joshyalwin@gmail.com>
  • Loading branch information
alwin-joshy committed Feb 20, 2024
1 parent a53a5ae commit d53b059
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 31 deletions.
24 changes: 12 additions & 12 deletions include/arch/arm/arch/32/mode/object/structures.bf
Original file line number Diff line number Diff line change
Expand Up @@ -549,13 +549,13 @@ block dbg_bcr {
padding 3
field addressMask 5
field breakpointType 4
field linkedBrp 4
field secureStateControl 2
field hypeModeControl 1
field lbn 4
field ssc 2
field hmc 1
padding 4
field byteAddressSelect 4
field bas 4
padding 2
field supervisorAccess 2
field pmc 2
field enabled 1
}

Expand All @@ -564,13 +564,13 @@ block dbg_wcr {
padding 3
field addressMask 5
padding 3
field enableLinking 1
field linkedBrp 4
field secureStateControl 2
field hypeModeControl 1
field byteAddressSelect 8
field loadStore 2
field supervisorAccess 2
field watchpointType 1
field lbn 4
field ssc 2
field hmc 1
field bas 8
field lsc 2
field pac 2
field enabled 1
}
#endif /* CONFIG_HARDWARE_DEBUG_API */
Expand Down
8 changes: 4 additions & 4 deletions include/arch/arm/armv/armv7-a/armv/debug.h
Original file line number Diff line number Diff line change
Expand Up @@ -141,8 +141,8 @@ static inline dbg_bcr_t Arch_setupBcr(dbg_bcr_t in_val, bool_t is_match)
dbg_bcr_t bcr;

bcr = dbg_bcr_set_addressMask(in_val, 0);
bcr = dbg_bcr_set_hypeModeControl(bcr, 0);
bcr = dbg_bcr_set_secureStateControl(bcr, 0);
bcr = dbg_bcr_set_hmc(bcr, 0);
bcr = dbg_bcr_set_ssc(bcr, 0);
if (is_match) {
bcr = dbg_bcr_set_breakpointType(bcr, DBGBCR_TYPE_UNLINKED_INSTRUCTION_MATCH);
} else {
Expand All @@ -156,8 +156,8 @@ static inline dbg_wcr_t Arch_setupWcr(dbg_wcr_t in_val)
dbg_wcr_t wcr;

wcr = dbg_wcr_set_addressMask(in_val, 0);
wcr = dbg_wcr_set_hypeModeControl(wcr, 0);
wcr = dbg_wcr_set_secureStateControl(wcr, 0);
wcr = dbg_wcr_set_hmc(wcr, 0);
wcr = dbg_wcr_set_ssc(wcr, 0);
return wcr;
}

Expand Down
30 changes: 15 additions & 15 deletions src/arch/arm/machine/debug.c
Original file line number Diff line number Diff line change
Expand Up @@ -299,9 +299,9 @@ void setBreakpoint(tcb_t *t,
/* Preserve reserved bits. */
bcr.words[0] = readBcrContext(t, bp_num);
bcr = dbg_bcr_set_enabled(bcr, 1);
bcr = dbg_bcr_set_linkedBrp(bcr, 0);
bcr = dbg_bcr_set_supervisorAccess(bcr, DBGBCR_PRIV_USER);
bcr = dbg_bcr_set_byteAddressSelect(bcr, convertSizeToArch(4));
bcr = dbg_bcr_set_lbn(bcr, 0);
bcr = dbg_bcr_set_pmc(bcr, DBGBCR_PRIV_USER);
bcr = dbg_bcr_set_bas(bcr, convertSizeToArch(4));
bcr = Arch_setupBcr(bcr, true);
writeBcrContext(t, bp_num, bcr.words[0]);
} else {
Expand All @@ -312,11 +312,11 @@ void setBreakpoint(tcb_t *t,
/* Preserve reserved bits */
wcr.words[0] = readWcrContext(t, bp_num);
wcr = dbg_wcr_set_enabled(wcr, 1);
wcr = dbg_wcr_set_supervisorAccess(wcr, DBGWCR_PRIV_USER);
wcr = dbg_wcr_set_byteAddressSelect(wcr, convertSizeToArch(size));
wcr = dbg_wcr_set_loadStore(wcr, convertAccessToArch(rw));
wcr = dbg_wcr_set_enableLinking(wcr, 0);
wcr = dbg_wcr_set_linkedBrp(wcr, 0);
wcr = dbg_wcr_set_pac(wcr, DBGWCR_PRIV_USER);
wcr = dbg_wcr_set_bas(wcr, convertSizeToArch(size));
wcr = dbg_wcr_set_lsc(wcr, convertAccessToArch(rw));
wcr = dbg_wcr_set_watchpointType(wcr, 0);
wcr = dbg_wcr_set_lbn(wcr, 0);
wcr = Arch_setupWcr(wcr);
writeWcrContext(t, bp_num, wcr.words[0]);
}
Expand Down Expand Up @@ -355,8 +355,8 @@ getBreakpoint_t getBreakpoint(tcb_t *t, uint16_t bp_num)
dbg_wcr_t wcr;

wcr.words[0] = readWcrContext(t, bp_num);
ret.size = convertArchToSize(dbg_wcr_get_byteAddressSelect(wcr));
ret.rw = convertArchToAccess(dbg_wcr_get_loadStore(wcr));
ret.size = convertArchToSize(dbg_wcr_get_bas(wcr));
ret.rw = convertArchToAccess(dbg_wcr_get_lsc(wcr));
ret.vaddr = readWvrContext(t, bp_num);
ret.is_enabled = dbg_wcr_get_enabled(wcr);
}
Expand Down Expand Up @@ -433,9 +433,9 @@ bool_t configureSingleStepping(tcb_t *t,
t->tcbArch.tcbContext.breakpointState.single_step_enabled = false;
}

bcr = dbg_bcr_set_linkedBrp(bcr, 0);
bcr = dbg_bcr_set_supervisorAccess(bcr, DBGBCR_PRIV_USER);
bcr = dbg_bcr_set_byteAddressSelect(bcr, convertSizeToArch(1));
bcr = dbg_bcr_set_lbn(bcr, 0);
bcr = dbg_bcr_set_pmc(bcr, DBGBCR_PRIV_USER);
bcr = dbg_bcr_set_bas(bcr, convertSizeToArch(1));
bcr = Arch_setupBcr(bcr, false);

writeBvrContext(t, bp_num, t->tcbArch.tcbContext.registers[FaultIP]);
Expand Down Expand Up @@ -500,7 +500,7 @@ int getAndResetActiveBreakpoint(word_t vaddr, word_t reason)
* range, which means it's not guaranteed to match the aligned value
* that was programmed into the address register.
*/
align_mask = convertArchToSize(dbg_bcr_get_byteAddressSelect(bcr));
align_mask = convertArchToSize(dbg_bcr_get_bas(bcr));
align_mask = ~(align_mask - 1);

if (bvr != (vaddr & align_mask) || !dbg_bcr_get_enabled(bcr)) {
Expand All @@ -518,7 +518,7 @@ int getAndResetActiveBreakpoint(word_t vaddr, word_t reason)
word_t wvr = readWvrCp(i);

wcr.words[0] = readWcrCp(i);
align_mask = convertArchToSize(dbg_wcr_get_byteAddressSelect(wcr));
align_mask = convertArchToSize(dbg_wcr_get_bas(wcr));
align_mask = ~(align_mask - 1);

if (wvr != (vaddr & align_mask) || !dbg_wcr_get_enabled(wcr)) {
Expand Down

0 comments on commit d53b059

Please sign in to comment.