GNU Linux-libre 5.19-rc6-gnu
[releases.git] / arch / arm / boot / compressed / debug.S
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #include <linux/linkage.h>
3 #include <asm/assembler.h>
4
5 #ifndef CONFIG_DEBUG_SEMIHOSTING
6
7 #include CONFIG_DEBUG_LL_INCLUDE
8
9 ENTRY(putc)
10         addruart r1, r2, r3
11 #ifdef CONFIG_DEBUG_UART_FLOW_CONTROL
12         waituartcts r3, r1
13 #endif
14         waituarttxrdy r3, r1
15         senduart r0, r1
16         busyuart r3, r1
17         mov      pc, lr
18 ENDPROC(putc)
19
20 #else
21
22 ENTRY(putc)
23         adr     r1, 1f
24         ldmia   r1, {r2, r3}
25         add     r2, r2, r1
26         ldr     r1, [r2, r3]
27         strb    r0, [r1]
28         mov     r0, #0x03               @ SYS_WRITEC
29    ARM( svc     #0x123456       )
30 #ifdef CONFIG_CPU_V7M
31  THUMB( bkpt    #0xab           )
32 #else
33  THUMB( svc     #0xab           )
34 #endif
35         mov     pc, lr
36         .align  2
37 1:      .word   _GLOBAL_OFFSET_TABLE_ - .
38         .word   semi_writec_buf(GOT)
39 ENDPROC(putc)
40
41         .bss
42         .global semi_writec_buf
43         .type   semi_writec_buf, %object
44 semi_writec_buf:
45         .space  4
46         .size   semi_writec_buf, 4
47
48 #endif