11bb92983SJerome Forissier // SPDX-License-Identifier: BSD-2-Clause
24de4bebcSJens Wiklander /*
34de4bebcSJens Wiklander * Copyright (c) 2014, STMicroelectronics International N.V.
4*baa5161dSBalint Dobszay * Copyright (c) 2020, Arm Limited
54de4bebcSJens Wiklander */
64de4bebcSJens Wiklander
74de4bebcSJens Wiklander #include <stdio.h>
84de4bebcSJens Wiklander #include <stdarg.h>
94de4bebcSJens Wiklander #include <string.h>
104de4bebcSJens Wiklander #include <string_ext.h>
114de4bebcSJens Wiklander #include <trace.h>
124de4bebcSJens Wiklander #include <util.h>
134de4bebcSJens Wiklander #include <utee_syscalls.h>
144de4bebcSJens Wiklander
15*baa5161dSBalint Dobszay #ifdef __LDELF__
16*baa5161dSBalint Dobszay #include <ldelf_syscalls.h>
17*baa5161dSBalint Dobszay #endif
18*baa5161dSBalint Dobszay
198a1e7b89SJerome Forissier #if TRACE_LEVEL > 0
204de4bebcSJens Wiklander
trace_ext_puts(const char * str)21bfc6487bSJerome Forissier void trace_ext_puts(const char *str)
224de4bebcSJens Wiklander {
23*baa5161dSBalint Dobszay #ifdef __LDELF__
24*baa5161dSBalint Dobszay _ldelf_log(str, strlen(str));
25*baa5161dSBalint Dobszay #else
262c028fdeSJerome Forissier _utee_log(str, strlen(str));
27*baa5161dSBalint Dobszay #endif
284de4bebcSJens Wiklander }
294de4bebcSJens Wiklander
trace_ext_get_thread_id(void)304de4bebcSJens Wiklander int trace_ext_get_thread_id(void)
314de4bebcSJens Wiklander {
324de4bebcSJens Wiklander return -1;
334de4bebcSJens Wiklander }
344de4bebcSJens Wiklander
354de4bebcSJens Wiklander /*
364de4bebcSJens Wiklander * printf and puts - stdio printf support
374de4bebcSJens Wiklander *
384de4bebcSJens Wiklander * 'printf()' and 'puts()' traces have the 'info' trace level.
394de4bebcSJens Wiklander */
printf(const char * fmt,...)404de4bebcSJens Wiklander int printf(const char *fmt, ...)
414de4bebcSJens Wiklander {
424de4bebcSJens Wiklander char to_format[MAX_PRINT_SIZE];
434de4bebcSJens Wiklander va_list ap;
444de4bebcSJens Wiklander int s;
454de4bebcSJens Wiklander
4644202a48SPascal Brand if (trace_get_level() < TRACE_PRINTF_LEVEL)
474de4bebcSJens Wiklander return 0;
484de4bebcSJens Wiklander
494de4bebcSJens Wiklander va_start(ap, fmt);
50b0c596acSJerome Forissier s = vsnprintf(to_format, sizeof(to_format), fmt, ap);
514de4bebcSJens Wiklander va_end(ap);
524de4bebcSJens Wiklander
53b0c596acSJerome Forissier if (s < 0)
544de4bebcSJens Wiklander return s;
554de4bebcSJens Wiklander
56ba21727aSJerome Forissier trace_ext_puts(to_format);
574de4bebcSJens Wiklander
584de4bebcSJens Wiklander return s;
594de4bebcSJens Wiklander }
604de4bebcSJens Wiklander
puts(const char * str)614de4bebcSJens Wiklander int puts(const char *str)
624de4bebcSJens Wiklander {
636246cc9dSJerome Forissier if (trace_get_level() >= TRACE_PRINTF_LEVEL) {
64bfc6487bSJerome Forissier trace_ext_puts(str);
656246cc9dSJerome Forissier trace_ext_puts("\n");
666246cc9dSJerome Forissier }
674de4bebcSJens Wiklander return 1;
684de4bebcSJens Wiklander }
694de4bebcSJens Wiklander
putchar(int c)70dc454609SJerome Forissier int putchar(int c)
71dc454609SJerome Forissier {
72dc454609SJerome Forissier char str[2] = { (char)c, '\0' };
73dc454609SJerome Forissier
74dc454609SJerome Forissier if (trace_get_level() >= TRACE_PRINTF_LEVEL)
75dc454609SJerome Forissier trace_ext_puts(str);
76dc454609SJerome Forissier /*
77dc454609SJerome Forissier * From the putchar() man page:
78dc454609SJerome Forissier * "fputc(), putc() and putchar() return the character written as an
79dc454609SJerome Forissier * unsigned char cast to an int or EOF on error."
80dc454609SJerome Forissier */
81dc454609SJerome Forissier return (int)(unsigned char)c;
82dc454609SJerome Forissier }
83dc454609SJerome Forissier
844de4bebcSJens Wiklander #else
854de4bebcSJens Wiklander
trace_ext_puts(const char * str __unused)864d09568dSClement Faure void trace_ext_puts(const char *str __unused)
874d09568dSClement Faure {
884d09568dSClement Faure }
894d09568dSClement Faure
printf(const char * fmt __unused,...)904de4bebcSJens Wiklander int printf(const char *fmt __unused, ...)
914de4bebcSJens Wiklander {
924de4bebcSJens Wiklander return 0;
934de4bebcSJens Wiklander }
944de4bebcSJens Wiklander
puts(const char * str __unused)954de4bebcSJens Wiklander int puts(const char *str __unused)
964de4bebcSJens Wiklander {
974de4bebcSJens Wiklander return 0;
984de4bebcSJens Wiklander }
994de4bebcSJens Wiklander
putchar(int c)100dc454609SJerome Forissier int putchar(int c)
101dc454609SJerome Forissier {
102dc454609SJerome Forissier return (int)(unsigned char)c;
103dc454609SJerome Forissier }
104dc454609SJerome Forissier
1054de4bebcSJens Wiklander #endif
106