From: Jeremy Carroll (jjc_at_hplb.hpl.hp.com)
Date: Fri Mar 17 2000 - 09:32:31 GMT
"Terry R. Friedrichsen" wrote: > I had pointed out that running the infinite-recursion program > under either FreeBSD or Linux (not under UPS) created a core > file which gdb(1) had no trouble interpreting. It did, in > fact, report meaningfully about the call stack. This sounds to me to be either quite a lot of work, or to be dependent on otherwise unnecesary data in the stack. Each stack frame is of variable width and the stack pointer points to the current frame. Each frame includes the value of the previous stack pointer (but not the next). Thus to get from the current frame back up the stack, [upStack] it is just a question of following the pointers. To go the other way [downStack] you have to search down looking for a pointer that might be pointing up to you, and hope it's the right one. (There should be a lot of supporting evidence, but its an [unsound] abductive argument from effect to cause rather than deductive). In the infinite recursion case the current frame is corrupt and hence useless. With some OSs there may be superfluous information in the stack frame that lets us go the other way. Otherwise: There are two possibilities. Either we start at the beginning of the stack and search down it to find all the back-pointers, by repeatedly doing the downStack procedure. Alternatively, we can start at the end of the stack, use some heuristics not dissimilar to the downStack ones, to find a frame very close to the bug. We can then use the upStack procedure from there. [One approach would be: + have a safeAllTheWayUpStack procedure that was very careful (about null pointers and other bad values) and returned a success or failure code to indicate that it managed to decode stack frames. This takes a stackPointer as an initial argument. + Try safeAllTheWayUpStack repeatedly with different values of stackPointer near the end of the stack until it works. ] I guess somebody ought to look at the GDB code. I am not volunteering. Jeremy Carroll --- Private message, not an official communication from HP.
This archive was generated by hypermail 2.1.4 : Wed Feb 13 2002 - 21:51:33 GMT