1#include <linux/linkage.h> 2#include <asm/assembler.h> 3 4#ifndef CONFIG_DEBUG_SEMIHOSTING 5 6#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) 15 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 41