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 9ENTRY(putc) 10 addruart r1, r2, r3 11 waituart r3, r1 12 senduart r0, r1 13 busyuart r3, r1 14 mov pc, lr 15ENDPROC(putc) 16 17#else 18 19ENTRY(putc) 20 adr r1, 1f 21 ldmia r1, {r2, r3} 22 add r2, r2, r1 23 ldr r1, [r2, r3] 24 strb r0, [r1] 25 mov r0, #0x03 @ SYS_WRITEC 26 ARM( svc #0x123456 ) 27#ifdef CONFIG_CPU_V7M 28 THUMB( bkpt #0xab ) 29#else 30 THUMB( svc #0xab ) 31#endif 32 mov pc, lr 33 .align 2 341: .word _GLOBAL_OFFSET_TABLE_ - . 35 .word semi_writec_buf(GOT) 36ENDPROC(putc) 37 38 .bss 39 .global semi_writec_buf 40 .type semi_writec_buf, %object 41semi_writec_buf: 42 .space 4 43 .size semi_writec_buf, 4 44 45#endif 46