xref: /optee_os/lib/libutee/trace_ext.c (revision 2c028fdebbedee91f88f6c5325b5064a124dfe46)
11bb92983SJerome Forissier // SPDX-License-Identifier: BSD-2-Clause
24de4bebcSJens Wiklander /*
34de4bebcSJens Wiklander  * Copyright (c) 2014, STMicroelectronics International N.V.
44de4bebcSJens Wiklander  */
54de4bebcSJens Wiklander 
64de4bebcSJens Wiklander #include <stdio.h>
74de4bebcSJens Wiklander #include <stdarg.h>
84de4bebcSJens Wiklander #include <string.h>
94de4bebcSJens Wiklander #include <string_ext.h>
104de4bebcSJens Wiklander #include <trace.h>
114de4bebcSJens Wiklander #include <util.h>
124de4bebcSJens Wiklander #include <utee_syscalls.h>
134de4bebcSJens Wiklander 
148a1e7b89SJerome Forissier #if TRACE_LEVEL > 0
154de4bebcSJens Wiklander 
16bfc6487bSJerome Forissier void trace_ext_puts(const char *str)
174de4bebcSJens Wiklander {
18*2c028fdeSJerome Forissier 	_utee_log(str, strlen(str));
194de4bebcSJens Wiklander }
204de4bebcSJens Wiklander 
214de4bebcSJens Wiklander int trace_ext_get_thread_id(void)
224de4bebcSJens Wiklander {
234de4bebcSJens Wiklander 	return -1;
244de4bebcSJens Wiklander }
254de4bebcSJens Wiklander 
264de4bebcSJens Wiklander /*
274de4bebcSJens Wiklander  * printf and puts - stdio printf support
284de4bebcSJens Wiklander  *
294de4bebcSJens Wiklander  * 'printf()' and 'puts()' traces have the 'info' trace level.
304de4bebcSJens Wiklander  */
314de4bebcSJens Wiklander int printf(const char *fmt, ...)
324de4bebcSJens Wiklander {
334de4bebcSJens Wiklander 	char to_format[MAX_PRINT_SIZE];
344de4bebcSJens Wiklander 	va_list ap;
354de4bebcSJens Wiklander 	int s;
364de4bebcSJens Wiklander 
3744202a48SPascal Brand 	if (trace_get_level() < TRACE_PRINTF_LEVEL)
384de4bebcSJens Wiklander 		return 0;
394de4bebcSJens Wiklander 
404de4bebcSJens Wiklander 	va_start(ap, fmt);
41b0c596acSJerome Forissier 	s = vsnprintf(to_format, sizeof(to_format), fmt, ap);
424de4bebcSJens Wiklander 	va_end(ap);
434de4bebcSJens Wiklander 
44b0c596acSJerome Forissier 	if (s < 0)
454de4bebcSJens Wiklander 		return s;
464de4bebcSJens Wiklander 
47ba21727aSJerome Forissier 	trace_ext_puts(to_format);
484de4bebcSJens Wiklander 
494de4bebcSJens Wiklander 	return s;
504de4bebcSJens Wiklander }
514de4bebcSJens Wiklander 
524de4bebcSJens Wiklander int puts(const char *str)
534de4bebcSJens Wiklander {
546246cc9dSJerome Forissier 	if (trace_get_level() >= TRACE_PRINTF_LEVEL) {
55bfc6487bSJerome Forissier 		trace_ext_puts(str);
566246cc9dSJerome Forissier 		trace_ext_puts("\n");
576246cc9dSJerome Forissier 	}
584de4bebcSJens Wiklander 	return 1;
594de4bebcSJens Wiklander }
604de4bebcSJens Wiklander 
61dc454609SJerome Forissier int putchar(int c)
62dc454609SJerome Forissier {
63dc454609SJerome Forissier 	char str[2] = { (char)c, '\0' };
64dc454609SJerome Forissier 
65dc454609SJerome Forissier 	if (trace_get_level() >= TRACE_PRINTF_LEVEL)
66dc454609SJerome Forissier 		trace_ext_puts(str);
67dc454609SJerome Forissier 	/*
68dc454609SJerome Forissier 	 * From the putchar() man page:
69dc454609SJerome Forissier 	 * "fputc(), putc() and putchar() return the character written as an
70dc454609SJerome Forissier 	 * unsigned char cast to an int or EOF on error."
71dc454609SJerome Forissier 	 */
72dc454609SJerome Forissier 	return (int)(unsigned char)c;
73dc454609SJerome Forissier }
74dc454609SJerome Forissier 
754de4bebcSJens Wiklander #else
764de4bebcSJens Wiklander 
774de4bebcSJens Wiklander int printf(const char *fmt __unused, ...)
784de4bebcSJens Wiklander {
794de4bebcSJens Wiklander 	return 0;
804de4bebcSJens Wiklander }
814de4bebcSJens Wiklander 
824de4bebcSJens Wiklander int puts(const char *str __unused)
834de4bebcSJens Wiklander {
844de4bebcSJens Wiklander 	return 0;
854de4bebcSJens Wiklander }
864de4bebcSJens Wiklander 
87dc454609SJerome Forissier int putchar(int c)
88dc454609SJerome Forissier {
89dc454609SJerome Forissier 	return (int)(unsigned char)c;
90dc454609SJerome Forissier }
91dc454609SJerome Forissier 
924de4bebcSJens Wiklander #endif
93