13b4af9bcSShawn Guo#include <linux/linkage.h> 23b4af9bcSShawn Guo#include <asm/assembler.h> 33b4af9bcSShawn Guo 4*27523679SNicolas Pitre#ifndef CONFIG_DEBUG_SEMIHOSTING 5*27523679SNicolas Pitre 63b4af9bcSShawn Guo#include CONFIG_DEBUG_LL_INCLUDE 73b4af9bcSShawn Guo 83b4af9bcSShawn GuoENTRY(putc) 93b4af9bcSShawn Guo addruart r1, r2, r3 103b4af9bcSShawn Guo waituart r3, r1 113b4af9bcSShawn Guo senduart r0, r1 123b4af9bcSShawn Guo busyuart r3, r1 133b4af9bcSShawn Guo mov pc, lr 143b4af9bcSShawn GuoENDPROC(putc) 15*27523679SNicolas Pitre 16*27523679SNicolas Pitre#else 17*27523679SNicolas Pitre 18*27523679SNicolas PitreENTRY(putc) 19*27523679SNicolas Pitre adr r1, 1f 20*27523679SNicolas Pitre ldmia r1, {r2, r3} 21*27523679SNicolas Pitre add r2, r2, r1 22*27523679SNicolas Pitre ldr r1, [r2, r3] 23*27523679SNicolas Pitre strb r0, [r1] 24*27523679SNicolas Pitre mov r0, #0x03 @ SYS_WRITEC 25*27523679SNicolas Pitre ARM( svc #0x123456 ) 26*27523679SNicolas Pitre THUMB( svc #0xab ) 27*27523679SNicolas Pitre mov pc, lr 28*27523679SNicolas Pitre .align 2 29*27523679SNicolas Pitre1: .word _GLOBAL_OFFSET_TABLE_ - . 30*27523679SNicolas Pitre .word semi_writec_buf(GOT) 31*27523679SNicolas PitreENDPROC(putc) 32*27523679SNicolas Pitre 33*27523679SNicolas Pitre .bss 34*27523679SNicolas Pitre .global semi_writec_buf 35*27523679SNicolas Pitre .type semi_writec_buf, %object 36*27523679SNicolas Pitresemi_writec_buf: 37*27523679SNicolas Pitre .space 4 38*27523679SNicolas Pitre .size semi_writec_buf, 4 39*27523679SNicolas Pitre 40*27523679SNicolas Pitre#endif 41