.. | .. |
---|
503 | 503 | |
---|
504 | 504 | void show_stack(struct task_struct *task, unsigned long *sp, const char *loglvl) |
---|
505 | 505 | { |
---|
506 | | - size_t len; |
---|
| 506 | + size_t len, off = 0; |
---|
507 | 507 | |
---|
508 | 508 | if (!sp) |
---|
509 | 509 | sp = stack_pointer(task); |
---|
.. | .. |
---|
512 | 512 | kstack_depth_to_print * STACK_DUMP_ENTRY_SIZE); |
---|
513 | 513 | |
---|
514 | 514 | printk("%sStack:\n", loglvl); |
---|
515 | | - print_hex_dump(loglvl, " ", DUMP_PREFIX_NONE, |
---|
516 | | - STACK_DUMP_LINE_SIZE, STACK_DUMP_ENTRY_SIZE, |
---|
517 | | - sp, len, false); |
---|
| 515 | + while (off < len) { |
---|
| 516 | + u8 line[STACK_DUMP_LINE_SIZE]; |
---|
| 517 | + size_t line_len = len - off > STACK_DUMP_LINE_SIZE ? |
---|
| 518 | + STACK_DUMP_LINE_SIZE : len - off; |
---|
| 519 | + |
---|
| 520 | + __memcpy(line, (u8 *)sp + off, line_len); |
---|
| 521 | + print_hex_dump(loglvl, " ", DUMP_PREFIX_NONE, |
---|
| 522 | + STACK_DUMP_LINE_SIZE, STACK_DUMP_ENTRY_SIZE, |
---|
| 523 | + line, line_len, false); |
---|
| 524 | + off += STACK_DUMP_LINE_SIZE; |
---|
| 525 | + } |
---|
518 | 526 | show_trace(task, sp, loglvl); |
---|
519 | 527 | } |
---|
520 | 528 | |
---|
.. | .. |
---|
545 | 553 | if (panic_on_oops) |
---|
546 | 554 | panic("Fatal exception"); |
---|
547 | 555 | |
---|
548 | | - do_exit(err); |
---|
| 556 | + make_task_dead(err); |
---|
549 | 557 | } |
---|