debug.S 731 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. #include <linux/linkage.h>
  3. #include <asm/assembler.h>
  4. #ifndef CONFIG_DEBUG_SEMIHOSTING
  5. #include CONFIG_DEBUG_LL_INCLUDE
  6. ENTRY(putc)
  7. addruart r1, r2, r3
  8. waituart r3, r1
  9. senduart r0, r1
  10. busyuart r3, r1
  11. mov pc, lr
  12. ENDPROC(putc)
  13. #else
  14. ENTRY(putc)
  15. adr r1, 1f
  16. ldmia r1, {r2, r3}
  17. add r2, r2, r1
  18. ldr r1, [r2, r3]
  19. strb r0, [r1]
  20. mov r0, #0x03 @ SYS_WRITEC
  21. ARM( svc #0x123456 )
  22. #ifdef CONFIG_CPU_V7M
  23. THUMB( bkpt #0xab )
  24. #else
  25. THUMB( svc #0xab )
  26. #endif
  27. mov pc, lr
  28. .align 2
  29. 1: .word _GLOBAL_OFFSET_TABLE_ - .
  30. .word semi_writec_buf(GOT)
  31. ENDPROC(putc)
  32. .bss
  33. .global semi_writec_buf
  34. .type semi_writec_buf, %object
  35. semi_writec_buf:
  36. .space 4
  37. .size semi_writec_buf, 4
  38. #endif