root/arch/arm/boot/compressed/debug.S
/* SPDX-License-Identifier: GPL-2.0 */
#include <linux/linkage.h>
#include <asm/assembler.h>

#ifndef CONFIG_DEBUG_SEMIHOSTING

#include CONFIG_DEBUG_LL_INCLUDE

ENTRY(putc)
        addruart r1, r2, r3
#ifdef CONFIG_DEBUG_UART_FLOW_CONTROL
        waituartcts r3, r1
#endif
        waituarttxrdy 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       )
#ifdef CONFIG_CPU_V7M
 THUMB( bkpt    #0xab           )
#else
 THUMB( svc     #0xab           )
#endif
        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