----- Original Message -----
Thanks Dave.
I found one more issue with a somewhat "corrupt" vmcore. In this case
it is ARM-specific in unwind_arm.c, so maybe Mika will also look at
it.
In the case I am investigating I get a readmem error while reading
the unwind tables. The way unwinding currently is implemented Crash
then stops and no further analysis is possible. When I patched Crash
to continue anyhow, every command I tried worked nicely including
bt, so there is no reason to stop at this kind of problem.
When investigating further I found that the problem occurs in
init_module_unwind_tables. It is in the call to do_list(&ld) that
the readmem error is found. I also looked in the code for do_list
and saw that it could be configured to return even if errors were
found, by setting ld.flags.
/*
* Iterate through unwind table list and store start address of each
* table in table_list.
*/
ld.flags += RETURN_ON_LIST_ERROR; /* added line */
hq_open();
cnt = do_list(&ld);
if (cnt == -1) { /* added if statement, 3 lines */
return FALSE;
}
table_list = (ulong *)GETBUF(cnt * sizeof(ulong));
cnt = retrieve_list(table_list, cnt);
hq_close();
By adding the lines indicated above I get an appropriate warning that
the unwind tables cannot be read, and then Crash works as usual.
Jan
Your patch makes perfect sense. Any error(FATAL, ...) call prior to
RUNTIME being set kills the whole session. But if it is possible for
the session to continue, then it should be allowed to.
I'll also add an unwind-specific warning message, and make the same
change to the x86_64 populate_local_tables() function, upon which it
appears that the ARM version was based.
Queued for crash-6.0.6. (Later today...)
Thanks,
Dave