File indexing completed on 2025-05-11 08:24:16
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039 #ifdef HAVE_CONFIG_H
0040 #include "config.h"
0041 #endif
0042
0043 #include <stdio.h>
0044 #include <string.h>
0045
0046 #include <rtems/rtl/rtl-trace.h>
0047
0048 #if RTEMS_RTL_TRACE
0049 static rtems_rtl_trace_mask rtems_rtl_trace_flags;
0050
0051 bool
0052 rtems_rtl_trace (rtems_rtl_trace_mask mask)
0053 {
0054 bool result = false;
0055 if (mask & rtems_rtl_trace_flags)
0056 result = true;
0057 return result;
0058 }
0059
0060 rtems_rtl_trace_mask
0061 rtems_rtl_trace_set_mask (rtems_rtl_trace_mask mask)
0062 {
0063 rtems_rtl_trace_mask state = rtems_rtl_trace_flags;
0064 rtems_rtl_trace_flags |= mask;
0065 return state;
0066 }
0067
0068 rtems_rtl_trace_mask
0069 rtems_rtl_trace_clear_mask (rtems_rtl_trace_mask mask)
0070 {
0071 rtems_rtl_trace_mask state = rtems_rtl_trace_flags;
0072 rtems_rtl_trace_flags &= ~mask;
0073 return state;
0074 }
0075
0076 int
0077 rtems_rtl_trace_shell_command (const rtems_printer* printer,
0078 int argc,
0079 char* argv[])
0080 {
0081 const char* table[] =
0082 {
0083 "detail",
0084 "warning",
0085 "load",
0086 "unload",
0087 "section",
0088 "symbol",
0089 "reloc",
0090 "global-sym",
0091 "load-sect",
0092 "allocator",
0093 "unresolved",
0094 "cache",
0095 "archives",
0096 "archive-syms",
0097 "dependency",
0098 "bit-alloc"
0099 };
0100
0101 rtems_rtl_trace_mask set_value = 0;
0102 rtems_rtl_trace_mask clear_value = 0;
0103 bool set = true;
0104 int arg;
0105 int t;
0106
0107 for (arg = 1; arg < argc; arg++)
0108 {
0109 if (argv[arg][0] == '-')
0110 {
0111 switch (argv[arg][1])
0112 {
0113 case 'h':
0114 rtems_printf (printer, "usage: %s [-hl] [set/clear] [flags]\n", argv[0]);
0115 return 0;
0116 case 'l':
0117 rtems_printf (printer, "%s: valid flags to set or clear are:\n", argv[0]);
0118 for (t = 0; t < (sizeof (table) / sizeof (const char*)); t++)
0119 rtems_printf (printer, " %s\n", table[t]);
0120 return 0;
0121 default:
0122 rtems_printf (printer, "error: unknown option\n");
0123 return 1;
0124 }
0125 }
0126 else
0127 {
0128 if (strcmp (argv[arg], "set") == 0)
0129 set = true;
0130 if (strcmp (argv[arg], "clear") == 0)
0131 set = false;
0132 else if (strcmp (argv[arg], "all") == 0)
0133 {
0134 if (set)
0135 set_value = RTEMS_RTL_TRACE_ALL;
0136 else
0137 clear_value = RTEMS_RTL_TRACE_ALL;
0138 }
0139 else
0140 {
0141 for (t = 0; t < (sizeof (table) / sizeof (const char*)); t++)
0142 {
0143 if (strcmp (argv[arg], table[t]) == 0)
0144 {
0145 if (set)
0146 set_value = 1 << t;
0147 else
0148 clear_value = 1 << t;
0149 break;
0150 }
0151 }
0152 }
0153
0154 rtems_rtl_trace_flags |= set_value;
0155 rtems_rtl_trace_flags &= ~clear_value;
0156 }
0157 }
0158
0159 return 0;
0160 }
0161
0162 #endif