Re: [PATCH] Remove zero PC check from blockframe.c:inside_main_func()

Andrew Cagney
2003-12-13T19:02:19Z

> It really makes no sense to check for a zero PC here. This function
> is only colled from frame.c:get_prev_frame(), and there we already
> deal with PC being zero.
>
> The whole concept of using a zero PC as a marker for the end of the
> frame chain is somewhat flawed. It prevents us from providing a
> meaningful backtrace when the program has called a null function
> pointer; see backtrace/1476. At the very least we will have to treat
> a zero PC in the innermost differently. Classifying the a zero PC as
> being inside the "main" function doesn't help. Therefore this patch
> removes the first obstackle in fixing that PR.
>
> Objections. Otherwise I'll commit this within a few days.

FYI, this was made active with:

* blockframe.c: Include "gdbcmd.h" and "command.h".
(backtrace_below_main): New variable.
(file_frame_chain_valid, func_frame_chain_valid)
(nonnull_frame_chain_valid, generic_file_frame_chain_valid)
(generic_func_frame_chain_valid): Remove functions.
(frame_chain_valid, do_flush_frames_sfunc): New functions.
(_initialize_blockframe): New function.
* Makefile.in (blockframe.o): Update dependencies.
* frame.c (frame_saved_regs_id_unwind, get_prev_frame): Remove
FIXME
comment. Call frame_chain_valid ().
* frame.h: Remove old prototypes. Add prototype for
frame_chain_valid and update comments to match.
* gdbarch.sh: Change FRAME_CHAIN_VALID into a predicated function.
Remove old comment.
* gdbarch.h: Regenerated.
* gdbarch.c: Regenerated.

rather than the new frame code.

I looked at the new frame code and apart from the wild-card logic, there
weren't any obvious PC==0 tests.

Andrew