blob: 94c37a8cc3972ac392f2efe1fa8147d579f779be [file] [log] [blame]
Hanno Beckerc809ff62021-01-12 06:54:04 +00001/*
2 * Copyright The Mbed TLS Contributors
3 * SPDX-License-Identifier: Apache-2.0
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License"); you may
6 * not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
13 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 *
17 * This file is part of mbed TLS (https://tls.mbed.org)
18 */
19
20/**
Hanno Becker61d7eed2021-03-05 05:09:37 +000021 * \file mps_trace.h
Hanno Beckerc809ff62021-01-12 06:54:04 +000022 *
23 * \brief Tracing module for MPS
24 */
25
Hanno Becker984fbde2021-01-28 09:02:18 +000026#ifndef MBEDTLS_MPS_MBEDTLS_MPS_TRACE_H
27#define MBEDTLS_MPS_MBEDTLS_MPS_TRACE_H
Hanno Beckerc809ff62021-01-12 06:54:04 +000028
29#include "common.h"
Hanno Beckerc518c3b2021-01-28 07:08:08 +000030#include "mps_common.h"
31#include "mps_trace.h"
Hanno Beckerc809ff62021-01-12 06:54:04 +000032
Hanno Beckerb9100162021-01-12 09:46:03 +000033#if defined(MBEDTLS_PLATFORM_C)
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020034# include "mbedtls/platform.h"
Hanno Beckerb9100162021-01-12 09:46:03 +000035#else
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020036# include <stdio.h>
37# define mbedtls_printf printf
38# define mbedtls_vsnprintf vsnprintf
Hanno Beckerb9100162021-01-12 09:46:03 +000039#endif /* MBEDTLS_PLATFORM_C */
40
Hanno Becker984fbde2021-01-28 09:02:18 +000041#if defined(MBEDTLS_MPS_ENABLE_TRACE)
Hanno Beckerc809ff62021-01-12 06:54:04 +000042
Hanno Beckerb9100162021-01-12 09:46:03 +000043/*
44 * Adapt this to enable/disable tracing output
45 * from the various layers of the MPS.
46 */
47
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020048# define MBEDTLS_MPS_TRACE_ENABLE_LAYER_1
49# define MBEDTLS_MPS_TRACE_ENABLE_LAYER_2
50# define MBEDTLS_MPS_TRACE_ENABLE_LAYER_3
51# define MBEDTLS_MPS_TRACE_ENABLE_LAYER_4
52# define MBEDTLS_MPS_TRACE_ENABLE_READER
53# define MBEDTLS_MPS_TRACE_ENABLE_WRITER
Hanno Beckerb9100162021-01-12 09:46:03 +000054
55/*
56 * To use the existing trace module, only change
Hanno Becker984fbde2021-01-28 09:02:18 +000057 * MBEDTLS_MPS_TRACE_ENABLE_XXX above, but don't modify the
Hanno Beckerb9100162021-01-12 09:46:03 +000058 * rest of this file.
59 */
60
61typedef enum
62{
Dave Rodgmanb7468252021-04-07 12:44:02 +010063 MBEDTLS_MPS_TRACE_TYPE_COMMENT,
64 MBEDTLS_MPS_TRACE_TYPE_CALL,
65 MBEDTLS_MPS_TRACE_TYPE_ERROR,
66 MBEDTLS_MPS_TRACE_TYPE_RETURN
Hanno Becker984fbde2021-01-28 09:02:18 +000067} mbedtls_mps_trace_type;
Hanno Beckerb9100162021-01-12 09:46:03 +000068
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020069# define MBEDTLS_MPS_TRACE_BIT_LAYER_1 1
70# define MBEDTLS_MPS_TRACE_BIT_LAYER_2 2
71# define MBEDTLS_MPS_TRACE_BIT_LAYER_3 3
72# define MBEDTLS_MPS_TRACE_BIT_LAYER_4 4
73# define MBEDTLS_MPS_TRACE_BIT_WRITER 5
74# define MBEDTLS_MPS_TRACE_BIT_READER 6
Hanno Beckerb9100162021-01-12 09:46:03 +000075
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020076# if defined(MBEDTLS_MPS_TRACE_ENABLE_LAYER_1)
77# define MBEDTLS_MPS_TRACE_MASK_LAYER_1 \
78 (1u << MBEDTLS_MPS_TRACE_BIT_LAYER_1)
79# else
80# define MBEDTLS_MPS_TRACE_MASK_LAYER_1 0
81# endif
Hanno Beckerb9100162021-01-12 09:46:03 +000082
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020083# if defined(MBEDTLS_MPS_TRACE_ENABLE_LAYER_2)
84# define MBEDTLS_MPS_TRACE_MASK_LAYER_2 \
85 (1u << MBEDTLS_MPS_TRACE_BIT_LAYER_2)
86# else
87# define MBEDTLS_MPS_TRACE_MASK_LAYER_2 0
88# endif
Hanno Beckerb9100162021-01-12 09:46:03 +000089
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020090# if defined(MBEDTLS_MPS_TRACE_ENABLE_LAYER_3)
91# define MBEDTLS_MPS_TRACE_MASK_LAYER_3 \
92 (1u << MBEDTLS_MPS_TRACE_BIT_LAYER_3)
93# else
94# define MBEDTLS_MPS_TRACE_MASK_LAYER_3 0
95# endif
Hanno Beckerb9100162021-01-12 09:46:03 +000096
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020097# if defined(MBEDTLS_MPS_TRACE_ENABLE_LAYER_4)
98# define MBEDTLS_MPS_TRACE_MASK_LAYER_4 \
99 (1u << MBEDTLS_MPS_TRACE_BIT_LAYER_4)
100# else
101# define MBEDTLS_MPS_TRACE_MASK_LAYER_4 0
102# endif
Hanno Beckerb9100162021-01-12 09:46:03 +0000103
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200104# if defined(MBEDTLS_MPS_TRACE_ENABLE_READER)
105# define MBEDTLS_MPS_TRACE_MASK_READER \
106 (1u << MBEDTLS_MPS_TRACE_BIT_READER)
107# else
108# define MBEDTLS_MPS_TRACE_MASK_READER 0
109# endif
Hanno Beckerb9100162021-01-12 09:46:03 +0000110
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200111# if defined(MBEDTLS_MPS_TRACE_ENABLE_WRITER)
112# define MBEDTLS_MPS_TRACE_MASK_WRITER \
113 (1u << MBEDTLS_MPS_TRACE_BIT_WRITER)
114# else
115# define MBEDTLS_MPS_TRACE_MASK_WRITER 0
116# endif
Hanno Beckerb9100162021-01-12 09:46:03 +0000117
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200118# define MBEDTLS_MPS_TRACE_MASK \
119 (MBEDTLS_MPS_TRACE_MASK_LAYER_1 | MBEDTLS_MPS_TRACE_MASK_LAYER_2 | \
120 MBEDTLS_MPS_TRACE_MASK_LAYER_3 | MBEDTLS_MPS_TRACE_MASK_LAYER_4 | \
121 MBEDTLS_MPS_TRACE_MASK_READER | MBEDTLS_MPS_TRACE_MASK_WRITER)
Hanno Beckerb9100162021-01-12 09:46:03 +0000122
123/* We have to avoid globals because E-ACSL chokes on them...
124 * Wrap everything in stub functions. */
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200125int mbedtls_mps_trace_get_depth(void);
126void mbedtls_mps_trace_inc_depth(void);
127void mbedtls_mps_trace_dec_depth(void);
Hanno Beckerb9100162021-01-12 09:46:03 +0000128
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200129void mbedtls_mps_trace_color(int id);
130void mbedtls_mps_trace_indent(int level, mbedtls_mps_trace_type ty);
Hanno Beckerb9100162021-01-12 09:46:03 +0000131
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200132void mbedtls_mps_trace_print_msg(int id, int line, const char *format, ...);
Hanno Beckerb9100162021-01-12 09:46:03 +0000133
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200134# define MBEDTLS_MPS_TRACE(type, ...) \
135 do { \
136 if (!(MBEDTLS_MPS_TRACE_MASK & (1u << mbedtls_mps_trace_id))) \
137 break; \
138 mbedtls_mps_trace_indent(mbedtls_mps_trace_get_depth(), type); \
139 mbedtls_mps_trace_color(mbedtls_mps_trace_id); \
140 mbedtls_mps_trace_print_msg(mbedtls_mps_trace_id, __LINE__, \
141 __VA_ARGS__); \
142 mbedtls_mps_trace_color(0); \
143 } while (0)
Hanno Beckerb9100162021-01-12 09:46:03 +0000144
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200145# define MBEDTLS_MPS_TRACE_INIT(...) \
146 do { \
147 if (!(MBEDTLS_MPS_TRACE_MASK & (1u << mbedtls_mps_trace_id))) \
148 break; \
149 MBEDTLS_MPS_TRACE(MBEDTLS_MPS_TRACE_TYPE_CALL, __VA_ARGS__); \
150 mbedtls_mps_trace_inc_depth(); \
151 } while (0)
Hanno Beckerb9100162021-01-12 09:46:03 +0000152
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200153# define MBEDTLS_MPS_TRACE_END(val) \
154 do { \
155 if (!(MBEDTLS_MPS_TRACE_MASK & (1u << mbedtls_mps_trace_id))) \
156 break; \
157 MBEDTLS_MPS_TRACE(MBEDTLS_MPS_TRACE_TYPE_RETURN, "%d (-%#04x)", \
158 (int)(val), -((unsigned)(val))); \
159 mbedtls_mps_trace_dec_depth(); \
160 } while (0)
Hanno Beckerb9100162021-01-12 09:46:03 +0000161
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200162# define MBEDTLS_MPS_TRACE_RETURN(val) \
163 do { \
164 /* Breaks tail recursion. */ \
165 int ret__ = val; \
166 MBEDTLS_MPS_TRACE_END(ret__); \
167 return ret__; \
168 } while (0)
Hanno Beckerc809ff62021-01-12 06:54:04 +0000169
170#else /* MBEDTLS_MPS_TRACE */
171
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200172# define MBEDTLS_MPS_TRACE(type, ...) \
173 do { \
174 } while (0)
175# define MBEDTLS_MPS_TRACE_INIT(...) \
176 do { \
177 } while (0)
178# define MBEDTLS_MPS_TRACE_END \
179 do { \
180 } while (0)
Hanno Beckerc809ff62021-01-12 06:54:04 +0000181
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200182# define MBEDTLS_MPS_TRACE_RETURN(val) return val;
Hanno Beckerc809ff62021-01-12 06:54:04 +0000183
184#endif /* MBEDTLS_MPS_TRACE */
185
Hanno Becker984fbde2021-01-28 09:02:18 +0000186#endif /* MBEDTLS_MPS_MBEDTLS_MPS_TRACE_H */