=============================================================================== 40003460 : */ void rtems_stack_checker_report_usage_with_plugin( const rtems_printer* printer ) { 40003460: 9d e3 bf a0 save %sp, -96, %sp uint32_t cpu_max; uint32_t cpu_index; rtems_printf( 40003464: 13 10 00 46 sethi %hi(0x40011800), %o1 40003468: 90 10 00 18 mov %i0, %o0 4000346c: 40 00 0a 11 call 40005cb0 40003470: 92 12 61 40 or %o1, 0x140, %o1 " STACK USAGE BY THREAD\n" "ID NAME LOW HIGH CURRENT AVAIL USED\n" ); /* iterate over all threads and dump the usage */ rtems_task_iterate( 40003474: 92 10 00 18 mov %i0, %o1 40003478: 11 10 00 0c sethi %hi(0x40003000), %o0 4000347c: 40 00 10 c4 call 4000778c 40003480: 90 12 22 74 or %o0, 0x274, %o0 ! 40003274 Stack_check_Dump_threads_usage, RTEMS_DECONST( rtems_printer *, printer ) ); cpu_max = rtems_get_processor_count(); 40003484: 40 00 0f c4 call 40007394 40003488: 01 00 00 00 nop for ( cpu_index = 0; cpu_index < cpu_max; ++cpu_index ) { 4000348c: b4 92 20 00 orcc %o0, 0, %i2 40003490: 02 80 00 10 be 400034d0 <== NEVER TAKEN 40003494: 39 10 00 53 sethi %hi(0x40014c00), %i4 Stack_check_Dump_stack_usage( 40003498: 37 10 00 46 sethi %hi(0x40011800), %i3 4000349c: b8 17 20 1c or %i4, 0x1c, %i4 for ( cpu_index = 0; cpu_index < cpu_max; ++cpu_index ) { 400034a0: ba 10 20 00 clr %i5 Stack_check_Dump_stack_usage( 400034a4: b6 16 e1 c8 or %i3, 0x1c8, %i3 400034a8: 96 10 00 1d mov %i5, %o3 400034ac: 90 10 00 1c mov %i4, %o0 400034b0: 98 10 00 18 mov %i0, %o4 400034b4: 94 10 00 1b mov %i3, %o2 400034b8: 7f ff ff 29 call 4000315c 400034bc: 92 10 20 00 clr %o1 for ( cpu_index = 0; cpu_index < cpu_max; ++cpu_index ) { 400034c0: ba 07 60 01 inc %i5 400034c4: 80 a6 80 1d cmp %i2, %i5 400034c8: 12 bf ff f8 bne 400034a8 <== NEVER TAKEN 400034cc: b8 07 20 08 add %i4, 8, %i4 &Stack_check_Interrupt_stack[ cpu_index ], cpu_index, printer ); } } 400034d0: 81 c7 e0 08 ret 400034d4: 81 e8 00 00 restore =============================================================================== 4000c030 : */ void rtems_stack_checker_switch_extension( Thread_Control *running RTEMS_UNUSED, Thread_Control *heir RTEMS_UNUSED ) { 4000c030: 9d e3 bf 80 save %sp, -128, %sp if ( sp < the_stack->area ) { 4000c034: fa 06 20 d0 ld [ %i0 + 0xd0 ], %i5 4000c038: b8 07 60 08 add %i5, 8, %i4 4000c03c: 13 10 00 4f sethi %hi(0x40013c00), %o1 4000c040: 94 10 20 10 mov 0x10, %o2 4000c044: 90 10 00 1c mov %i4, %o0 4000c048: 80 a7 80 1d cmp %fp, %i5 4000c04c: 0a 80 00 0e bcs 4000c084 <== NEVER TAKEN 4000c050: 92 12 60 6c or %o1, 0x6c, %o1 4000c054: 40 00 09 2f call 4000e510 4000c058: 01 00 00 00 nop if ( sp > (the_stack->area + the_stack->size) ) { 4000c05c: c2 06 20 cc ld [ %i0 + 0xcc ], %g1 4000c060: 82 07 40 01 add %i5, %g1, %g1 4000c064: 80 a7 80 01 cmp %fp, %g1 4000c068: 18 80 00 0a bgu 4000c090 <== NEVER TAKEN 4000c06c: b6 10 00 08 mov %o0, %i3 */ sp_ok = Stack_check_Frame_pointer_in_range( running ); pattern_ok = Stack_check_Is_pattern_valid( running ); if ( !sp_ok || !pattern_ok ) { 4000c070: 80 a2 20 00 cmp %o0, 0 4000c074: 12 80 00 08 bne 4000c094 4000c078: 11 10 00 4e sethi %hi(0x40013800), %o0 Stack_check_report_blown_task( running, pattern_ok ); } } 4000c07c: 81 c7 e0 08 ret 4000c080: 81 e8 00 00 restore 4000c084: 40 00 09 23 call 4000e510 <== NOT EXECUTED 4000c088: 01 00 00 00 nop <== NOT EXECUTED 4000c08c: b6 10 00 08 mov %o0, %i3 <== NOT EXECUTED printk("BLOWN STACK!!!\n"); 4000c090: 11 10 00 4e sethi %hi(0x40013800), %o0 <== NOT EXECUTED 4000c094: 7f ff e3 3d call 40004d88 4000c098: 90 12 23 90 or %o0, 0x390, %o0 ! 40013b90 printk("task control block: 0x%08" PRIxPTR "\n", (intptr_t) running); 4000c09c: 92 10 00 18 mov %i0, %o1 4000c0a0: 11 10 00 4e sethi %hi(0x40013800), %o0 4000c0a4: 7f ff e3 39 call 40004d88 4000c0a8: 90 12 23 a0 or %o0, 0x3a0, %o0 ! 40013ba0 printk("task ID: 0x%08lx\n", (unsigned long) running->Object.id); 4000c0ac: d2 06 20 08 ld [ %i0 + 8 ], %o1 4000c0b0: 11 10 00 4e sethi %hi(0x40013800), %o0 4000c0b4: 7f ff e3 35 call 40004d88 4000c0b8: 90 12 23 c0 or %o0, 0x3c0, %o0 ! 40013bc0 printk( 4000c0bc: d2 06 20 0c ld [ %i0 + 0xc ], %o1 4000c0c0: 11 10 00 4e sethi %hi(0x40013800), %o0 4000c0c4: 7f ff e3 31 call 40004d88 4000c0c8: 90 12 23 d8 or %o0, 0x3d8, %o0 ! 40013bd8 _Thread_Get_name(running, name, sizeof(name)); 4000c0cc: 94 10 20 20 mov 0x20, %o2 4000c0d0: 92 07 bf e0 add %fp, -32, %o1 4000c0d4: 40 00 07 c0 call 4000dfd4 <_Thread_Get_name> 4000c0d8: 90 10 00 18 mov %i0, %o0 printk("task name string: %s\n", name); 4000c0dc: 92 07 bf e0 add %fp, -32, %o1 4000c0e0: 11 10 00 4e sethi %hi(0x40013800), %o0 4000c0e4: 7f ff e3 29 call 40004d88 4000c0e8: 90 12 23 f0 or %o0, 0x3f0, %o0 ! 40013bf0 (unsigned long) stack->size, 4000c0ec: d2 06 20 cc ld [ %i0 + 0xcc ], %o1 (intptr_t) stack->area, 4000c0f0: d4 06 20 d0 ld [ %i0 + 0xd0 ], %o2 printk( 4000c0f4: 96 02 80 09 add %o2, %o1, %o3 4000c0f8: 11 10 00 4f sethi %hi(0x40013c00), %o0 4000c0fc: 7f ff e3 23 call 40004d88 4000c100: 90 12 20 08 or %o0, 8, %o0 ! 40013c08 if (!pattern_ok) { 4000c104: 80 a6 e0 00 cmp %i3, 0 4000c108: 12 80 00 05 bne 4000c11c <== ALWAYS TAKEN 4000c10c: 96 07 60 18 add %i5, 0x18, %o3 4000c110: d2 06 20 0c ld [ %i0 + 0xc ], %o1 <== NOT EXECUTED 4000c114: 7f ff ea 5d call 40006a88 <_Terminate> 4000c118: 90 10 20 08 mov 8, %o0 printk( 4000c11c: 94 10 00 1c mov %i4, %o2 4000c120: 92 10 20 10 mov 0x10, %o1 4000c124: 11 10 00 4f sethi %hi(0x40013c00), %o0 4000c128: 7f ff e3 18 call 40004d88 4000c12c: 90 12 20 38 or %o0, 0x38, %o0 ! 40013c38 4000c130: 10 bf ff f9 b 4000c114 4000c134: d2 06 20 0c ld [ %i0 + 0xc ], %o1