File indexing completed on 2025-05-11 08:24:21
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 #ifdef HAVE_CONFIG_H
0029 #include "config.h"
0030 #endif
0031
0032 #include <rtems/recorddump.h>
0033
0034 #include <rtems/bspIo.h>
0035 #include <rtems/score/isrlock.h>
0036 #include <rtems/score/smpimpl.h>
0037 #include <rtems/score/timecounter.h>
0038
0039 #if ISR_LOCK_NEEDS_OBJECT
0040 static ISR_lock_Control _Record_Dump_base64_zlib_lock =
0041 ISR_LOCK_INITIALIZER( "Record Dump base64 zlib" );
0042 #endif
0043
0044 static bool _Record_Dump_base64_zlib_done;
0045
0046 static rtems_record_dump_base64_zlib_context _Record_Dump_base64_zlib_context;
0047
0048 void _Record_Fatal_dump_base64_zlib(
0049 Internal_errors_Source source,
0050 bool always_set_to_false,
0051 Internal_errors_t code
0052 )
0053 {
0054 ISR_lock_Context lock_context;
0055 Per_CPU_Control *cpu_self;
0056 rtems_record_context record_context;
0057 sbintime_t now;
0058
0059 cpu_self = _Per_CPU_Get();
0060
0061 now = _Timecounter_Sbinuptime();
0062 rtems_record_prepare_critical( &record_context, cpu_self );
0063 rtems_record_add(
0064 &record_context,
0065 RTEMS_RECORD_UPTIME_LOW,
0066 (uint32_t) ( now >> 0 )
0067 );
0068 rtems_record_add(
0069 &record_context,
0070 RTEMS_RECORD_UPTIME_HIGH,
0071 (uint32_t) ( now >> 32 )
0072 );
0073 rtems_record_commit_critical( &record_context );
0074
0075 rtems_record_prepare_critical( &record_context, cpu_self );
0076 rtems_record_add(
0077 &record_context,
0078 RTEMS_RECORD_FATAL_SOURCE,
0079 source
0080 );
0081 rtems_record_add(
0082 &record_context,
0083 RTEMS_RECORD_FATAL_CODE,
0084 code
0085 );
0086 rtems_record_commit_critical( &record_context );
0087
0088 #if defined(RTEMS_SMP)
0089 if (
0090 source == RTEMS_FATAL_SOURCE_SMP &&
0091 code == SMP_FATAL_SHUTDOWN_RESPONSE
0092 ) {
0093 return;
0094 }
0095
0096
0097 _SMP_Request_shutdown();
0098 #endif
0099
0100 _ISR_lock_Acquire( &_Record_Dump_base64_zlib_lock, &lock_context );
0101
0102 if ( !_Record_Dump_base64_zlib_done ) {
0103 _Record_Dump_base64_zlib_done = true;
0104
0105 printk( "\n*** BEGIN OF RECORDS BASE64 ZLIB ***\n" );
0106 rtems_record_dump_zlib_base64(
0107 &_Record_Dump_base64_zlib_context,
0108 rtems_put_char,
0109 NULL
0110 );
0111 printk( "\n*** END OF RECORDS BASE64 ZLIB ***\n" );
0112 }
0113
0114 _ISR_lock_Release( &_Record_Dump_base64_zlib_lock, &lock_context );
0115 }