=============================================================================== 40003d54 : static inline uint32_t _Per_CPU_Get_index( const Per_CPU_Control *cpu ) { const Per_CPU_Control_envelope *per_cpu_envelope = ( const Per_CPU_Control_envelope * ) cpu; return ( uint32_t ) ( per_cpu_envelope - &_Per_CPU_Information[ 0 ] ); 40003d54: 07 33 33 33 sethi %hi(0xcccccc00), %g3 40003d58: 86 10 e0 cd or %g3, 0xcd, %g3 ! cccccccd 40003d5c: 03 10 00 5b sethi %hi(0x40016c00), %g1 #endif cpu_self_index = _Per_CPU_Get_index( cpu_self ); stack = &Stack_check_Interrupt_stack[ cpu_self_index ]; if ( stack->area == NULL ) { 40003d60: 05 10 00 56 sethi %hi(0x40015800), %g2 40003d64: 82 10 60 00 mov %g1, %g1 40003d68: 84 10 a3 18 or %g2, 0x318, %g2 40003d6c: 82 21 80 01 sub %g6, %g1, %g1 40003d70: 83 38 60 04 sra %g1, 4, %g1 40003d74: 82 58 40 03 smul %g1, %g3, %g1 40003d78: 83 28 60 03 sll %g1, 3, %g1 40003d7c: 86 00 80 01 add %g2, %g1, %g3 40003d80: da 00 e0 04 ld [ %g3 + 4 ], %o5 40003d84: 80 a3 60 00 cmp %o5, 0 40003d88: 22 80 00 04 be,a 40003d98 <== ALWAYS TAKEN 40003d8c: d0 01 a0 08 ld [ %g6 + 8 ], %o0 } #if defined(RTEMS_SMP) _Thread_Dispatch_enable( cpu_self ); #endif } 40003d90: 81 c3 e0 08 retl <== NOT EXECUTED 40003d94: 01 00 00 00 nop <== NOT EXECUTED stack->area = cpu_self->interrupt_stack_low; 40003d98: d0 20 e0 04 st %o0, [ %g3 + 4 ] Stack_check_Dope_stack( stack ); 40003d9c: 92 10 20 a5 mov 0xa5, %o1 stack->size = (size_t) ( (char *) cpu_self->interrupt_stack_high - 40003da0: c8 01 a0 0c ld [ %g6 + 0xc ], %g4 40003da4: 88 21 00 08 sub %g4, %o0, %g4 Stack_check_Dope_stack( stack ); 40003da8: 94 10 00 04 mov %g4, %o2 stack->size = (size_t) ( (char *) cpu_self->interrupt_stack_high - 40003dac: c8 20 80 01 st %g4, [ %g2 + %g1 ] Stack_check_Dope_stack( stack ); 40003db0: 82 13 c0 00 mov %o7, %g1 40003db4: 40 00 31 44 call 400102c4 40003db8: 9e 10 40 00 mov %g1, %o7 =============================================================================== 40003dbc : */ void rtems_stack_checker_switch_extension( Thread_Control *running RTEMS_UNUSED, Thread_Control *heir RTEMS_UNUSED ) { 40003dbc: 9d e3 bf 80 save %sp, -128, %sp <== NOT EXECUTED if ( sp < the_stack->area ) { 40003dc0: fa 06 20 d0 ld [ %i0 + 0xd0 ], %i5 <== NOT EXECUTED 40003dc4: b8 07 60 08 add %i5, 8, %i4 <== NOT EXECUTED 40003dc8: 13 10 00 4b sethi %hi(0x40012c00), %o1 <== NOT EXECUTED 40003dcc: 94 10 20 10 mov 0x10, %o2 <== NOT EXECUTED 40003dd0: 90 10 00 1c mov %i4, %o0 <== NOT EXECUTED 40003dd4: 80 a7 80 1d cmp %fp, %i5 <== NOT EXECUTED 40003dd8: 0a 80 00 0e bcs 40003e10 <== NOT EXECUTED 40003ddc: 92 12 61 44 or %o1, 0x144, %o1 <== NOT EXECUTED 40003de0: 40 00 30 d4 call 40010130 <== NOT EXECUTED 40003de4: 01 00 00 00 nop <== NOT EXECUTED if ( sp > (the_stack->area + the_stack->size) ) { 40003de8: c2 06 20 cc ld [ %i0 + 0xcc ], %g1 <== NOT EXECUTED 40003dec: 82 07 40 01 add %i5, %g1, %g1 <== NOT EXECUTED 40003df0: 80 a7 80 01 cmp %fp, %g1 <== NOT EXECUTED 40003df4: 18 80 00 0a bgu 40003e1c <== NOT EXECUTED 40003df8: b6 10 00 08 mov %o0, %i3 <== NOT EXECUTED */ sp_ok = Stack_check_Frame_pointer_in_range( running ); pattern_ok = Stack_check_Is_pattern_valid( running ); if ( !sp_ok || !pattern_ok ) { 40003dfc: 80 a2 20 00 cmp %o0, 0 <== NOT EXECUTED 40003e00: 12 80 00 08 bne 40003e20 <== NOT EXECUTED 40003e04: 11 10 00 4b sethi %hi(0x40012c00), %o0 <== NOT EXECUTED Stack_check_report_blown_task( running, pattern_ok ); } } 40003e08: 81 c7 e0 08 ret <== NOT EXECUTED 40003e0c: 81 e8 00 00 restore <== NOT EXECUTED 40003e10: 40 00 30 c8 call 40010130 <== NOT EXECUTED 40003e14: 01 00 00 00 nop <== NOT EXECUTED 40003e18: b6 10 00 08 mov %o0, %i3 <== NOT EXECUTED printk("BLOWN STACK!!!\n"); 40003e1c: 11 10 00 4b sethi %hi(0x40012c00), %o0 <== NOT EXECUTED 40003e20: 40 00 0a 40 call 40006720 <== NOT EXECUTED 40003e24: 90 12 20 68 or %o0, 0x68, %o0 ! 40012c68 <== NOT EXECUTED printk("task control block: 0x%08" PRIxPTR "\n", (intptr_t) running); 40003e28: 92 10 00 18 mov %i0, %o1 <== NOT EXECUTED 40003e2c: 11 10 00 4b sethi %hi(0x40012c00), %o0 <== NOT EXECUTED 40003e30: 40 00 0a 3c call 40006720 <== NOT EXECUTED 40003e34: 90 12 20 78 or %o0, 0x78, %o0 ! 40012c78 <== NOT EXECUTED printk("task ID: 0x%08lx\n", (unsigned long) running->Object.id); 40003e38: d2 06 20 08 ld [ %i0 + 8 ], %o1 <== NOT EXECUTED 40003e3c: 11 10 00 4b sethi %hi(0x40012c00), %o0 <== NOT EXECUTED 40003e40: 40 00 0a 38 call 40006720 <== NOT EXECUTED 40003e44: 90 12 20 98 or %o0, 0x98, %o0 ! 40012c98 <== NOT EXECUTED printk( 40003e48: d2 06 20 0c ld [ %i0 + 0xc ], %o1 <== NOT EXECUTED 40003e4c: 11 10 00 4b sethi %hi(0x40012c00), %o0 <== NOT EXECUTED 40003e50: 40 00 0a 34 call 40006720 <== NOT EXECUTED 40003e54: 90 12 20 b0 or %o0, 0xb0, %o0 ! 40012cb0 <== NOT EXECUTED _Thread_Get_name(running, name, sizeof(name)); 40003e58: 94 10 20 20 mov 0x20, %o2 <== NOT EXECUTED 40003e5c: 92 07 bf e0 add %fp, -32, %o1 <== NOT EXECUTED 40003e60: 40 00 1f 88 call 4000bc80 <_Thread_Get_name> <== NOT EXECUTED 40003e64: 90 10 00 18 mov %i0, %o0 <== NOT EXECUTED printk("task name string: %s\n", name); 40003e68: 92 07 bf e0 add %fp, -32, %o1 <== NOT EXECUTED 40003e6c: 11 10 00 4b sethi %hi(0x40012c00), %o0 <== NOT EXECUTED 40003e70: 40 00 0a 2c call 40006720 <== NOT EXECUTED 40003e74: 90 12 20 c8 or %o0, 0xc8, %o0 ! 40012cc8 <== NOT EXECUTED (unsigned long) stack->size, 40003e78: d2 06 20 cc ld [ %i0 + 0xcc ], %o1 <== NOT EXECUTED (intptr_t) stack->area, 40003e7c: d4 06 20 d0 ld [ %i0 + 0xd0 ], %o2 <== NOT EXECUTED printk( 40003e80: 96 02 80 09 add %o2, %o1, %o3 <== NOT EXECUTED 40003e84: 11 10 00 4b sethi %hi(0x40012c00), %o0 <== NOT EXECUTED 40003e88: 40 00 0a 26 call 40006720 <== NOT EXECUTED 40003e8c: 90 12 20 e0 or %o0, 0xe0, %o0 ! 40012ce0 <== NOT EXECUTED if (!pattern_ok) { 40003e90: 80 a6 e0 00 cmp %i3, 0 <== NOT EXECUTED 40003e94: 12 80 00 05 bne 40003ea8 <== NOT EXECUTED 40003e98: 96 07 60 18 add %i5, 0x18, %o3 <== NOT EXECUTED 40003e9c: d2 06 20 0c ld [ %i0 + 0xc ], %o1 <== NOT EXECUTED 40003ea0: 40 00 13 5a call 40008c08 <_Terminate> <== NOT EXECUTED 40003ea4: 90 10 20 08 mov 8, %o0 <== NOT EXECUTED printk( 40003ea8: 94 10 00 1c mov %i4, %o2 <== NOT EXECUTED 40003eac: 92 10 20 10 mov 0x10, %o1 <== NOT EXECUTED 40003eb0: 11 10 00 4b sethi %hi(0x40012c00), %o0 <== NOT EXECUTED 40003eb4: 40 00 0a 1b call 40006720 <== NOT EXECUTED 40003eb8: 90 12 21 10 or %o0, 0x110, %o0 ! 40012d10 <== NOT EXECUTED 40003ebc: 10 bf ff f9 b 40003ea0 <== NOT EXECUTED 40003ec0: d2 06 20 0c ld [ %i0 + 0xc ], %o1 <== NOT EXECUTED