summaryrefslogtreecommitdiffstats
path: root/kernel/arch/arm/boot/compressed/debug.S
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/arch/arm/boot/compressed/debug.S')
-rw-r--r--kernel/arch/arm/boot/compressed/debug.S40
1 files changed, 40 insertions, 0 deletions
diff --git a/kernel/arch/arm/boot/compressed/debug.S b/kernel/arch/arm/boot/compressed/debug.S
new file mode 100644
index 000000000..5392ee633
--- /dev/null
+++ b/kernel/arch/arm/boot/compressed/debug.S
@@ -0,0 +1,40 @@
+#include <linux/linkage.h>
+#include <asm/assembler.h>
+
+#ifndef CONFIG_DEBUG_SEMIHOSTING
+
+#include CONFIG_DEBUG_LL_INCLUDE
+
+ENTRY(putc)
+ addruart r1, r2, r3
+ waituart r3, r1
+ senduart r0, r1
+ busyuart r3, r1
+ mov pc, lr
+ENDPROC(putc)
+
+#else
+
+ENTRY(putc)
+ adr r1, 1f
+ ldmia r1, {r2, r3}
+ add r2, r2, r1
+ ldr r1, [r2, r3]
+ strb r0, [r1]
+ mov r0, #0x03 @ SYS_WRITEC
+ ARM( svc #0x123456 )
+ THUMB( svc #0xab )
+ mov pc, lr
+ .align 2
+1: .word _GLOBAL_OFFSET_TABLE_ - .
+ .word semi_writec_buf(GOT)
+ENDPROC(putc)
+
+ .bss
+ .global semi_writec_buf
+ .type semi_writec_buf, %object
+semi_writec_buf:
+ .space 4
+ .size semi_writec_buf, 4
+
+#endif