12345678910111213141516171819202122232425262728293031323334353637 |
- /*
- * In order to access the breakpoint/watchpoint control registers,
- * we must be running in debug monitor mode.
- */
- #define ARM_DSCR_HDBGEN (1 << 14) /* DSCR halting bits. */
- #define ARM_DSCR_MDBGEN (1 << 15) /* DSCR monitor bits. */
- /* Accessor macros for the debug registers. */
- #define ARM_DBG_READ(N, M, OP2, VAL) \
- do \
- { \
- asm volatile("mrc p14, 0, %0, " #N "," #M ", " #OP2 : "=r"(VAL)); \
- } while (0)
- #define ARM_DBG_WRITE(N, M, OP2, VAL) \
- do \
- { \
- asm volatile("mcr p14, 0, %0, " #N "," #M ", " #OP2 : : "r"(VAL)); \
- } while (0)
- static int monitor_mode_enabled(void)
- {
- unsigned int dscr;
- ARM_DBG_READ(c0, c1, 0, dscr);
- if (dscr & ARM_DSCR_MDBGEN)
- return 1;
- return 0;
- }
- #include <stdio.h>
- int main()
- {
- printf("%u\n", monitor_mode_enabled());
- }
|