source: rtems/cpukit/include/rtems/record.h @ 1c72ad7

5
Last change on this file since 1c72ad7 was 1c72ad7, checked in by Sebastian Huber <sebastian.huber@…>, on 08/30/19 at 11:22:54

record: Add system events

Add system events for memory allocation/free.

Update #3665.

  • Property mode set to 100644
File size: 50.5 KB
Line 
1/*
2 * SPDX-License-Identifier: BSD-2-Clause
3 *
4 * Copyright (C) 2018, 2019 embedded brains GmbH
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 * 1. Redistributions of source code must retain the above copyright
10 *    notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 *    notice, this list of conditions and the following disclaimer in the
13 *    documentation and/or other materials provided with the distribution.
14 *
15 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
16 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
19 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25 * POSSIBILITY OF SUCH DAMAGE.
26 */
27
28#ifndef _RTEMS_RECORD_H
29#define _RTEMS_RECORD_H
30
31#include "recorddata.h"
32
33#include <rtems/score/atomic.h>
34#include <rtems/score/cpu.h>
35#include <rtems/score/percpu.h>
36#include <rtems/score/watchdog.h>
37#include <rtems/counter.h>
38
39#ifdef __cplusplus
40extern "C" {
41#endif /* __cplusplus */
42
43typedef struct Record_Control {
44  Atomic_Uint       head;
45  unsigned int      tail;
46  unsigned int      mask;
47  Watchdog_Control  Watchdog;
48  rtems_record_item Header[ 3 ];
49  RTEMS_ALIGNED( CPU_CACHE_LINE_BYTES )
50    rtems_record_item Items[ RTEMS_ZERO_LENGTH_ARRAY ];
51} Record_Control;
52
53typedef struct {
54  unsigned int    item_count;
55  Record_Control *controls;
56} Record_Configuration;
57
58typedef struct {
59  Record_Control *control;
60  unsigned int    head;
61  uint32_t        now;
62  uint32_t        level;
63} rtems_record_context;
64
65extern const Record_Configuration _Record_Configuration;
66
67void _Record_Initialize( void );
68
69bool _Record_Thread_create(
70  struct _Thread_Control *executing,
71  struct _Thread_Control *created
72);
73
74void _Record_Thread_start(
75  struct _Thread_Control *executing,
76  struct _Thread_Control *started
77);
78
79void _Record_Thread_restart(
80  struct _Thread_Control *executing,
81  struct _Thread_Control *restarted
82);
83
84void _Record_Thread_delete(
85  struct _Thread_Control *executing,
86  struct _Thread_Control *deleted
87);
88
89void _Record_Thread_switch(
90  struct _Thread_Control *executing,
91  struct _Thread_Control *heir
92);
93
94void _Record_Thread_begin( struct _Thread_Control *executing );
95
96void _Record_Thread_exitted( struct _Thread_Control *executing );
97
98void _Record_Thread_terminate(
99  struct _Thread_Control *executing
100);
101
102#define RECORD_EXTENSION \
103  { \
104    _Record_Thread_create, \
105    _Record_Thread_start, \
106    _Record_Thread_restart, \
107    _Record_Thread_delete, \
108    _Record_Thread_switch, \
109    _Record_Thread_begin, \
110    _Record_Thread_exitted, \
111    NULL, \
112    _Record_Thread_terminate \
113  }
114
115RTEMS_INLINE_ROUTINE unsigned int _Record_Index(
116  const Record_Control *control,
117  unsigned int          index
118)
119{
120  return index & control->mask;
121}
122
123RTEMS_INLINE_ROUTINE unsigned int _Record_Head( const Record_Control *control )
124{
125  return _Atomic_Load_uint( &control->head, ATOMIC_ORDER_RELAXED );
126}
127
128RTEMS_INLINE_ROUTINE unsigned int _Record_Tail( const Record_Control *control )
129{
130  return control->tail;
131}
132
133RTEMS_INLINE_ROUTINE bool _Record_Is_overflow(
134  const Record_Control *control,
135  unsigned int          tail,
136  unsigned int          head
137)
138{
139  return head - tail >= control->mask + 1U;
140}
141
142RTEMS_INLINE_ROUTINE unsigned int _Record_Capacity(
143  const Record_Control *control,
144  unsigned int          tail,
145  unsigned int          head
146)
147{
148  return ( tail - head - 1U ) & control->mask;
149}
150
151RTEMS_INLINE_ROUTINE rtems_counter_ticks _Record_Now( void )
152{
153  return rtems_counter_read();
154}
155
156typedef struct RTEMS_PACKED {
157  uint32_t format;
158  uint32_t magic;
159  rtems_record_item Version;
160  rtems_record_item Processor_maximum;
161  rtems_record_item Count;
162  rtems_record_item Frequency;
163  rtems_record_item Info[64];
164} Record_Stream_header;
165
166size_t _Record_Stream_header_initialize( Record_Stream_header *header );
167
168size_t _Record_String_to_items(
169  rtems_record_event  event,
170  const char         *str,
171  size_t              len,
172  rtems_record_item  *items,
173  size_t              item_count
174);
175
176void _Record_Caller( void *return_address );
177
178void _Record_Caller_3(
179  void               *return_address,
180  rtems_record_event  event,
181  rtems_record_data   data
182);
183
184void _Record_Caller_4(
185  void               *return_address,
186  rtems_record_event  event_0,
187  rtems_record_data   data_0,
188  rtems_record_event  event_1,
189  rtems_record_data   data_1
190);
191
192void _Record_Caller_arg( void *return_address, rtems_record_data data );
193
194void _Record_Caller_arg_2(
195  void              *return_address,
196  rtems_record_data  data_0,
197  rtems_record_data  data_1
198);
199
200void _Record_Caller_arg_3(
201  void              *return_address,
202  rtems_record_data  data_0,
203  rtems_record_data  data_1,
204  rtems_record_data  data_2
205);
206
207void _Record_Caller_arg_4(
208  void              *return_address,
209  rtems_record_data  data_0,
210  rtems_record_data  data_1,
211  rtems_record_data  data_2,
212  rtems_record_data  data_3
213);
214
215void _Record_Caller_arg_5(
216  void              *return_address,
217  rtems_record_data  data_0,
218  rtems_record_data  data_1,
219  rtems_record_data  data_2,
220  rtems_record_data  data_3,
221  rtems_record_data  data_4
222);
223
224void _Record_Caller_arg_6(
225  void              *return_address,
226  rtems_record_data  data_0,
227  rtems_record_data  data_1,
228  rtems_record_data  data_2,
229  rtems_record_data  data_3,
230  rtems_record_data  data_4,
231  rtems_record_data  data_5
232);
233
234void _Record_Caller_arg_7(
235  void              *return_address,
236  rtems_record_data  data_0,
237  rtems_record_data  data_1,
238  rtems_record_data  data_2,
239  rtems_record_data  data_3,
240  rtems_record_data  data_4,
241  rtems_record_data  data_5,
242  rtems_record_data  data_6
243);
244
245void _Record_Caller_arg_8(
246  void              *return_address,
247  rtems_record_data  data_0,
248  rtems_record_data  data_1,
249  rtems_record_data  data_2,
250  rtems_record_data  data_3,
251  rtems_record_data  data_4,
252  rtems_record_data  data_5,
253  rtems_record_data  data_6,
254  rtems_record_data  data_7
255);
256
257void _Record_Caller_arg_9(
258  void              *return_address,
259  rtems_record_data  data_0,
260  rtems_record_data  data_1,
261  rtems_record_data  data_2,
262  rtems_record_data  data_3,
263  rtems_record_data  data_4,
264  rtems_record_data  data_5,
265  rtems_record_data  data_6,
266  rtems_record_data  data_7,
267  rtems_record_data  data_8
268);
269
270void _Record_Caller_arg_10(
271  void              *return_address,
272  rtems_record_data  data_0,
273  rtems_record_data  data_1,
274  rtems_record_data  data_2,
275  rtems_record_data  data_3,
276  rtems_record_data  data_4,
277  rtems_record_data  data_5,
278  rtems_record_data  data_6,
279  rtems_record_data  data_7,
280  rtems_record_data  data_8,
281  rtems_record_data  data_9
282);
283
284void _Record_Entry_2(
285  void               *return_address,
286  rtems_record_event  event,
287  rtems_record_data   data_0,
288  rtems_record_data   data_1
289);
290
291void _Record_Entry_3(
292  void               *return_address,
293  rtems_record_event  event,
294  rtems_record_data   data_0,
295  rtems_record_data   data_1,
296  rtems_record_data   data_2
297);
298
299void _Record_Entry_4(
300  void               *return_address,
301  rtems_record_event  event,
302  rtems_record_data   data_0,
303  rtems_record_data   data_1,
304  rtems_record_data   data_2,
305  rtems_record_data   data_3
306);
307
308void _Record_Entry_5(
309  void               *return_address,
310  rtems_record_event  event,
311  rtems_record_data   data_0,
312  rtems_record_data   data_1,
313  rtems_record_data   data_2,
314  rtems_record_data   data_3,
315  rtems_record_data   data_4
316);
317
318void _Record_Entry_6(
319  void               *return_address,
320  rtems_record_event  event,
321  rtems_record_data   data_0,
322  rtems_record_data   data_1,
323  rtems_record_data   data_2,
324  rtems_record_data   data_3,
325  rtems_record_data   data_4,
326  rtems_record_data   data_5
327);
328
329void _Record_Entry_7(
330  void               *return_address,
331  rtems_record_event  event,
332  rtems_record_data   data_0,
333  rtems_record_data   data_1,
334  rtems_record_data   data_2,
335  rtems_record_data   data_3,
336  rtems_record_data   data_4,
337  rtems_record_data   data_5,
338  rtems_record_data   data_6
339);
340
341void _Record_Entry_8(
342  void               *return_address,
343  rtems_record_event  event,
344  rtems_record_data   data_0,
345  rtems_record_data   data_1,
346  rtems_record_data   data_2,
347  rtems_record_data   data_3,
348  rtems_record_data   data_4,
349  rtems_record_data   data_5,
350  rtems_record_data   data_6,
351  rtems_record_data   data_7
352);
353
354void _Record_Entry_9(
355  void               *return_address,
356  rtems_record_event  event,
357  rtems_record_data   data_0,
358  rtems_record_data   data_1,
359  rtems_record_data   data_2,
360  rtems_record_data   data_3,
361  rtems_record_data   data_4,
362  rtems_record_data   data_5,
363  rtems_record_data   data_6,
364  rtems_record_data   data_7,
365  rtems_record_data   data_8
366);
367
368void _Record_Entry_10(
369  void               *return_address,
370  rtems_record_event  event,
371  rtems_record_data   data_0,
372  rtems_record_data   data_1,
373  rtems_record_data   data_2,
374  rtems_record_data   data_3,
375  rtems_record_data   data_4,
376  rtems_record_data   data_5,
377  rtems_record_data   data_6,
378  rtems_record_data   data_7,
379  rtems_record_data   data_8,
380  rtems_record_data   data_9
381);
382
383void _Record_Exit_2(
384  void               *return_address,
385  rtems_record_event  event,
386  rtems_record_data   data_0,
387  rtems_record_data   data_1
388);
389
390void _Record_Exit_3(
391  void               *return_address,
392  rtems_record_event  event,
393  rtems_record_data   data_0,
394  rtems_record_data   data_1,
395  rtems_record_data   data_2
396);
397
398void _Record_Exit_4(
399  void               *return_address,
400  rtems_record_event  event,
401  rtems_record_data   data_0,
402  rtems_record_data   data_1,
403  rtems_record_data   data_2,
404  rtems_record_data   data_3
405);
406
407void _Record_Exit_5(
408  void               *return_address,
409  rtems_record_event  event,
410  rtems_record_data   data_0,
411  rtems_record_data   data_1,
412  rtems_record_data   data_2,
413  rtems_record_data   data_3,
414  rtems_record_data   data_4
415);
416
417void _Record_Exit_6(
418  void               *return_address,
419  rtems_record_event  event,
420  rtems_record_data   data_0,
421  rtems_record_data   data_1,
422  rtems_record_data   data_2,
423  rtems_record_data   data_3,
424  rtems_record_data   data_4,
425  rtems_record_data   data_5
426);
427
428void _Record_Exit_7(
429  void               *return_address,
430  rtems_record_event  event,
431  rtems_record_data   data_0,
432  rtems_record_data   data_1,
433  rtems_record_data   data_2,
434  rtems_record_data   data_3,
435  rtems_record_data   data_4,
436  rtems_record_data   data_5,
437  rtems_record_data   data_6
438);
439
440void _Record_Exit_8(
441  void               *return_address,
442  rtems_record_event  event,
443  rtems_record_data   data_0,
444  rtems_record_data   data_1,
445  rtems_record_data   data_2,
446  rtems_record_data   data_3,
447  rtems_record_data   data_4,
448  rtems_record_data   data_5,
449  rtems_record_data   data_6,
450  rtems_record_data   data_7
451);
452
453void _Record_Exit_9(
454  void               *return_address,
455  rtems_record_event  event,
456  rtems_record_data   data_0,
457  rtems_record_data   data_1,
458  rtems_record_data   data_2,
459  rtems_record_data   data_3,
460  rtems_record_data   data_4,
461  rtems_record_data   data_5,
462  rtems_record_data   data_6,
463  rtems_record_data   data_7,
464  rtems_record_data   data_8
465);
466
467void _Record_Exit_10(
468  void               *return_address,
469  rtems_record_event  event,
470  rtems_record_data   data_0,
471  rtems_record_data   data_1,
472  rtems_record_data   data_2,
473  rtems_record_data   data_3,
474  rtems_record_data   data_4,
475  rtems_record_data   data_5,
476  rtems_record_data   data_6,
477  rtems_record_data   data_7,
478  rtems_record_data   data_8,
479  rtems_record_data   data_9
480);
481
482/**
483 * @addtogroup RTEMSRecord
484 *
485 * @{
486 */
487
488/**
489 * @brief Prepares to add and commit record items in a critical section with
490 * interrupts disabled.
491 *
492 * This function does not disable interrupts.  It must be called with
493 * interrupts disabled.  Interrupts must be disabled until the corresponding
494 * rtems_record_commit_critical() was called.
495 *
496 * @param context The record context which must be used for the following
497 *   rtems_record_add() and rtems_record_commit_critical() calls.  The record
498 *   context may have an arbitrary content at function entry.
499 * @param cpu_self The control of the current processor.
500 */
501RTEMS_INLINE_ROUTINE void rtems_record_prepare_critical(
502  rtems_record_context  *context,
503  const Per_CPU_Control *cpu_self
504)
505{
506  Record_Control *control;
507  unsigned int    head;
508
509  context->now = RTEMS_RECORD_TIME_EVENT( _Record_Now(), 0 );
510  control = cpu_self->record;
511  context->control = control;
512  head = _Record_Head( control );
513  context->head = head;
514}
515
516/**
517 * @brief Prepares to add and commit record items.
518 *
519 * This function disables interrupts.
520 *
521 * @param context The record context which must be used for the following
522 *   rtems_record_add() and rtems_record_commit() calls.  The record context
523 *   may have an arbitrary content at function entry.
524 *
525 * @see rtems_record_produce().
526 */
527RTEMS_INLINE_ROUTINE void rtems_record_prepare( rtems_record_context *context )
528{
529  uint32_t               level;
530  const Per_CPU_Control *cpu_self;
531  Record_Control        *control;
532  unsigned int           head;
533
534  _CPU_ISR_Disable( level );
535  RTEMS_COMPILER_MEMORY_BARRIER();
536  context->now = RTEMS_RECORD_TIME_EVENT( _Record_Now(), 0 );
537  context->level = level;
538  cpu_self = _Per_CPU_Get();
539  control = cpu_self->record;
540  context->control = control;
541  head = _Record_Head( control );
542  context->head = head;
543}
544
545/**
546 * @brief Adds a record item.
547 *
548 * @param context The record context initialized via rtems_record_prepare().
549 * @param event The record event without a time stamp for the item.
550 * @param data The record data for the item.
551 */
552RTEMS_INLINE_ROUTINE void rtems_record_add(
553  rtems_record_context *context,
554  rtems_record_event    event,
555  rtems_record_data     data
556)
557{
558  Record_Control    *control;
559  rtems_record_item *item;
560  unsigned int       head;
561
562  control = context->control;
563  head = context->head;
564  item = &control->Items[ _Record_Index( control, head ) ];
565  context->head = head + 1;
566
567  item->event = context->now | event;
568  item->data = data;
569}
570
571/**
572 * @brief Commits a set of record items in a critical section with interrupts
573 * disabled.
574 *
575 * @param context The record context initialized via
576 *   rtems_record_prepare_critical().
577 */
578RTEMS_INLINE_ROUTINE void rtems_record_commit_critical( rtems_record_context *context )
579{
580  _Atomic_Store_uint(
581    &context->control->head,
582    context->head,
583    ATOMIC_ORDER_RELEASE
584  );
585}
586
587/**
588 * @brief Commits a set of record items.
589 *
590 * @param context The record context initialized via rtems_record_prepare().
591 */
592RTEMS_INLINE_ROUTINE void rtems_record_commit( rtems_record_context *context )
593{
594  rtems_record_commit_critical( context );
595  RTEMS_COMPILER_MEMORY_BARRIER();
596  _CPU_ISR_Enable( context->level );
597}
598
599/**
600 * @brief Produces a record item.
601 *
602 * @param event The record event without a time stamp for the item.
603 * @param data The record data for the item.
604 */
605void rtems_record_produce( rtems_record_event event, rtems_record_data data );
606
607/**
608 * @brief Produces two record items.
609 *
610 * @param event_0 The record event without a time stamp for the first item.
611 * @param data_0 The record data for the first item.
612 * @param event_1 The record event without a time stamp for the second item.
613 * @param data_1 The record data for the second item.
614 */
615void rtems_record_produce_2(
616  rtems_record_event event_0,
617  rtems_record_data  data_0,
618  rtems_record_event event_1,
619  rtems_record_data  data_1
620);
621
622/**
623 * @brief Produces n record items.
624 *
625 * @param item The record items without a time stamps.
626 * @param n The count of record items.
627 */
628void rtems_record_produce_n(
629  const rtems_record_item *items,
630  size_t                   n
631);
632
633/**
634 * @brief Generates an RTEMS_RECORD_LINE event.
635 *
636 * The event data is the address of the call to this function.
637 */
638void rtems_record_line( void );
639
640/**
641 * @brief Generates an RTEMS_RECORD_LINE event and an extra event.
642 *
643 * The event data is the address of the call to this function.
644 *
645 * @param event The record event without a time stamp for the second item.
646 * @param data The record data for the second item.
647 */
648void rtems_record_line_2(
649  rtems_record_event event,
650  rtems_record_data  data
651);
652
653/**
654 * @brief Generates an RTEMS_RECORD_LINE event and two extra events.
655 *
656 * The event data is the address of the call to this function.
657 *
658 * @param event_0 The record event without a time stamp for the second item.
659 * @param data_0 The record data for the second item.
660 * @param event_1 The record event without a time stamp for the third item.
661 * @param data_1 The record data for the third item.
662 */
663void rtems_record_line_3(
664  rtems_record_event event_0,
665  rtems_record_data  data_0,
666  rtems_record_event event_1,
667  rtems_record_data  data_1
668);
669
670/**
671 * @brief Generates an RTEMS_RECORD_LINE event and one argument event.
672 *
673 * The event data of the RTEMS_RECORD_LINE event is the address of the call to
674 * this function.
675 *
676 * @param data The RTEMS_RECORD_ARG_0 event data.
677 */
678void rtems_record_line_arg( rtems_record_data data );
679
680/**
681 * @brief Generates an RTEMS_RECORD_LINE event and two argument events.
682 *
683 * The event data of the RTEMS_RECORD_LINE event is the address of the call to
684 * this function.
685 *
686 * @param data_0 The RTEMS_RECORD_ARG_0 event data.
687 * @param data_1 The RTEMS_RECORD_ARG_1 event data.
688 */
689void rtems_record_line_arg_2(
690  rtems_record_data data_0,
691  rtems_record_data data_1
692);
693
694/**
695 * @brief Generates an RTEMS_RECORD_LINE event and three argument events.
696 *
697 * The event data of the RTEMS_RECORD_LINE event is the address of the call to
698 * this function.
699 *
700 * @param data_0 The RTEMS_RECORD_ARG_0 event data.
701 * @param data_1 The RTEMS_RECORD_ARG_1 event data.
702 * @param data_2 The RTEMS_RECORD_ARG_2 event data.
703 */
704void rtems_record_line_arg_3(
705  rtems_record_data data_0,
706  rtems_record_data data_1,
707  rtems_record_data data_2
708);
709
710/**
711 * @brief Generates an RTEMS_RECORD_LINE event and four argument events.
712 *
713 * The event data of the RTEMS_RECORD_LINE event is the address of the call to
714 * this function.
715 *
716 * @param data_0 The RTEMS_RECORD_ARG_0 event data.
717 * @param data_1 The RTEMS_RECORD_ARG_1 event data.
718 * @param data_2 The RTEMS_RECORD_ARG_2 event data.
719 * @param data_3 The RTEMS_RECORD_ARG_3 event data.
720 */
721void rtems_record_line_arg_4(
722  rtems_record_data data_0,
723  rtems_record_data data_1,
724  rtems_record_data data_2,
725  rtems_record_data data_3
726);
727
728/**
729 * @brief Generates an RTEMS_RECORD_LINE event and five argument events.
730 *
731 * The event data of the RTEMS_RECORD_LINE event is the address of the call to
732 * this function.
733 *
734 * @param data_0 The RTEMS_RECORD_ARG_0 event data.
735 * @param data_1 The RTEMS_RECORD_ARG_1 event data.
736 * @param data_2 The RTEMS_RECORD_ARG_2 event data.
737 * @param data_3 The RTEMS_RECORD_ARG_3 event data.
738 * @param data_4 The RTEMS_RECORD_ARG_4 event data.
739 */
740void rtems_record_line_arg_5(
741  rtems_record_data data_0,
742  rtems_record_data data_1,
743  rtems_record_data data_2,
744  rtems_record_data data_3,
745  rtems_record_data data_4
746);
747
748/**
749 * @brief Generates an RTEMS_RECORD_LINE event and six argument events.
750 *
751 * The event data of the RTEMS_RECORD_LINE event is the address of the call to
752 * this function.
753 *
754 * @param data_0 The RTEMS_RECORD_ARG_0 event data.
755 * @param data_1 The RTEMS_RECORD_ARG_1 event data.
756 * @param data_2 The RTEMS_RECORD_ARG_2 event data.
757 * @param data_3 The RTEMS_RECORD_ARG_3 event data.
758 * @param data_4 The RTEMS_RECORD_ARG_4 event data.
759 * @param data_5 The RTEMS_RECORD_ARG_5 event data.
760 */
761void rtems_record_line_arg_6(
762  rtems_record_data data_0,
763  rtems_record_data data_1,
764  rtems_record_data data_2,
765  rtems_record_data data_3,
766  rtems_record_data data_4,
767  rtems_record_data data_5
768);
769
770/**
771 * @brief Generates an RTEMS_RECORD_LINE event and seven argument events.
772 *
773 * The event data of the RTEMS_RECORD_LINE event is the address of the call to
774 * this function.
775 *
776 * @param data_0 The RTEMS_RECORD_ARG_0 event data.
777 * @param data_1 The RTEMS_RECORD_ARG_1 event data.
778 * @param data_2 The RTEMS_RECORD_ARG_2 event data.
779 * @param data_3 The RTEMS_RECORD_ARG_3 event data.
780 * @param data_4 The RTEMS_RECORD_ARG_4 event data.
781 * @param data_5 The RTEMS_RECORD_ARG_5 event data.
782 * @param data_6 The RTEMS_RECORD_ARG_6 event data.
783 */
784void rtems_record_line_arg_7(
785  rtems_record_data data_0,
786  rtems_record_data data_1,
787  rtems_record_data data_2,
788  rtems_record_data data_3,
789  rtems_record_data data_4,
790  rtems_record_data data_5,
791  rtems_record_data data_6
792);
793
794/**
795 * @brief Generates an RTEMS_RECORD_LINE event and eight argument events.
796 *
797 * The event data of the RTEMS_RECORD_LINE event is the address of the call to
798 * this function.
799 *
800 * @param data_0 The RTEMS_RECORD_ARG_0 event data.
801 * @param data_1 The RTEMS_RECORD_ARG_1 event data.
802 * @param data_2 The RTEMS_RECORD_ARG_2 event data.
803 * @param data_3 The RTEMS_RECORD_ARG_3 event data.
804 * @param data_4 The RTEMS_RECORD_ARG_4 event data.
805 * @param data_5 The RTEMS_RECORD_ARG_5 event data.
806 * @param data_6 The RTEMS_RECORD_ARG_6 event data.
807 * @param data_7 The RTEMS_RECORD_ARG_7 event data.
808 */
809void rtems_record_line_arg_8(
810  rtems_record_data data_0,
811  rtems_record_data data_1,
812  rtems_record_data data_2,
813  rtems_record_data data_3,
814  rtems_record_data data_4,
815  rtems_record_data data_5,
816  rtems_record_data data_6,
817  rtems_record_data data_7
818);
819
820/**
821 * @brief Generates an RTEMS_RECORD_LINE event and nine argument events.
822 *
823 * The event data of the RTEMS_RECORD_LINE event is the address of the call to
824 * this function.
825 *
826 * @param data_0 The RTEMS_RECORD_ARG_0 event data.
827 * @param data_1 The RTEMS_RECORD_ARG_1 event data.
828 * @param data_2 The RTEMS_RECORD_ARG_2 event data.
829 * @param data_3 The RTEMS_RECORD_ARG_3 event data.
830 * @param data_4 The RTEMS_RECORD_ARG_4 event data.
831 * @param data_5 The RTEMS_RECORD_ARG_5 event data.
832 * @param data_6 The RTEMS_RECORD_ARG_6 event data.
833 * @param data_7 The RTEMS_RECORD_ARG_7 event data.
834 * @param data_8 The RTEMS_RECORD_ARG_8 event data.
835 */
836void rtems_record_line_arg_9(
837  rtems_record_data data_0,
838  rtems_record_data data_1,
839  rtems_record_data data_2,
840  rtems_record_data data_3,
841  rtems_record_data data_4,
842  rtems_record_data data_5,
843  rtems_record_data data_6,
844  rtems_record_data data_7,
845  rtems_record_data data_8
846);
847
848/**
849 * @brief Generates an RTEMS_RECORD_LINE event and ten argument events.
850 *
851 * The event data of the RTEMS_RECORD_LINE event is the address of the call to
852 * this function.
853 *
854 * @param data_0 The RTEMS_RECORD_ARG_0 event data.
855 * @param data_1 The RTEMS_RECORD_ARG_1 event data.
856 * @param data_2 The RTEMS_RECORD_ARG_2 event data.
857 * @param data_3 The RTEMS_RECORD_ARG_3 event data.
858 * @param data_4 The RTEMS_RECORD_ARG_4 event data.
859 * @param data_5 The RTEMS_RECORD_ARG_5 event data.
860 * @param data_6 The RTEMS_RECORD_ARG_6 event data.
861 * @param data_7 The RTEMS_RECORD_ARG_7 event data.
862 * @param data_8 The RTEMS_RECORD_ARG_8 event data.
863 * @param data_9 The RTEMS_RECORD_ARG_9 event data.
864 */
865void rtems_record_line_arg_10(
866  rtems_record_data data_0,
867  rtems_record_data data_1,
868  rtems_record_data data_2,
869  rtems_record_data data_3,
870  rtems_record_data data_4,
871  rtems_record_data data_5,
872  rtems_record_data data_6,
873  rtems_record_data data_7,
874  rtems_record_data data_8,
875  rtems_record_data data_9
876);
877
878/**
879 * @brief Generates an RTEMS_RECORD_CALLER and an RTEMS_RECORD_LINE event.
880 *
881 * The RTEMS_RECORD_CALLER event data is the return address of the function
882 * calling rtems_record_caller().
883 *
884 * The RTEMS_RECORD_LINE event data is the address of the call to
885 * rtems_record_caller().
886 */
887#define rtems_record_caller() _Record_Caller( RTEMS_RETURN_ADDRESS() )
888
889/**
890 * @brief Generates an RTEMS_RECORD_CALLER, an RTEMS_RECORD_LINE event, and an
891 * extra event.
892 *
893 * The RTEMS_RECORD_CALLER event data is the return address of the function
894 * calling rtems_record_caller_3().
895 *
896 * The RTEMS_RECORD_LINE event data is the address of the call to
897 * rtems_record_caller_3().
898 *
899 * @param event The record event without a time stamp for the third item.
900 * @param data The record data for the third item.
901 */
902#define rtems_record_caller_3( event, data ) \
903  _Record_Caller_3( RTEMS_RETURN_ADDRESS(), event, data )
904
905/**
906 * @brief Generates an RTEMS_RECORD_CALLER, an RTEMS_RECORD_LINE event, and two
907 * extra events.
908 *
909 * The RTEMS_RECORD_CALLER event data is the return address of the function
910 * calling rtems_record_caller_4().
911 *
912 * The RTEMS_RECORD_LINE event data is the address of the call to
913 * rtems_record_caller_4().
914 *
915 * @param event_0 The record event without a time stamp for the third item.
916 * @param data_0 The record data for the third item.
917 * @param event_1 The record event without a time stamp for the fourth item.
918 * @param data_1 The record data for the fourth item.
919 */
920#define rtems_record_caller_4( event_0, data_0, event_1, data_1 ) \
921  _Record_Caller_4( \
922    RTEMS_RETURN_ADDRESS(), \
923    event_0, \
924    data_0, \
925    event_1, \
926    data_1 \
927  )
928
929/**
930 * @brief Generates an RTEMS_RECORD_CALLER event, an RTEMS_RECORD_LINE event,
931 * and one argument event.
932 *
933 * The RTEMS_RECORD_CALLER event data is the return address of the function
934 * calling rtems_record_caller_arg().
935 *
936 * The RTEMS_RECORD_LINE event data is the address of the call to
937 * rtems_record_caller_arg().
938 *
939 * @param data The RTEMS_RECORD_ARG_0 event data.
940 */
941#define rtems_record_caller_arg( data ) \
942  _Record_Caller_arg( RTEMS_RETURN_ADDRESS(), data )
943
944/**
945 * @brief Generates an RTEMS_RECORD_CALLER event, an RTEMS_RECORD_LINE event,
946 * and two argument events.
947 *
948 * The RTEMS_RECORD_CALLER event data is the return address of the function
949 * calling rtems_record_caller_arg_2().
950 *
951 * The RTEMS_RECORD_LINE event data is the address of the call to
952 * rtems_record_caller_arg_2().
953 *
954 * @param data_0 The RTEMS_RECORD_ARG_0 event data.
955 * @param data_1 The RTEMS_RECORD_ARG_1 event data.
956 */
957#define rtems_record_caller_arg_2( data_0, data_1 ) \
958  _Record_Caller_arg_2( \
959    RTEMS_RETURN_ADDRESS(), \
960    data_0, \
961    data_1 \
962  )
963
964/**
965 * @brief Generates an RTEMS_RECORD_CALLER event, an RTEMS_RECORD_LINE event,
966 * and three argument events.
967 *
968 * The RTEMS_RECORD_CALLER event data is the return address of the function
969 * calling rtems_record_caller_arg_3().
970 *
971 * The RTEMS_RECORD_LINE event data is the address of the call to
972 * rtems_record_caller_arg_3().
973 *
974 * @param data_0 The RTEMS_RECORD_ARG_0 event data.
975 * @param data_1 The RTEMS_RECORD_ARG_1 event data.
976 * @param data_2 The RTEMS_RECORD_ARG_2 event data.
977 */
978#define rtems_record_caller_arg_3( data_0, data_1, data_2 ) \
979  _Record_Caller_arg_3( \
980    RTEMS_RETURN_ADDRESS(), \
981    data_0, \
982    data_1, \
983    data_2 \
984  )
985
986/**
987 * @brief Generates an RTEMS_RECORD_CALLER event, an RTEMS_RECORD_LINE event,
988 * and four argument events.
989 *
990 * The RTEMS_RECORD_CALLER event data is the return address of the function
991 * calling rtems_record_caller_arg_4().
992 *
993 * The RTEMS_RECORD_LINE event data is the address of the call to
994 * rtems_record_caller_arg_4().
995 *
996 * @param data_0 The RTEMS_RECORD_ARG_0 event data.
997 * @param data_1 The RTEMS_RECORD_ARG_1 event data.
998 * @param data_2 The RTEMS_RECORD_ARG_2 event data.
999 * @param data_3 The RTEMS_RECORD_ARG_3 event data.
1000 */
1001#define rtems_record_caller_arg_4( data_0, data_1, data_2, data_3 ) \
1002  _Record_Caller_arg_4( \
1003    RTEMS_RETURN_ADDRESS(), \
1004    data_0, \
1005    data_1, \
1006    data_2, \
1007    data_3 \
1008  )
1009
1010/**
1011 * @brief Generates an RTEMS_RECORD_CALLER event, an RTEMS_RECORD_LINE event,
1012 * and five argument events.
1013 *
1014 * The RTEMS_RECORD_CALLER event data is the return address of the function
1015 * calling rtems_record_caller_arg_5().
1016 *
1017 * The RTEMS_RECORD_LINE event data is the address of the call to
1018 * rtems_record_caller_arg_5().
1019 *
1020 * @param data_0 The RTEMS_RECORD_ARG_0 event data.
1021 * @param data_1 The RTEMS_RECORD_ARG_1 event data.
1022 * @param data_2 The RTEMS_RECORD_ARG_2 event data.
1023 * @param data_3 The RTEMS_RECORD_ARG_3 event data.
1024 * @param data_4 The RTEMS_RECORD_ARG_4 event data.
1025 */
1026#define rtems_record_caller_arg_5( data_0, data_1, data_2, data_3, data_4 ) \
1027  _Record_Caller_arg_5( \
1028    RTEMS_RETURN_ADDRESS(), \
1029    data_0, \
1030    data_1, \
1031    data_2, \
1032    data_3, \
1033    data_4 \
1034  )
1035
1036/**
1037 * @brief Generates an RTEMS_RECORD_CALLER event, an RTEMS_RECORD_LINE event,
1038 * and six argument events.
1039 *
1040 * The RTEMS_RECORD_CALLER event data is the return address of the function
1041 * calling rtems_record_caller_arg_6().
1042 *
1043 * The RTEMS_RECORD_LINE event data is the address of the call to
1044 * rtems_record_caller_arg_6().
1045 *
1046 * @param data_0 The RTEMS_RECORD_ARG_0 event data.
1047 * @param data_1 The RTEMS_RECORD_ARG_1 event data.
1048 * @param data_2 The RTEMS_RECORD_ARG_2 event data.
1049 * @param data_3 The RTEMS_RECORD_ARG_3 event data.
1050 * @param data_4 The RTEMS_RECORD_ARG_4 event data.
1051 * @param data_5 The RTEMS_RECORD_ARG_5 event data.
1052 */
1053#define rtems_record_caller_arg_6( \
1054  data_0, \
1055  data_1, \
1056  data_2, \
1057  data_3, \
1058  data_4, \
1059  data_5 \
1060) \
1061  _Record_Caller_arg_6( \
1062    RTEMS_RETURN_ADDRESS(), \
1063    data_0, \
1064    data_1, \
1065    data_2, \
1066    data_3, \
1067    data_4, \
1068    data_5 \
1069  )
1070
1071/**
1072 * @brief Generates an RTEMS_RECORD_CALLER event, an RTEMS_RECORD_LINE event,
1073 * and seven argument events.
1074 *
1075 * The RTEMS_RECORD_CALLER event data is the return address of the function
1076 * calling rtems_record_caller_arg_7().
1077 *
1078 * The RTEMS_RECORD_LINE event data is the address of the call to
1079 * rtems_record_caller_arg_7().
1080 *
1081 * @param data_0 The RTEMS_RECORD_ARG_0 event data.
1082 * @param data_1 The RTEMS_RECORD_ARG_1 event data.
1083 * @param data_2 The RTEMS_RECORD_ARG_2 event data.
1084 * @param data_3 The RTEMS_RECORD_ARG_3 event data.
1085 * @param data_4 The RTEMS_RECORD_ARG_4 event data.
1086 * @param data_5 The RTEMS_RECORD_ARG_5 event data.
1087 * @param data_6 The RTEMS_RECORD_ARG_6 event data.
1088 */
1089#define rtems_record_caller_arg_7( \
1090  data_0, \
1091  data_1, \
1092  data_2, \
1093  data_3, \
1094  data_4, \
1095  data_5, \
1096  data_6 \
1097) \
1098  _Record_Caller_arg_7( \
1099    RTEMS_RETURN_ADDRESS(), \
1100    data_0, \
1101    data_1, \
1102    data_2, \
1103    data_3, \
1104    data_4, \
1105    data_5, \
1106    data_6 \
1107  )
1108
1109/**
1110 * @brief Generates an RTEMS_RECORD_CALLER event, an RTEMS_RECORD_LINE event,
1111 * and eight argument events.
1112 *
1113 * The RTEMS_RECORD_CALLER event data is the return address of the function
1114 * calling rtems_record_caller_arg_8().
1115 *
1116 * The RTEMS_RECORD_LINE event data is the address of the call to
1117 * rtems_record_caller_arg_8().
1118 *
1119 * @param data_0 The RTEMS_RECORD_ARG_0 event data.
1120 * @param data_1 The RTEMS_RECORD_ARG_1 event data.
1121 * @param data_2 The RTEMS_RECORD_ARG_2 event data.
1122 * @param data_3 The RTEMS_RECORD_ARG_3 event data.
1123 * @param data_4 The RTEMS_RECORD_ARG_4 event data.
1124 * @param data_5 The RTEMS_RECORD_ARG_5 event data.
1125 * @param data_6 The RTEMS_RECORD_ARG_6 event data.
1126 * @param data_7 The RTEMS_RECORD_ARG_7 event data.
1127 */
1128#define rtems_record_caller_arg_8( \
1129  data_0, \
1130  data_1, \
1131  data_2, \
1132  data_3, \
1133  data_4, \
1134  data_5, \
1135  data_6, \
1136  data_7 \
1137) \
1138  _Record_Caller_arg_8( \
1139    RTEMS_RETURN_ADDRESS(), \
1140    data_0, \
1141    data_1, \
1142    data_2, \
1143    data_3, \
1144    data_4, \
1145    data_5, \
1146    data_6, \
1147    data_7 \
1148  )
1149
1150/**
1151 * @brief Generates an RTEMS_RECORD_CALLER event, an RTEMS_RECORD_LINE event,
1152 * and nine argument events.
1153 *
1154 * The RTEMS_RECORD_CALLER event data is the return address of the function
1155 * calling rtems_record_caller_arg_9().
1156 *
1157 * The RTEMS_RECORD_LINE event data is the address of the call to
1158 * rtems_record_caller_arg_9().
1159 *
1160 * @param data_0 The RTEMS_RECORD_ARG_0 event data.
1161 * @param data_1 The RTEMS_RECORD_ARG_1 event data.
1162 * @param data_2 The RTEMS_RECORD_ARG_2 event data.
1163 * @param data_3 The RTEMS_RECORD_ARG_3 event data.
1164 * @param data_4 The RTEMS_RECORD_ARG_4 event data.
1165 * @param data_5 The RTEMS_RECORD_ARG_5 event data.
1166 * @param data_6 The RTEMS_RECORD_ARG_6 event data.
1167 * @param data_7 The RTEMS_RECORD_ARG_7 event data.
1168 * @param data_8 The RTEMS_RECORD_ARG_8 event data.
1169 */
1170#define rtems_record_caller_arg_9( \
1171  data_0, \
1172  data_1, \
1173  data_2, \
1174  data_3, \
1175  data_4, \
1176  data_5, \
1177  data_6, \
1178  data_7, \
1179  data_8 \
1180) \
1181  _Record_Caller_arg_9( \
1182    RTEMS_RETURN_ADDRESS(), \
1183    data_0, \
1184    data_1, \
1185    data_2, \
1186    data_3, \
1187    data_4, \
1188    data_5, \
1189    data_6, \
1190    data_7, \
1191    data_8 \
1192  )
1193
1194/**
1195 * @brief Generates an RTEMS_RECORD_CALLER event, an RTEMS_RECORD_LINE event,
1196 * and ten argument events.
1197 *
1198 * The RTEMS_RECORD_CALLER event data is the return address of the function
1199 * calling rtems_record_caller_arg_10().
1200 *
1201 * The RTEMS_RECORD_LINE event data is the address of the call to
1202 * rtems_record_caller_arg_10().
1203 *
1204 * @param data_0 The RTEMS_RECORD_ARG_0 event data.
1205 * @param data_1 The RTEMS_RECORD_ARG_1 event data.
1206 * @param data_2 The RTEMS_RECORD_ARG_2 event data.
1207 * @param data_3 The RTEMS_RECORD_ARG_3 event data.
1208 * @param data_4 The RTEMS_RECORD_ARG_4 event data.
1209 * @param data_5 The RTEMS_RECORD_ARG_5 event data.
1210 * @param data_6 The RTEMS_RECORD_ARG_6 event data.
1211 * @param data_7 The RTEMS_RECORD_ARG_7 event data.
1212 * @param data_8 The RTEMS_RECORD_ARG_8 event data.
1213 * @param data_10 The RTEMS_RECORD_ARG_10 event data.
1214 */
1215#define rtems_record_caller_arg_10( \
1216  data_0, \
1217  data_1, \
1218  data_2, \
1219  data_3, \
1220  data_4, \
1221  data_5, \
1222  data_6, \
1223  data_7, \
1224  data_8, \
1225  data_9 \
1226) \
1227  _Record_Caller_arg_10( \
1228    RTEMS_RETURN_ADDRESS(), \
1229    data_0, \
1230    data_1, \
1231    data_2, \
1232    data_3, \
1233    data_4, \
1234    data_5, \
1235    data_6, \
1236    data_7, \
1237    data_8, \
1238    data_9 \
1239  )
1240
1241/**
1242 * @brief Generates the specified entry event.
1243 *
1244 * The event data of the specified entry event is the return address of the
1245 * function calling rtems_record_entry().
1246 *
1247 * @param event The entry event.
1248 */
1249#define rtems_record_entry( event ) \
1250  rtems_record_produce( event, (rtems_record_data) RTEMS_RETURN_ADDRESS() )
1251
1252/**
1253 * @brief Generates the specified entry event and an argument event.
1254 *
1255 * The event data of the specified entry event is the return address of the
1256 * function calling rtems_record_entry_1().
1257 *
1258 * @param event The entry event.
1259 * @param data The RTEMS_RECORD_ARG_0 event data.
1260 */
1261#define rtems_record_entry_1( event, data ) \
1262  rtems_record_produce_2( \
1263    event, \
1264    (rtems_record_data) RTEMS_RETURN_ADDRESS(), \
1265    RTEMS_RECORD_ARG_0, \
1266    data \
1267  )
1268
1269/**
1270 * @brief Generates the specified entry event and two argument events.
1271 *
1272 * The event data of the specified entry event is the return address of the
1273 * function calling rtems_record_entry_2().
1274 *
1275 * @param event The entry event.
1276 * @param data_0 The RTEMS_RECORD_ARG_0 event data.
1277 * @param data_1 The RTEMS_RECORD_ARG_1 event data.
1278 */
1279#define rtems_record_entry_2( event, data_0, data_1 ) \
1280  _Record_Entry_2( RTEMS_RETURN_ADDRESS(), event, data_0, data_1 )
1281
1282/**
1283 * @brief Generates the specified entry event and three argument events.
1284 *
1285 * The event data of the specified entry event is the return address of the
1286 * function calling rtems_record_entry_3().
1287 *
1288 * @param event The entry event.
1289 * @param data_0 The RTEMS_RECORD_ARG_0 event data.
1290 * @param data_1 The RTEMS_RECORD_ARG_1 event data.
1291 * @param data_2 The RTEMS_RECORD_ARG_2 event data.
1292 */
1293#define rtems_record_entry_3( event, data_0, data_1, data_2 ) \
1294  _Record_Entry_3( \
1295    RTEMS_RETURN_ADDRESS(), \
1296    event, \
1297    data_0, \
1298    data_1, \
1299    data_2 \
1300  )
1301
1302/**
1303 * @brief Generates the specified entry event and four argument events.
1304 *
1305 * The event data of the specified entry event is the return address of the
1306 * function calling rtems_record_entry_4().
1307 *
1308 * @param event The entry event.
1309 * @param data_0 The RTEMS_RECORD_ARG_0 event data.
1310 * @param data_1 The RTEMS_RECORD_ARG_1 event data.
1311 * @param data_2 The RTEMS_RECORD_ARG_2 event data.
1312 * @param data_3 The RTEMS_RECORD_ARG_3 event data.
1313 */
1314#define rtems_record_entry_4( event, data_0, data_1, data_2, data_3 ) \
1315  _Record_Entry_4( \
1316    RTEMS_RETURN_ADDRESS(), \
1317    event, \
1318    data_0, \
1319    data_1, \
1320    data_2, \
1321    data_3 \
1322  )
1323
1324/**
1325 * @brief Generates the specified entry event and five argument events.
1326 *
1327 * The event data of the specified entry event is the return address of the
1328 * function calling rtems_record_entry_5().
1329 *
1330 * @param event The entry event.
1331 * @param data_0 The RTEMS_RECORD_ARG_0 event data.
1332 * @param data_1 The RTEMS_RECORD_ARG_1 event data.
1333 * @param data_2 The RTEMS_RECORD_ARG_2 event data.
1334 * @param data_3 The RTEMS_RECORD_ARG_3 event data.
1335 * @param data_4 The RTEMS_RECORD_ARG_4 event data.
1336 */
1337#define rtems_record_entry_5( \
1338  event, \
1339  data_0, \
1340  data_1, \
1341  data_2, \
1342  data_3, \
1343  data_4 \
1344) \
1345  _Record_Entry_5( \
1346    RTEMS_RETURN_ADDRESS(), \
1347    event, \
1348    data_0, \
1349    data_1, \
1350    data_2, \
1351    data_3, \
1352    data_4 \
1353  )
1354
1355/**
1356 * @brief Generates the specified entry event and six argument events.
1357 *
1358 * The event data of the specified entry event is the return address of the
1359 * function calling rtems_record_entry_6().
1360 *
1361 * @param event The entry event.
1362 * @param data_0 The RTEMS_RECORD_ARG_0 event data.
1363 * @param data_1 The RTEMS_RECORD_ARG_1 event data.
1364 * @param data_2 The RTEMS_RECORD_ARG_2 event data.
1365 * @param data_3 The RTEMS_RECORD_ARG_3 event data.
1366 * @param data_4 The RTEMS_RECORD_ARG_4 event data.
1367 * @param data_5 The RTEMS_RECORD_ARG_5 event data.
1368 */
1369#define rtems_record_entry_6( \
1370  event, \
1371  data_0, \
1372  data_1, \
1373  data_2, \
1374  data_3, \
1375  data_4, \
1376  data_5 \
1377) \
1378  _Record_Entry_6( \
1379    RTEMS_RETURN_ADDRESS(), \
1380    event, \
1381    data_0, \
1382    data_1, \
1383    data_2, \
1384    data_3, \
1385    data_4, \
1386    data_5 \
1387  )
1388
1389/**
1390 * @brief Generates the specified entry event and seven argument events.
1391 *
1392 * The event data of the specified entry event is the return address of the
1393 * function calling rtems_record_entry_7().
1394 *
1395 * @param event The entry event.
1396 * @param data_0 The RTEMS_RECORD_ARG_0 event data.
1397 * @param data_1 The RTEMS_RECORD_ARG_1 event data.
1398 * @param data_2 The RTEMS_RECORD_ARG_2 event data.
1399 * @param data_3 The RTEMS_RECORD_ARG_3 event data.
1400 * @param data_4 The RTEMS_RECORD_ARG_4 event data.
1401 * @param data_5 The RTEMS_RECORD_ARG_5 event data.
1402 * @param data_6 The RTEMS_RECORD_ARG_6 event data.
1403 */
1404#define rtems_record_entry_7( \
1405  event, \
1406  data_0, \
1407  data_1, \
1408  data_2, \
1409  data_3, \
1410  data_4, \
1411  data_5, \
1412  data_6 \
1413) \
1414  _Record_Entry_7( \
1415    RTEMS_RETURN_ADDRESS(), \
1416    event, \
1417    data_0, \
1418    data_1, \
1419    data_2, \
1420    data_3, \
1421    data_4, \
1422    data_5, \
1423    data_6 \
1424  )
1425
1426/**
1427 * @brief Generates the specified entry event and eight argument events.
1428 *
1429 * The event data of the specified entry event is the return address of the
1430 * function calling rtems_record_entry_8().
1431 *
1432 * @param event The entry event.
1433 * @param data_0 The RTEMS_RECORD_ARG_0 event data.
1434 * @param data_1 The RTEMS_RECORD_ARG_1 event data.
1435 * @param data_2 The RTEMS_RECORD_ARG_2 event data.
1436 * @param data_3 The RTEMS_RECORD_ARG_3 event data.
1437 * @param data_4 The RTEMS_RECORD_ARG_4 event data.
1438 * @param data_5 The RTEMS_RECORD_ARG_5 event data.
1439 * @param data_6 The RTEMS_RECORD_ARG_6 event data.
1440 * @param data_7 The RTEMS_RECORD_ARG_7 event data.
1441 */
1442#define rtems_record_entry_8( \
1443  event, \
1444  data_0, \
1445  data_1, \
1446  data_2, \
1447  data_3, \
1448  data_4, \
1449  data_5, \
1450  data_6, \
1451  data_7 \
1452) \
1453  _Record_Entry_8( \
1454    RTEMS_RETURN_ADDRESS(), \
1455    event, \
1456    data_0, \
1457    data_1, \
1458    data_2, \
1459    data_3, \
1460    data_4, \
1461    data_5, \
1462    data_6, \
1463    data_7 \
1464  )
1465
1466/**
1467 * @brief Generates the specified entry event and nine argument events.
1468 *
1469 * The event data of the specified entry event is the return address of the
1470 * function calling rtems_record_entry_9().
1471 *
1472 * @param event The entry event.
1473 * @param data_0 The RTEMS_RECORD_ARG_0 event data.
1474 * @param data_1 The RTEMS_RECORD_ARG_1 event data.
1475 * @param data_2 The RTEMS_RECORD_ARG_2 event data.
1476 * @param data_3 The RTEMS_RECORD_ARG_3 event data.
1477 * @param data_4 The RTEMS_RECORD_ARG_4 event data.
1478 * @param data_5 The RTEMS_RECORD_ARG_5 event data.
1479 * @param data_6 The RTEMS_RECORD_ARG_6 event data.
1480 * @param data_7 The RTEMS_RECORD_ARG_7 event data.
1481 * @param data_8 The RTEMS_RECORD_ARG_8 event data.
1482 */
1483#define rtems_record_entry_9( \
1484  event, \
1485  data_0, \
1486  data_1, \
1487  data_2, \
1488  data_3, \
1489  data_4, \
1490  data_5, \
1491  data_6, \
1492  data_7, \
1493  data_8 \
1494) \
1495  _Record_Entry_9( \
1496    RTEMS_RETURN_ADDRESS(), \
1497    event, \
1498    data_0, \
1499    data_1, \
1500    data_2, \
1501    data_3, \
1502    data_4, \
1503    data_5, \
1504    data_6, \
1505    data_7, \
1506    data_8 \
1507  )
1508
1509/**
1510 * @brief Generates the specified entry event and ten argument events.
1511 *
1512 * The event data of the specified entry event is the return address of the function
1513 * calling rtems_record_entry_10().
1514 *
1515 * @param event The entry event.
1516 * @param data_0 The RTEMS_RECORD_ARG_0 event data.
1517 * @param data_1 The RTEMS_RECORD_ARG_1 event data.
1518 * @param data_2 The RTEMS_RECORD_ARG_2 event data.
1519 * @param data_3 The RTEMS_RECORD_ARG_3 event data.
1520 * @param data_4 The RTEMS_RECORD_ARG_4 event data.
1521 * @param data_5 The RTEMS_RECORD_ARG_5 event data.
1522 * @param data_6 The RTEMS_RECORD_ARG_6 event data.
1523 * @param data_7 The RTEMS_RECORD_ARG_7 event data.
1524 * @param data_8 The RTEMS_RECORD_ARG_8 event data.
1525 * @param data_10 The RTEMS_RECORD_ARG_10 event data.
1526 */
1527#define rtems_record_entry_10( \
1528  event, \
1529  data_0, \
1530  data_1, \
1531  data_2, \
1532  data_3, \
1533  data_4, \
1534  data_5, \
1535  data_6, \
1536  data_7, \
1537  data_8, \
1538  data_9 \
1539) \
1540  _Record_Entry_10( \
1541    RTEMS_RETURN_ADDRESS(), \
1542    event, \
1543    data_0, \
1544    data_1, \
1545    data_2, \
1546    data_3, \
1547    data_4, \
1548    data_5, \
1549    data_6, \
1550    data_7, \
1551    data_8, \
1552    data_9 \
1553  )
1554
1555/**
1556 * @brief Generates the specified exit event.
1557 *
1558 * The event data of the specified exit event is the return address of the
1559 * function calling rtems_record_exit().
1560 *
1561 * @param event The exit event.
1562 */
1563#define rtems_record_exit( event ) \
1564  rtems_record_produce( event, (rtems_record_data) RTEMS_RETURN_ADDRESS() )
1565
1566/**
1567 * @brief Generates the specified exit event and a return event.
1568 *
1569 * The event data of the specified exit event is the return address of the
1570 * function calling rtems_record_exit_1().
1571 *
1572 * @param event The exit event.
1573 * @param data The RTEMS_RECORD_RETURN_0 event data.
1574 */
1575#define rtems_record_exit_1( event, data ) \
1576  rtems_record_produce_2( \
1577    event, \
1578    (rtems_record_data) RTEMS_RETURN_ADDRESS(), \
1579    RTEMS_RECORD_RETURN_0, \
1580    data \
1581  )
1582
1583/**
1584 * @brief Generates the specified exit event and two argument events.
1585 *
1586 * The event data of the specified exit event is the return address of the
1587 * function calling rtems_record_exit_2().
1588 *
1589 * @param event The exit event.
1590 * @param data_0 The RTEMS_RECORD_RETURN_0 event data.
1591 * @param data_1 The RTEMS_RECORD_RETURN_1 event data.
1592 */
1593#define rtems_record_exit_2( event, data_0, data_1 ) \
1594  _Record_Entry_2( RTEMS_RETURN_ADDRESS(), event, data_0, data_1 )
1595
1596/**
1597 * @brief Generates the specified exit event and three argument events.
1598 *
1599 * The event data of the specified exit event is the return address of the
1600 * function calling rtems_record_exit_3().
1601 *
1602 * @param event The exit event.
1603 * @param data_0 The RTEMS_RECORD_RETURN_0 event data.
1604 * @param data_1 The RTEMS_RECORD_RETURN_1 event data.
1605 * @param data_2 The RTEMS_RECORD_RETURN_2 event data.
1606 */
1607#define rtems_record_exit_3( event, data_0, data_1, data_2 ) \
1608  _Record_Exit_3( \
1609    RTEMS_RETURN_ADDRESS(), \
1610    event, \
1611    data_0, \
1612    data_1, \
1613    data_2 \
1614  )
1615
1616/**
1617 * @brief Generates the specified exit event and four argument events.
1618 *
1619 * The event data of the specified exit event is the return address of the
1620 * function calling rtems_record_exit_4().
1621 *
1622 * @param event The exit event.
1623 * @param data_0 The RTEMS_RECORD_RETURN_0 event data.
1624 * @param data_1 The RTEMS_RECORD_RETURN_1 event data.
1625 * @param data_2 The RTEMS_RECORD_RETURN_2 event data.
1626 * @param data_3 The RTEMS_RECORD_RETURN_3 event data.
1627 */
1628#define rtems_record_exit_4( event, data_0, data_1, data_2, data_3 ) \
1629  _Record_Exit_4( \
1630    RTEMS_RETURN_ADDRESS(), \
1631    event, \
1632    data_0, \
1633    data_1, \
1634    data_2, \
1635    data_3 \
1636  )
1637
1638/**
1639 * @brief Generates the specified exit event and five argument events.
1640 *
1641 * The event data of the specified exit event is the return address of the
1642 * function calling rtems_record_exit_5().
1643 *
1644 * @param event The exit event.
1645 * @param data_0 The RTEMS_RECORD_RETURN_0 event data.
1646 * @param data_1 The RTEMS_RECORD_RETURN_1 event data.
1647 * @param data_2 The RTEMS_RECORD_RETURN_2 event data.
1648 * @param data_3 The RTEMS_RECORD_RETURN_3 event data.
1649 * @param data_4 The RTEMS_RECORD_RETURN_4 event data.
1650 */
1651#define rtems_record_exit_5( \
1652  event, \
1653  data_0, \
1654  data_1, \
1655  data_2, \
1656  data_3, \
1657  data_4 \
1658) \
1659  _Record_Exit_5( \
1660    RTEMS_RETURN_ADDRESS(), \
1661    event, \
1662    data_0, \
1663    data_1, \
1664    data_2, \
1665    data_3, \
1666    data_4 \
1667  )
1668
1669/**
1670 * @brief Generates the specified exit event and six argument events.
1671 *
1672 * The event data of the specified exit event is the return address of the
1673 * function calling rtems_record_exit_6().
1674 *
1675 * @param event The exit event.
1676 * @param data_0 The RTEMS_RECORD_RETURN_0 event data.
1677 * @param data_1 The RTEMS_RECORD_RETURN_1 event data.
1678 * @param data_2 The RTEMS_RECORD_RETURN_2 event data.
1679 * @param data_3 The RTEMS_RECORD_RETURN_3 event data.
1680 * @param data_4 The RTEMS_RECORD_RETURN_4 event data.
1681 * @param data_5 The RTEMS_RECORD_RETURN_5 event data.
1682 */
1683#define rtems_record_exit_6( \
1684  event, \
1685  data_0, \
1686  data_1, \
1687  data_2, \
1688  data_3, \
1689  data_4, \
1690  data_5 \
1691) \
1692  _Record_Exit_6( \
1693    RTEMS_RETURN_ADDRESS(), \
1694    event, \
1695    data_0, \
1696    data_1, \
1697    data_2, \
1698    data_3, \
1699    data_4, \
1700    data_5 \
1701  )
1702
1703/**
1704 * @brief Generates the specified exit event and seven argument events.
1705 *
1706 * The event data of the specified exit event is the return address of the
1707 * function calling rtems_record_exit_7().
1708 *
1709 * @param event The exit event.
1710 * @param data_0 The RTEMS_RECORD_RETURN_0 event data.
1711 * @param data_1 The RTEMS_RECORD_RETURN_1 event data.
1712 * @param data_2 The RTEMS_RECORD_RETURN_2 event data.
1713 * @param data_3 The RTEMS_RECORD_RETURN_3 event data.
1714 * @param data_4 The RTEMS_RECORD_RETURN_4 event data.
1715 * @param data_5 The RTEMS_RECORD_RETURN_5 event data.
1716 * @param data_6 The RTEMS_RECORD_RETURN_6 event data.
1717 */
1718#define rtems_record_exit_7( \
1719  event, \
1720  data_0, \
1721  data_1, \
1722  data_2, \
1723  data_3, \
1724  data_4, \
1725  data_5, \
1726  data_6 \
1727) \
1728  _Record_Exit_7( \
1729    RTEMS_RETURN_ADDRESS(), \
1730    event, \
1731    data_0, \
1732    data_1, \
1733    data_2, \
1734    data_3, \
1735    data_4, \
1736    data_5, \
1737    data_6 \
1738  )
1739
1740/**
1741 * @brief Generates the specified exit event and eight argument events.
1742 *
1743 * The event data of the specified exit event is the return address of the
1744 * function calling rtems_record_exit_8().
1745 *
1746 * @param event The exit event.
1747 * @param data_0 The RTEMS_RECORD_RETURN_0 event data.
1748 * @param data_1 The RTEMS_RECORD_RETURN_1 event data.
1749 * @param data_2 The RTEMS_RECORD_RETURN_2 event data.
1750 * @param data_3 The RTEMS_RECORD_RETURN_3 event data.
1751 * @param data_4 The RTEMS_RECORD_RETURN_4 event data.
1752 * @param data_5 The RTEMS_RECORD_RETURN_5 event data.
1753 * @param data_6 The RTEMS_RECORD_RETURN_6 event data.
1754 * @param data_7 The RTEMS_RECORD_RETURN_7 event data.
1755 */
1756#define rtems_record_exit_8( \
1757  event, \
1758  data_0, \
1759  data_1, \
1760  data_2, \
1761  data_3, \
1762  data_4, \
1763  data_5, \
1764  data_6, \
1765  data_7 \
1766) \
1767  _Record_Exit_8( \
1768    RTEMS_RETURN_ADDRESS(), \
1769    event, \
1770    data_0, \
1771    data_1, \
1772    data_2, \
1773    data_3, \
1774    data_4, \
1775    data_5, \
1776    data_6, \
1777    data_7 \
1778  )
1779
1780/**
1781 * @brief Generates the specified exit event and nine argument events.
1782 *
1783 * The event data of the specified exit event is the return address of the
1784 * function calling rtems_record_exit_9().
1785 *
1786 * @param event The exit event.
1787 * @param data_0 The RTEMS_RECORD_RETURN_0 event data.
1788 * @param data_1 The RTEMS_RECORD_RETURN_1 event data.
1789 * @param data_2 The RTEMS_RECORD_RETURN_2 event data.
1790 * @param data_3 The RTEMS_RECORD_RETURN_3 event data.
1791 * @param data_4 The RTEMS_RECORD_RETURN_4 event data.
1792 * @param data_5 The RTEMS_RECORD_RETURN_5 event data.
1793 * @param data_6 The RTEMS_RECORD_RETURN_6 event data.
1794 * @param data_7 The RTEMS_RECORD_RETURN_7 event data.
1795 * @param data_8 The RTEMS_RECORD_RETURN_8 event data.
1796 */
1797#define rtems_record_exit_9( \
1798  event, \
1799  data_0, \
1800  data_1, \
1801  data_2, \
1802  data_3, \
1803  data_4, \
1804  data_5, \
1805  data_6, \
1806  data_7, \
1807  data_8 \
1808) \
1809  _Record_Exit_9( \
1810    RTEMS_RETURN_ADDRESS(), \
1811    event, \
1812    data_0, \
1813    data_1, \
1814    data_2, \
1815    data_3, \
1816    data_4, \
1817    data_5, \
1818    data_6, \
1819    data_7, \
1820    data_8 \
1821  )
1822
1823/**
1824 * @brief Generates the specified exit event and ten argument events.
1825 *
1826 * The event data of the specified exit event is the return address of the function
1827 * calling rtems_record_exit_10().
1828 *
1829 * @param event The exit event.
1830 * @param data_0 The RTEMS_RECORD_RETURN_0 event data.
1831 * @param data_1 The RTEMS_RECORD_RETURN_1 event data.
1832 * @param data_2 The RTEMS_RECORD_RETURN_2 event data.
1833 * @param data_3 The RTEMS_RECORD_RETURN_3 event data.
1834 * @param data_4 The RTEMS_RECORD_RETURN_4 event data.
1835 * @param data_5 The RTEMS_RECORD_RETURN_5 event data.
1836 * @param data_6 The RTEMS_RECORD_RETURN_6 event data.
1837 * @param data_7 The RTEMS_RECORD_RETURN_7 event data.
1838 * @param data_8 The RTEMS_RECORD_RETURN_8 event data.
1839 * @param data_10 The RTEMS_RECORD_RETURN_10 event data.
1840 */
1841#define rtems_record_exit_10( \
1842  event, \
1843  data_0, \
1844  data_1, \
1845  data_2, \
1846  data_3, \
1847  data_4, \
1848  data_5, \
1849  data_6, \
1850  data_7, \
1851  data_8, \
1852  data_9 \
1853) \
1854  _Record_Exit_10( \
1855    RTEMS_RETURN_ADDRESS(), \
1856    event, \
1857    data_0, \
1858    data_1, \
1859    data_2, \
1860    data_3, \
1861    data_4, \
1862    data_5, \
1863    data_6, \
1864    data_7, \
1865    data_8, \
1866    data_9 \
1867  )
1868
1869/**
1870 * @brief Disables interrupts and generates an RTEMS_RECORD_ISR_DISABLE event.
1871 *
1872 * @return The previous interrupt level.
1873 */
1874uint32_t rtems_record_interrupt_disable( void );
1875
1876/**
1877 * @brief Restores the previous interrupt level and generates an
1878 *   RTEMS_RECORD_ISR_ENABLE event.
1879 *
1880 * @param level The previous interrupt level.  Must be the return value of the
1881 *   corresponding rtems_record_interrupt_disable().
1882 */
1883void rtems_record_interrupt_enable( uint32_t level );
1884
1885typedef void ( *rtems_record_drain_visitor )(
1886  const rtems_record_item *items,
1887  size_t                   count,
1888  void                    *arg
1889);
1890
1891void _Record_Drain(
1892  Record_Control             *control,
1893  uint32_t                    cpu_index,
1894  rtems_record_drain_visitor  visitor,
1895  void                       *arg
1896);
1897
1898/**
1899 * @brief Drains the record items on all processors.
1900 *
1901 * Calls the visitor function for each drained item set.
1902 *
1903 * @param visitor The visitor function.
1904 * @param arg The argument for the visitor function.
1905 */
1906void rtems_record_drain( rtems_record_drain_visitor visitor, void *arg );
1907
1908/** @} */
1909
1910#ifdef __cplusplus
1911}
1912#endif /* __cplusplus */
1913
1914#endif /* _RTEMS_RECORD_H */
Note: See TracBrowser for help on using the repository browser.