blob: 728257fa831a774b30c13c022b98f18b828e0fb4 [file] [log] [blame]
Imre Kis2ccd8e82021-10-08 11:21:14 +02001// SPDX-License-Identifier: BSD-3-Clause
2/*
3 * Copyright (c) 2021, Arm Limited and Contributors. All rights reserved.
4 */
5
6#include "trace.h"
7#include <stdarg.h>
8#include <stdio.h>
9
10#if TRACE_LEVEL >= TRACE_LEVEL_ERROR
11#ifndef TRACE_PREFIX
12#error TRACE_PREFIX must be defined
13#endif /* TRACE_PREFIX */
14
Gabor Ambrus7ccab792023-08-14 22:56:56 +020015void (*trace_puts_interface)(const char *str) = &trace_puts;
16
Gabor Toth121288a2024-10-03 18:02:15 +020017void ts_trace_printf(const char *func, int line, int level, const char *fmt, ...)
Imre Kis2ccd8e82021-10-08 11:21:14 +020018{
19 char buffer[256];
20 char level_char = 0;
21 int offset = 0;
22 va_list ap;
23 static const char levels[] = {'E', 'I', 'D'};
24
25 if (TRACE_LEVEL_ERROR <= level && TRACE_LEVEL_DEBUG >= level)
26 level_char = levels[level - TRACE_LEVEL_ERROR];
27 else
28 level_char = '?';
29
30 offset = snprintf(buffer, sizeof(buffer), "%c/" TRACE_PREFIX ": %s:%d ",
31 level_char, func, line);
32
33 if (offset < sizeof(buffer)) {
34 va_start(ap, fmt);
Imre Kise56c7b12023-06-01 13:33:40 +020035 offset += vsnprintf(buffer + offset, sizeof(buffer) - offset, fmt, ap);
Imre Kis2ccd8e82021-10-08 11:21:14 +020036 va_end(ap);
37 }
38
Imre Kise56c7b12023-06-01 13:33:40 +020039 if (offset < sizeof(buffer) - 2) {
40 buffer[offset] = '\n';
41 buffer[offset + 1] = '\0';
42 } else {
43 buffer[sizeof(buffer) - 2] = '\n';
44 buffer[sizeof(buffer) - 1] = '\0';
45 }
46
Gabor Ambrus7ccab792023-08-14 22:56:56 +020047 (*trace_puts_interface)(buffer);
Imre Kis2ccd8e82021-10-08 11:21:14 +020048}
49#endif