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

Andrew Cagney cagney@gnu.org
Sat Dec 13 19:02:00 GMT 2003


> 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




More information about the Gdb-patches mailing list