diff -Npur crash-4.0-2.11.org/defs.h crash-4.0-2.11/defs.h --- crash-4.0-2.11.org/defs.h 2005-11-10 16:14:01.000000000 -0500 +++ crash-4.0-2.11/defs.h 2005-11-14 11:32:18.000000000 -0500 @@ -2793,6 +2793,7 @@ int is_elf_file(char *); int is_system_map(char *); int select_namelist(char *); int get_array_length(char *, int *, long); +int get_array_entry_length(char *); int builtin_array_length(char *, int, int *); char *get_line_number(ulong, char *, int); char *get_build_directory(char *); diff -Npur crash-4.0-2.11.org/ia64.c crash-4.0-2.11/ia64.c --- crash-4.0-2.11.org/ia64.c 2005-11-10 16:14:01.000000000 -0500 +++ crash-4.0-2.11/ia64.c 2005-11-14 11:33:19.000000000 -0500 @@ -2675,9 +2676,10 @@ ia64_post_init(void) } } - if (symbol_exists("ia64_init_stack") && !ms->ia64_init_stack_size) + if (symbol_exists("ia64_init_stack") && !ms->ia64_init_stack_size) { ms->ia64_init_stack_size = get_array_length("ia64_init_stack", - NULL, 0); + NULL, 0) * get_array_entry_length("ia64_init_stack"); + } if (DUMPFILE() && ia64_in_init_stack(SWITCH_STACK_ADDR(CURRENT_TASK()))) machdep->flags |= INIT; diff -Npur crash-4.0-2.11.org/symbols.c crash-4.0-2.11/symbols.c --- crash-4.0-2.11.org/symbols.c 2005-11-10 16:14:01.000000000 -0500 +++ crash-4.0-2.11/symbols.c 2005-11-14 11:31:21.000000000 -0500 @@ -5417,6 +5417,29 @@ store_builtin: } /* + * Get the size of a "known" array entry. + */ +int +get_array_entry_length(char *s) +{ + char copy[BUFSIZE]; + int retval; + struct gnu_request gnu_request, *req; + + strcpy(copy, s); + + if (symbol_search(s)) { + req = &gnu_request; + if ((get_symbol_type(copy, NULL, req) == + TYPE_CODE_ARRAY) && req->target_typecode && + req->target_length) { + return req->target_length; + } + } + return 1; +} + +/* * Designed for use by non-debug kernels, but used by all. */ int