arm-test.c 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. /*
  2. * In order to access the breakpoint/watchpoint control registers,
  3. * we must be running in debug monitor mode.
  4. */
  5. #define ARM_DSCR_HDBGEN (1 << 14) /* DSCR halting bits. */
  6. #define ARM_DSCR_MDBGEN (1 << 15) /* DSCR monitor bits. */
  7. /* Accessor macros for the debug registers. */
  8. #define ARM_DBG_READ(N, M, OP2, VAL) \
  9. do \
  10. { \
  11. asm volatile("mrc p14, 0, %0, " #N "," #M ", " #OP2 : "=r"(VAL)); \
  12. } while (0)
  13. #define ARM_DBG_WRITE(N, M, OP2, VAL) \
  14. do \
  15. { \
  16. asm volatile("mcr p14, 0, %0, " #N "," #M ", " #OP2 : : "r"(VAL)); \
  17. } while (0)
  18. static int monitor_mode_enabled(void)
  19. {
  20. unsigned int dscr;
  21. ARM_DBG_READ(c0, c1, 0, dscr);
  22. if (dscr & ARM_DSCR_MDBGEN)
  23. return 1;
  24. return 0;
  25. }
  26. #include <stdio.h>
  27. int main()
  28. {
  29. printf("%u\n", monitor_mode_enabled());
  30. }