| .. | .. |
|---|
| 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 | } |
|---|