Ronald G. Minnich | 9764d4c | 2012-06-12 16:29:32 -0700 | [diff] [blame] | 1 | /* |
| 2 | This software and ancillary information (herein called SOFTWARE ) |
| 3 | called LinuxBIOS is made available under the terms described |
| 4 | here. The SOFTWARE has been approved for release with associated |
| 5 | LA-CC Number 00-34 . Unless otherwise indicated, this SOFTWARE has |
| 6 | been authored by an employee or employees of the University of |
| 7 | California, operator of the Los Alamos National Laboratory under |
| 8 | Contract No. W-7405-ENG-36 with the U.S. Department of Energy. The |
| 9 | U.S. Government has rights to use, reproduce, and distribute this |
| 10 | SOFTWARE. The public may copy, distribute, prepare derivative works |
| 11 | and publicly display this SOFTWARE without charge, provided that this |
| 12 | Notice and any statement of authorship are reproduced on all copies. |
| 13 | Neither the Government nor the University makes any warranty, express |
| 14 | or implied, or assumes any liability or responsibility for the use of |
| 15 | this SOFTWARE. If SOFTWARE is modified to produce derivative works, |
| 16 | such modified SOFTWARE should be clearly marked, so as not to confuse |
| 17 | it with the version available from LANL. |
| 18 | */ |
| 19 | /* Copyright 2000, Ron Minnich, Advanced Computing Lab, LANL |
| 20 | * rminnich@lanl.gov |
| 21 | */ |
| 22 | |
| 23 | #include <lib.h> |
| 24 | #include <console/console.h> |
| 25 | |
| 26 | int checkstack(void *top_of_stack, int core) |
| 27 | { |
| 28 | int i; |
| 29 | u32 *stack = (u32 *) (top_of_stack - CONFIG_STACK_SIZE); |
| 30 | |
| 31 | if (stack[0] != 0xDEADBEEF){ |
| 32 | printk(BIOS_ERR, "Stack overrun on CPU%d." |
| 33 | "Increase stack from current %d bytes\n", |
David Hendricks | 9a00016 | 2013-02-11 19:05:36 -0800 | [diff] [blame^] | 34 | core, CONFIG_STACK_SIZE); |
Ronald G. Minnich | 9764d4c | 2012-06-12 16:29:32 -0700 | [diff] [blame] | 35 | return -1; |
| 36 | } |
| 37 | |
Stefan Reinauer | 75dbc38 | 2012-10-15 15:19:43 -0700 | [diff] [blame] | 38 | for(i = 1; i < CONFIG_STACK_SIZE/sizeof(stack[0]); i++){ |
Ronald G. Minnich | 9764d4c | 2012-06-12 16:29:32 -0700 | [diff] [blame] | 39 | if (stack[i] == 0xDEADBEEF) |
| 40 | continue; |
Stefan Reinauer | 75dbc38 | 2012-10-15 15:19:43 -0700 | [diff] [blame] | 41 | printk(BIOS_SPEW, "CPU%d: stack: %p - %p, ", |
| 42 | core, stack, |
Ronald G. Minnich | 9764d4c | 2012-06-12 16:29:32 -0700 | [diff] [blame] | 43 | &stack[CONFIG_STACK_SIZE/sizeof(stack[0])]); |
Stefan Reinauer | 75dbc38 | 2012-10-15 15:19:43 -0700 | [diff] [blame] | 44 | printk(BIOS_SPEW, "lowest used address %p, ", &stack[i]); |
| 45 | printk(BIOS_SPEW, "stack used: %ld bytes\n", |
| 46 | (unsigned long)&stack[CONFIG_STACK_SIZE / |
| 47 | sizeof(stack[0])] - (unsigned long)&stack[i]); |
| 48 | return 0; |
Ronald G. Minnich | 9764d4c | 2012-06-12 16:29:32 -0700 | [diff] [blame] | 49 | } |
| 50 | |
| 51 | return 0; |
| 52 | |
| 53 | } |