blob: 5392ee63338fac3453f30b125366e03241158133 [file] [log] [blame]
Shawn Guo3b4af9b2013-03-14 08:48:06 +01001#include <linux/linkage.h>
2#include <asm/assembler.h>
3
Nicolas Pitre27523672013-05-29 16:57:30 +01004#ifndef CONFIG_DEBUG_SEMIHOSTING
5
Shawn Guo3b4af9b2013-03-14 08:48:06 +01006#include CONFIG_DEBUG_LL_INCLUDE
7
8ENTRY(putc)
9 addruart r1, r2, r3
10 waituart r3, r1
11 senduart r0, r1
12 busyuart r3, r1
13 mov pc, lr
14ENDPROC(putc)
Nicolas Pitre27523672013-05-29 16:57:30 +010015
16#else
17
18ENTRY(putc)
19 adr r1, 1f
20 ldmia r1, {r2, r3}
21 add r2, r2, r1
22 ldr r1, [r2, r3]
23 strb r0, [r1]
24 mov r0, #0x03 @ SYS_WRITEC
25 ARM( svc #0x123456 )
26 THUMB( svc #0xab )
27 mov pc, lr
28 .align 2
291: .word _GLOBAL_OFFSET_TABLE_ - .
30 .word semi_writec_buf(GOT)
31ENDPROC(putc)
32
33 .bss
34 .global semi_writec_buf
35 .type semi_writec_buf, %object
36semi_writec_buf:
37 .space 4
38 .size semi_writec_buf, 4
39
40#endif