RTEMS-6
Annotated Report
libstackchk
Mon Mar 1 00:23:54 2021
0000000040023d30 <rtems_stack_checker_begin_extension>:
#endif
cpu_self_index = _Per_CPU_Get_index( cpu_self );
stack = &Stack_check_Interrupt_stack[ cpu_self_index ];
if ( stack->area == NULL ) {
40023d30: 90000723 adrp x3, 40107000 <rtems_libio_iops+0xa8>
40023d34: 9125e064 add x4, x3, #0x978
40023d38: f9400480 ldr x0, [x4, #8]
40023d3c: b4000040 cbz x0, 40023d44 <rtems_stack_checker_begin_extension+0x14>
40023d40: d65f03c0 ret
{
40023d44: a9be7bfd stp x29, x30, [sp, #-32]!
stack->area = cpu_self->interrupt_stack_low;
40023d48: 90000720 adrp x0, 40107000 <rtems_libio_iops+0xa8>
40023d4c: 91270005 add x5, x0, #0x9c0
{
40023d50: 910003fd mov x29, sp
40023d54: a90153f3 stp x19, x20, [sp, #16]
return memcmp(
40023d58: d00000a1 adrp x1, 40039000 <__trunctfdf2+0x2a0>
40023d5c: d2800202 mov x2, #0x10 // #16
stack->area = cpu_self->interrupt_stack_low;
40023d60: f944e013 ldr x19, [x0, #2496]
return memcmp(
40023d64: 913c6021 add x1, x1, #0xf18
stack->size = (size_t) ( (char *) cpu_self->interrupt_stack_high -
40023d68: f94004b4 ldr x20, [x5, #8]
stack->area = cpu_self->interrupt_stack_low;
40023d6c: f9000493 str x19, [x4, #8]
return memcmp(
40023d70: aa1303e0 mov x0, x19
stack->size = (size_t) ( (char *) cpu_self->interrupt_stack_high -
40023d74: cb130294 sub x20, x20, x19
40023d78: f904bc74 str x20, [x3, #2424]
return memcmp(
40023d7c: 9400370b bl 400319a8 <memcmp>
(char *) cpu_self->interrupt_stack_low );
/*
* Sanity pattern has been added by Stack_check_Prepare_interrupt_stack()
*/
if ( !Stack_check_Is_sanity_pattern_valid( stack ) ) {
40023d80: 350000e0 cbnz w0, 40023d9c <rtems_stack_checker_begin_extension+0x6c><== NEVER TAKEN
memset(
40023d84: d1004282 sub x2, x20, #0x10
40023d88: 91004260 add x0, x19, #0x10
}
#if defined(RTEMS_SMP)
_Thread_Dispatch_enable( cpu_self );
#endif
}
40023d8c: a94153f3 ldp x19, x20, [sp, #16]
memset(
40023d90: 528014a1 mov w1, #0xa5 // #165
}
40023d94: a8c27bfd ldp x29, x30, [sp], #32
memset(
40023d98: 14003743 b 40031aa4 <memset>
40023d9c: d28a8a41 mov x1, #0x5452 // #21586 <== NOT EXECUTED
40023da0: f2a929c1 movk x1, #0x494e, lsl #16 <== NOT EXECUTED
40023da4: 52800100 mov w0, #0x8 // #8 <== NOT EXECUTED
40023da8: 940002ba bl 40024890 <_Terminate> <== NOT EXECUTED
40023dac: 00000000 udf #0
0000000040023db0 <rtems_stack_checker_switch_extension>:
*/
void rtems_stack_checker_switch_extension(
Thread_Control *running,
Thread_Control *heir
)
{
40023db0: a9ba7bfd stp x29, x30, [sp, #-96]!
40023db4: 910003fd mov x29, sp
40023db8: a9025bf5 stp x21, x22, [sp, #32]
if ( sp < the_stack->area ) {
40023dbc: 91052016 add x22, x0, #0x148
{
40023dc0: a90153f3 stp x19, x20, [sp, #16]
40023dc4: aa0003f3 mov x19, x0
if ( sp < the_stack->area ) {
40023dc8: f94006d4 ldr x20, [x22, #8]
{
40023dcc: f9001bf7 str x23, [sp, #48]
if ( sp < the_stack->area ) {
40023dd0: eb1d029f cmp x20, x29
40023dd4: 54000328 b.hi 40023e38 <rtems_stack_checker_switch_extension+0x88> // b.pmore<== NEVER TAKEN
return memcmp(
40023dd8: d00000b5 adrp x21, 40039000 <__trunctfdf2+0x2a0>
40023ddc: 913c62b5 add x21, x21, #0xf18
40023de0: aa1503e1 mov x1, x21
40023de4: aa1403e0 mov x0, x20
40023de8: d2800202 mov x2, #0x10 // #16
40023dec: 940036ef bl 400319a8 <memcmp>
if ( sp > (the_stack->area + the_stack->size) ) {
40023df0: f940a661 ldr x1, [x19, #328]
return memcmp(
40023df4: 2a0003f7 mov w23, w0
if ( sp > (the_stack->area + the_stack->size) ) {
40023df8: 8b010281 add x1, x20, x1
40023dfc: eb0103bf cmp x29, x1
40023e00: 54000288 b.hi 40023e50 <rtems_stack_checker_switch_extension+0xa0> // b.pmore<== NEVER TAKEN
#else
sp_ok = Stack_check_Frame_pointer_in_range( running );
pattern_ok = Stack_check_Is_sanity_pattern_valid( &running->Start.Initial_stack );
if ( !sp_ok || !pattern_ok ) {
40023e04: 35000260 cbnz w0, 40023e50 <rtems_stack_checker_switch_extension+0xa0>
}
#endif
stack = &Stack_check_Interrupt_stack[ _SMP_Get_current_processor() ];
if ( stack->area != NULL && !Stack_check_Is_sanity_pattern_valid( stack ) ) {
40023e08: 90000720 adrp x0, 40107000 <rtems_libio_iops+0xa8>
40023e0c: f944c000 ldr x0, [x0, #2432]
40023e10: b40000a0 cbz x0, 40023e24 <rtems_stack_checker_switch_extension+0x74> <== NEVER TAKEN
return memcmp(
40023e14: aa1503e1 mov x1, x21
40023e18: d2800202 mov x2, #0x10 // #16
40023e1c: 940036e3 bl 400319a8 <memcmp>
if ( stack->area != NULL && !Stack_check_Is_sanity_pattern_valid( stack ) ) {
40023e20: 35000680 cbnz w0, 40023ef0 <rtems_stack_checker_switch_extension+0x140><== NEVER TAKEN
rtems_fatal(
RTEMS_FATAL_SOURCE_STACK_CHECKER,
rtems_build_name( 'I', 'N', 'T', 'R' )
);
}
}
40023e24: a94153f3 ldp x19, x20, [sp, #16]
40023e28: a9425bf5 ldp x21, x22, [sp, #32]
40023e2c: f9401bf7 ldr x23, [sp, #48]
40023e30: a8c67bfd ldp x29, x30, [sp], #96
40023e34: d65f03c0 ret
return memcmp(
40023e38: aa1403e0 mov x0, x20 <== NOT EXECUTED
40023e3c: d00000a1 adrp x1, 40039000 <__trunctfdf2+0x2a0> <== NOT EXECUTED
40023e40: d2800202 mov x2, #0x10 // #16 <== NOT EXECUTED
40023e44: 913c6021 add x1, x1, #0xf18 <== NOT EXECUTED
40023e48: 940036d8 bl 400319a8 <memcmp> <== NOT EXECUTED
40023e4c: 2a0003f7 mov w23, w0 <== NOT EXECUTED
printk("BLOWN STACK!!!\n");
40023e50: d00000a0 adrp x0, 40039000 <__trunctfdf2+0x2a0>
40023e54: 9138c000 add x0, x0, #0xe30
40023e58: 94001036 bl 40027f30 <printk>
printk("task control block: 0x%08" PRIxPTR "\n", (intptr_t) running);
40023e5c: aa1303e1 mov x1, x19
40023e60: d00000a0 adrp x0, 40039000 <__trunctfdf2+0x2a0>
40023e64: 91390000 add x0, x0, #0xe40
40023e68: 94001032 bl 40027f30 <printk>
printk("task ID: 0x%08lx\n", (unsigned long) running->Object.id);
40023e6c: b9401261 ldr w1, [x19, #16]
40023e70: d00000a0 adrp x0, 40039000 <__trunctfdf2+0x2a0>
40023e74: 91398000 add x0, x0, #0xe60
40023e78: 9400102e bl 40027f30 <printk>
printk(
40023e7c: b9401a61 ldr w1, [x19, #24]
40023e80: d00000a0 adrp x0, 40039000 <__trunctfdf2+0x2a0>
40023e84: 9139e000 add x0, x0, #0xe78
40023e88: 9400102a bl 40027f30 <printk>
_Thread_Get_name(running, name, sizeof(name));
40023e8c: d2800402 mov x2, #0x20 // #32
40023e90: 910103a1 add x1, x29, #0x40
40023e94: aa1303e0 mov x0, x19
40023e98: 940007ee bl 40025e50 <_Thread_Get_name>
printk("task name string: %s\n", name);
40023e9c: 910103a1 add x1, x29, #0x40
40023ea0: d00000a0 adrp x0, 40039000 <__trunctfdf2+0x2a0>
40023ea4: 913a4000 add x0, x0, #0xe90
40023ea8: 94001022 bl 40027f30 <printk>
(intptr_t) stack->area,
40023eac: f94006c2 ldr x2, [x22, #8]
printk(
40023eb0: d00000a0 adrp x0, 40039000 <__trunctfdf2+0x2a0>
40023eb4: 913aa000 add x0, x0, #0xea8
(unsigned long) stack->size,
40023eb8: f940a661 ldr x1, [x19, #328]
printk(
40023ebc: 8b010043 add x3, x2, x1
40023ec0: 9400101c bl 40027f30 <printk>
if (!pattern_ok) {
40023ec4: 35000097 cbnz w23, 40023ed4 <rtems_stack_checker_switch_extension+0x124><== ALWAYS TAKEN
40023ec8: b9401a61 ldr w1, [x19, #24]
40023ecc: 52800100 mov w0, #0x8 // #8
40023ed0: 94000270 bl 40024890 <_Terminate>
printk(
40023ed4: 91004283 add x3, x20, #0x10
40023ed8: aa1403e2 mov x2, x20
40023edc: d00000a0 adrp x0, 40039000 <__trunctfdf2+0x2a0>
40023ee0: d2800201 mov x1, #0x10 // #16
40023ee4: 913b8000 add x0, x0, #0xee0
40023ee8: 94001012 bl 40027f30 <printk>
40023eec: 17fffff7 b 40023ec8 <rtems_stack_checker_switch_extension+0x118>
40023ef0: d28a8a41 mov x1, #0x5452 // #21586 <== NOT EXECUTED
40023ef4: f2a929c1 movk x1, #0x494e, lsl #16 <== NOT EXECUTED
40023ef8: 52800100 mov w0, #0x8 // #8 <== NOT EXECUTED
40023efc: 94000265 bl 40024890 <_Terminate> <== NOT EXECUTED