1 // SPDX-License-Identifier: BSD-2-Clause 2 /* 3 * Copyright (c) 2014, STMicroelectronics International N.V. 4 */ 5 6 #include <stdio.h> 7 #include <stdarg.h> 8 #include <string.h> 9 #include <string_ext.h> 10 #include <trace.h> 11 #include <util.h> 12 #include <utee_syscalls.h> 13 14 #if TRACE_LEVEL > 0 15 16 void trace_ext_puts(const char *str) 17 { 18 _utee_log(str, strlen(str)); 19 } 20 21 int trace_ext_get_thread_id(void) 22 { 23 return -1; 24 } 25 26 /* 27 * printf and puts - stdio printf support 28 * 29 * 'printf()' and 'puts()' traces have the 'info' trace level. 30 */ 31 int printf(const char *fmt, ...) 32 { 33 char to_format[MAX_PRINT_SIZE]; 34 va_list ap; 35 int s; 36 37 if (trace_get_level() < TRACE_PRINTF_LEVEL) 38 return 0; 39 40 va_start(ap, fmt); 41 s = vsnprintf(to_format, sizeof(to_format), fmt, ap); 42 va_end(ap); 43 44 if (s < 0) 45 return s; 46 47 trace_ext_puts(to_format); 48 49 return s; 50 } 51 52 int puts(const char *str) 53 { 54 if (trace_get_level() >= TRACE_PRINTF_LEVEL) { 55 trace_ext_puts(str); 56 trace_ext_puts("\n"); 57 } 58 return 1; 59 } 60 61 int putchar(int c) 62 { 63 char str[2] = { (char)c, '\0' }; 64 65 if (trace_get_level() >= TRACE_PRINTF_LEVEL) 66 trace_ext_puts(str); 67 /* 68 * From the putchar() man page: 69 * "fputc(), putc() and putchar() return the character written as an 70 * unsigned char cast to an int or EOF on error." 71 */ 72 return (int)(unsigned char)c; 73 } 74 75 #else 76 77 void trace_ext_puts(const char *str __unused) 78 { 79 } 80 81 int printf(const char *fmt __unused, ...) 82 { 83 return 0; 84 } 85 86 int puts(const char *str __unused) 87 { 88 return 0; 89 } 90 91 int putchar(int c) 92 { 93 return (int)(unsigned char)c; 94 } 95 96 #endif 97