gdb: introduce explicit outer frame id kind
authorSimon Marchi <simon.marchi@efficios.com>
Mon, 31 Aug 2020 17:23:12 +0000 (13:23 -0400)
committerSimon Marchi <simon.marchi@efficios.com>
Mon, 31 Aug 2020 17:23:12 +0000 (13:23 -0400)
commit84154d166a1a4592c70e2a8296d5df0ad7f89be9
tree345797bd9e9d6319c482b8f082a4ab26c08d46c6
parent8efaf6b352ef4f88d26e130726e1099442956134
gdb: introduce explicit outer frame id kind

In the following patch, we'll need to easily differentiate the frame_id
of the outer frame (or the frame id of a frame inlined into the outer
frame) from a simply invalid frame id.

Currently, the frame id of the outer frame has `stack_status` set to
FID_STACK_INVALID plus special_addr_p set.  A frame inlined into the
outer frame would also have `artificial_depth` set to greater than one.
That makes the job of differntiating the frame id of the outer frame (or a
frame inlined into the outer frame) cumbersome.

To make it easier, give the outer frame id its own frame_id_stack_status
enum value.  outer_frame_id then becomes very similar to
sentinel_frame_id, another "special" frame id value.

In frame_id_p, we don't need a special case for the outer frame id, as
it's no long a special case of FID_STACK_INVALID.  Same goes for
frame_id_eq.

So in the end, FID_STACK_OUTER isn't even used (except in
fprint_frame_id).  But that's expected: all the times we wanted to
identify an outer frame was to differentiate it from an otherwise
invalid frame.  Since their frame_id_stack_status value is different
now, that is done naturally.

gdb/ChangeLog:

* frame.h (enum frame_id_stack_status) <FID_STACK_OUTER>: New.
* frame.c (fprint_frame_id): Handle FID_STACK_OUTER.
(outer_frame_id): Use FID_STACK_OUTER instead of
FID_STACK_INVALID.
(frame_id_p): Don't check for outer_frame_id.

Change-Id: I654e7f936349debc4f04f7f684b15e71a0c37619
gdb/ChangeLog
gdb/frame.c
gdb/frame.h