Skip to content

Commit

Permalink
change files to allow compilation
Browse files Browse the repository at this point in the history
Signed-off-by: Alwin Joshy <[email protected]>
  • Loading branch information
alwin-joshy committed Feb 15, 2024
1 parent 21191d1 commit 8c8170c
Show file tree
Hide file tree
Showing 5 changed files with 178 additions and 180 deletions.
149 changes: 131 additions & 18 deletions include/arch/arm/arch/32/mode/machine/debug.h
Original file line number Diff line number Diff line change
Expand Up @@ -167,28 +167,141 @@ bool_t isDebugFault(word_t hsr_or_fsr);
*/
seL4_Fault_t handleUserLevelDebugException(word_t fault_vaddr);

/** These next two functions are part of some state flags.
*
* A bitfield of all currently enabled breakpoints for a thread is kept in that
* thread's TCB. These two functions here set and unset the bits in that
* bitfield.
#endif /* CONFIG_HARDWARE_DEBUG_API */

#endif /* !__ASSEMBLER__ */

#endif /* defined(CONFIG_DEBUG_BUILD) || defined (CONFIG_HARDWARE_DEBUG_API) */

#ifdef ARM_BASE_CP14_SAVE_AND_RESTORE

#define MAKE_P14(crn, crm, opc2) "p14, 0, %0, c" #crn ", c" #crm ", " #opc2
#define MAKE_DBGBVR(num) MAKE_P14(0, num, 4)
#define MAKE_DBGBCR(num) MAKE_P14(0, num, 5)
#define MAKE_DBGWVR(num) MAKE_P14(0, num, 6)
#define MAKE_DBGWCR(num) MAKE_P14(0, num, 7)
#define MAKE_DBGXVR(num) MAKE_P14(1, num, 1)

