summaryrefslogtreecommitdiffstats
path: root/cpukit/include/rtems/rtl/rtl-trace.h
blob: 196b4ff42e596889882ebcb3b23e8701d150381e (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
/*
 *  COPYRIGHT (c) 2012-2014 Chris Johns <chrisj@rtems.org>
 *
 *  The license and distribution terms for this file may be
 *  found in the file LICENSE in this distribution or at
 *  http://www.rtems.org/license/LICENSE.
 */
/**
 * @file
 *
 * @ingroup rtems_rtl
 *
 * @brief RTEMS Run-Time Linker ELF Trace Support.
 */

#if !defined (_RTEMS_RTL_TRACE_H_)
#define _RTEMS_RTL_TRACE_H_

#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */

#include <stdbool.h>
#include <stdint.h>

#include <rtems/printer.h>

/**
 * Set to 1 to build trace support in to the RTL code.
 */
#define RTEMS_RTL_TRACE 1

/**
 * The type of the mask.
 */
typedef uint32_t rtems_rtl_trace_mask;

/**
 * List of tracing bits for the various parts of the link editor.
 */
#define RTEMS_RTL_TRACE_DETAIL                 (1UL << 0)
#define RTEMS_RTL_TRACE_WARNING                (1UL << 1)
#define RTEMS_RTL_TRACE_LOAD                   (1UL << 2)
#define RTEMS_RTL_TRACE_UNLOAD                 (1UL << 3)
#define RTEMS_RTL_TRACE_SECTION                (1UL << 4)
#define RTEMS_RTL_TRACE_SYMBOL                 (1UL << 5)
#define RTEMS_RTL_TRACE_RELOC                  (1UL << 6)
#define RTEMS_RTL_TRACE_GLOBAL_SYM             (1UL << 7)
#define RTEMS_RTL_TRACE_LOAD_SECT              (1UL << 8)
#define RTEMS_RTL_TRACE_ALLOCATOR              (1UL << 9)
#define RTEMS_RTL_TRACE_UNRESOLVED             (1UL << 10)
#define RTEMS_RTL_TRACE_CACHE                  (1UL << 11)
#define RTEMS_RTL_TRACE_ARCHIVES               (1UL << 12)
#define RTEMS_RTL_TRACE_ARCHIVE_SYMS           (1UL << 13)
#define RTEMS_RTL_TRACE_DEPENDENCY             (1UL << 14)
#define RTEMS_RTL_TRACE_BIT_ALLOC              (1UL << 15)
#define RTEMS_RTL_TRACE_COMP                   (1UL << 16)
#define RTEMS_RTL_TRACE_ALL                    (0xffffffffUL & ~(RTEMS_RTL_TRACE_CACHE | \
                                                                 RTEMS_RTL_TRACE_COMP | \
                                                                 RTEMS_RTL_TRACE_GLOBAL_SYM | \
                                                                 RTEMS_RTL_TRACE_ARCHIVE_SYMS))

/**
 * Call to check if this part is bring traced. If RTEMS_RTL_TRACE is defined to
 * 0 the code is dead code elminiated when built with -Os, -O2, or higher.
 *
 * @param mask The part of the API to trace.
 * @retval true Tracing is active for the mask.
 * @retval false Do not trace.
 */
#if RTEMS_RTL_TRACE
bool rtems_rtl_trace (rtems_rtl_trace_mask mask);
#else
#define rtems_rtl_trace(_m) (0)
#endif

/**
 * Set the mask.
 *
 * @param mask The mask bits to set.
 * @return The previous mask.
 */
#if RTEMS_RTL_TRACE
rtems_rtl_trace_mask rtems_rtl_trace_set_mask (rtems_rtl_trace_mask mask);
#else
#define rtems_rtl_trace_set_mask(_m)
#endif

/**
 * Clear the mask.
 *
 * @param mask The mask bits to clear.
 * @return The previous mask.
 */
#if RTEMS_RTL_TRACE
rtems_rtl_trace_mask rtems_rtl_trace_clear_mask (rtems_rtl_trace_mask mask);
#else
#define rtems_rtl_trace_clear_mask(_m)
#endif

/**
 * Add shell trace shell command.
 */
#if RTEMS_RTL_TRACE
int rtems_rtl_trace_shell_command (const rtems_printer* printer,
				   int                  argc,
				   char*                argv[]);
#endif

#ifdef __cplusplus
}
#endif /* __cplusplus */

#endif