/** Generates read functions for the CP14 control and value registers.
*/
static inline void setBreakpointUsedFlag(tcb_t *t, uint16_t bp_num)
{
if (t != NULL) {
t->tcbArch.tcbContext.breakpointState.used_breakpoints_bf |= BIT(bp_num);
}
#define DEBUG_GENERATE_READ_FN(_name, _reg) \
static inline word_t \
_name(uint16_t bp_num) \
{ \
word_t ret; \
\
switch (bp_num) { \
case 1: \
MRC(MAKE_ ## _reg(1), ret); \
return ret; \
case 2: \
MRC(MAKE_ ## _reg(2), ret); \
return ret; \
case 3: \
MRC(MAKE_ ## _reg(3), ret); \
return ret; \
case 4: \
MRC(MAKE_ ## _reg(4), ret); \
return ret; \
case 5: \
MRC(MAKE_ ## _reg(5), ret); \
return ret; \
case 6: \
MRC(MAKE_ ## _reg(6), ret); \
return ret; \
case 7: \
MRC(MAKE_ ## _reg(7), ret); \
return ret; \
case 8: \
MRC(MAKE_ ## _reg(8), ret); \
return ret; \
case 9: \
MRC(MAKE_ ## _reg(9), ret); \
return ret; \
case 10: \
MRC(MAKE_ ## _reg(10), ret); \
return ret; \
case 11: \
MRC(MAKE_ ## _reg(11), ret); \
return ret; \
case 12: \
MRC(MAKE_ ## _reg(12), ret); \
return ret; \
case 13: \
MRC(MAKE_ ## _reg(13), ret); \
return ret; \
case 14: \
MRC(MAKE_ ## _reg(14), ret); \
return ret; \
case 15: \
MRC(MAKE_ ## _reg(15), ret); \
return ret; \
default: \
assert(bp_num == 0); \
MRC(MAKE_ ## _reg(0), ret); \
return ret; \
} \
}

static inline void unsetBreakpointUsedFlag(tcb_t *t, uint16_t bp_num)
{
if (t != NULL) {
t->tcbArch.tcbContext.breakpointState.used_breakpoints_bf &= ~BIT(bp_num);
}
/** Generates write functions for the CP14 control and value registers.
*/
#define DEBUG_GENERATE_WRITE_FN(_name, _reg) \
static inline void \
_name(uint16_t bp_num, word_t val) \
{ \
switch (bp_num) { \
case 1: \
MCR(MAKE_ ## _reg(1), val); \
return; \
case 2: \
MCR(MAKE_ ## _reg(2), val); \
return; \
case 3: \
MCR(MAKE_ ## _reg(3), val); \
return; \
case 4: \
MCR(MAKE_ ## _reg(4), val); \
return; \
case 5: \
MCR(MAKE_ ## _reg(5), val); \
return; \
case 6: \
MCR(MAKE_ ## _reg(6), val); \
return; \
case 7: \
MCR(MAKE_ ## _reg(7), val); \
return; \
case 8: \
MCR(MAKE_ ## _reg(8), val); \
return; \
case 9: \
MCR(MAKE_ ## _reg(9), val); \
return; \
case 10: \
MCR(MAKE_ ## _reg(10), val); \
return; \
case 11: \
MCR(MAKE_ ## _reg(11), val); \
return; \
case 12: \
MCR(MAKE_ ## _reg(12), val); \
return; \
case 13: \
MCR(MAKE_ ## _reg(13), val); \
return; \
case 14: \
MCR(MAKE_ ## _reg(14), val); \
return; \
case 15: \
MCR(MAKE_ ## _reg(15), val); \
return; \
default: \
assert(bp_num == 0); \
MCR(MAKE_ ## _reg(0), val); \
return; \
} \
}

#endif /* CONFIG_HARDWARE_DEBUG_API */

#endif /* !__ASSEMBLER__ */

#endif /* defined(CONFIG_DEBUG_BUILD) || defined (CONFIG_HARDWARE_DEBUG_API) */
#endif /* ARM_BASE_CP14_SAVE_AND_RESTORE */
41 changes: 41 additions & 0 deletions include/arch/arm/arch/machine/debug.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,28 @@
void restore_user_debug_context(tcb_t *target_thread);
void saveAllBreakpointState(tcb_t *t);
void loadAllDisabledBreakpointState(void);

#define DBGBCR_ENABLE (BIT(0))
#define DBGWCR_ENABLE (BIT(0))

DEBUG_GENERATE_READ_FN(readBcrCp, DBGBCR)
DEBUG_GENERATE_READ_FN(readBvrCp, DBGBVR)
DEBUG_GENERATE_READ_FN(readWcrCp, DBGWCR)
DEBUG_GENERATE_READ_FN(readWvrCp, DBGWVR)
DEBUG_GENERATE_WRITE_FN(writeBcrCp, DBGBCR)
DEBUG_GENERATE_WRITE_FN(writeBvrCp, DBGBVR)
DEBUG_GENERATE_WRITE_FN(writeWcrCp, DBGWCR)
DEBUG_GENERATE_WRITE_FN(writeWvrCp, DBGWVR)

void writeBvrContext(tcb_t *t, uint16_t index, word_t val);
#endif

#ifdef CONFIG_HARDWARE_DEBUG_API
int getAndResetActiveBreakpoint(word_t vaddr, word_t reason);
BOOT_CODE void disableAllBpsAndWps(void);
uint16_t getBpNumFromType(uint16_t bp_num, word_t type);
#endif /* CONFIG_HARDWARE_DEBUG_API */

#ifdef ARM_HYP_CP14_SAVE_AND_RESTORE_VCPU_THREADS
void Arch_debugAssociateVCPUTCB(tcb_t *t);
void Arch_debugDissociateVCPUTCB(tcb_t *t);
Expand Down Expand Up @@ -110,6 +131,26 @@ static inline void initHDCR(void)

#ifdef CONFIG_HARDWARE_DEBUG_API

/** These next two functions are part of some state flags.
*
* A bitfield of all currently enabled breakpoints for a thread is kept in that
* thread's TCB. These two functions here set and unset the bits in that
* bitfield.
*/
static inline void setBreakpointUsedFlag(tcb_t *t, uint16_t bp_num)
{
if (t != NULL) {
t->tcbArch.tcbContext.breakpointState.used_breakpoints_bf |= BIT(bp_num);
}
}

static inline void unsetBreakpointUsedFlag(tcb_t *t, uint16_t bp_num)
{
if (t != NULL) {
t->tcbArch.tcbContext.breakpointState.used_breakpoints_bf &= ~BIT(bp_num);
}
}

static uint16_t convertBpNumToArch(uint16_t bp_num)
{
if (bp_num >= seL4_NumExclusiveBreakpoints) {
Expand Down
1 change: 1 addition & 0 deletions src/arch/arm/32/config.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ add_sources(
machine/capdl.c
machine/registerset.c
machine/fpu.c
machine/debug.c
model/statedata.c
c_traps.c
idle.c
Expand Down
150 changes: 1 addition & 149 deletions src/arch/arm/32/machine/debug.c
Original file line number Diff line number Diff line change
Expand Up @@ -130,154 +130,6 @@ bool_t byte8WatchpointsSupported(void)
*/
#define DBGAUTHSTATUS "p14,0,%0,c7,c14,6"

#endif /* CONFIG_HARDWARE_DEBUG_API */

#ifdef ARM_BASE_CP14_SAVE_AND_RESTORE

#define DBGBCR_ENABLE (BIT(0))

#define DBGWCR_ENABLE (BIT(0))

#define MAKE_P14(crn, crm, opc2) "p14, 0, %0, c" #crn ", c" #crm ", " #opc2
#define MAKE_DBGBVR(num) MAKE_P14(0, num, 4)
#define MAKE_DBGBCR(num) MAKE_P14(0, num, 5)
#define MAKE_DBGWVR(num) MAKE_P14(0, num, 6)
#define MAKE_DBGWCR(num) MAKE_P14(0, num, 7)
#define MAKE_DBGXVR(num) MAKE_P14(1, num, 1)

/** Generates read functions for the CP14 control and value registers.
*/
#define DEBUG_GENERATE_READ_FN(_name, _reg) \
static word_t \
_name(uint16_t bp_num) \
{ \
word_t ret; \
\
switch (bp_num) { \
case 1: \
MRC(MAKE_ ## _reg(1), ret); \
return ret; \
case 2: \
MRC(MAKE_ ## _reg(2), ret); \
return ret; \
case 3: \
MRC(MAKE_ ## _reg(3), ret); \
return ret; \
case 4: \
MRC(MAKE_ ## _reg(4), ret); \
return ret; \
case 5: \
MRC(MAKE_ ## _reg(5), ret); \
return ret; \
case 6: \
MRC(MAKE_ ## _reg(6), ret); \
return ret; \
case 7: \
MRC(MAKE_ ## _reg(7), ret); \
return ret; \
case 8: \
MRC(MAKE_ ## _reg(8), ret); \
return ret; \
case 9: \
MRC(MAKE_ ## _reg(9), ret); \
return ret; \
case 10: \
MRC(MAKE_ ## _reg(10), ret); \
return ret; \
case 11: \
MRC(MAKE_ ## _reg(11), ret); \
return ret; \
case 12: \
MRC(MAKE_ ## _reg(12), ret); \
return ret; \
case 13: \
MRC(MAKE_ ## _reg(13), ret); \
return ret; \
case 14: \
MRC(MAKE_ ## _reg(14), ret); \
return ret; \
case 15: \
MRC(MAKE_ ## _reg(15), ret); \
return ret; \
default: \
assert(bp_num == 0); \
MRC(MAKE_ ## _reg(0), ret); \
return ret; \
} \
}

/** Generates write functions for the CP14 control and value registers.
*/
#define DEBUG_GENERATE_WRITE_FN(_name, _reg) \
static void \
_name(uint16_t bp_num, word_t val) \
{ \
switch (bp_num) { \
case 1: \
MCR(MAKE_ ## _reg(1), val); \
return; \
case 2: \
MCR(MAKE_ ## _reg(2), val); \
return; \
case 3: \
MCR(MAKE_ ## _reg(3), val); \
return; \
case 4: \
MCR(MAKE_ ## _reg(4), val); \
return; \
case 5: \
MCR(MAKE_ ## _reg(5), val); \
return; \
case 6: \
MCR(MAKE_ ## _reg(6), val); \
return; \
case 7: \
MCR(MAKE_ ## _reg(7), val); \
return; \
case 8: \
MCR(MAKE_ ## _reg(8), val); \
return; \
case 9: \
MCR(MAKE_ ## _reg(9), val); \
return; \
case 10: \
MCR(MAKE_ ## _reg(10), val); \
return; \
case 11: \
MCR(MAKE_ ## _reg(11), val); \
return; \
case 12: \
MCR(MAKE_ ## _reg(12), val); \
return; \
case 13: \
MCR(MAKE_ ## _reg(13), val); \
return; \
case 14: \
MCR(MAKE_ ## _reg(14), val); \
return; \
case 15: \
MCR(MAKE_ ## _reg(15), val); \
return; \
default: \
assert(bp_num == 0); \
MCR(MAKE_ ## _reg(0), val); \
return; \
} \
}

DEBUG_GENERATE_READ_FN(readBcrCp, DBGBCR)
DEBUG_GENERATE_READ_FN(readBvrCp, DBGBVR)
DEBUG_GENERATE_READ_FN(readWcrCp, DBGWCR)
DEBUG_GENERATE_READ_FN(readWvrCp, DBGWVR)
DEBUG_GENERATE_WRITE_FN(writeBcrCp, DBGBCR)
DEBUG_GENERATE_WRITE_FN(writeBvrCp, DBGBVR)
DEBUG_GENERATE_WRITE_FN(writeWcrCp, DBGWCR)
DEBUG_GENERATE_WRITE_FN(writeWvrCp, DBGWVR)

#endif /* ARM_BASE_CP14_SAVE_AND_RESTORE */

#ifdef CONFIG_HARDWARE_DEBUG_API

/** Extracts the "Method of Entry" bits from DBGDSCR.
*
* Used to determine what type of debug exception has occurred.
Expand Down Expand Up @@ -644,4 +496,4 @@ seL4_Fault_t handleUserLevelDebugException(word_t fault_vaddr)
return ret;
}

#endif /* CONFIG_HARDWARE_DEBUG_API */
#endif /* CONFIG_HARDWARE_DEBUG_API */
Loading

0 comments on commit 8c8170c

Please sign in to comment.