Remove frame_id_eq

This replaces frame_id_eq with operator== and operator!=.  I wrote
this for a version of this series that I later abandoned; but since it
simplifies the code, I left this patch in.

Approved-by: Tom Tomey <tom@tromey.com>
This commit is contained in:
Tom Tromey 2022-07-25 14:06:33 -03:00 committed by Bruno Larsen
parent f91822c2b9
commit a0cbd6505e
17 changed files with 65 additions and 79 deletions

View file

@ -5325,7 +5325,7 @@ bpstat_check_breakpoint_conditions (bpstat *bs, thread_info *thread)
breakpoint or a single step breakpoint. */ breakpoint or a single step breakpoint. */
if (frame_id_p (b->frame_id) if (frame_id_p (b->frame_id)
&& !frame_id_eq (b->frame_id, get_stack_frame_id (get_current_frame ()))) && b->frame_id != get_stack_frame_id (get_current_frame ()))
{ {
infrun_debug_printf ("incorrect frame %s not %s, not stopping", infrun_debug_printf ("incorrect frame %s not %s, not stopping",
get_stack_frame_id (get_current_frame ()).to_string ().c_str (), get_stack_frame_id (get_current_frame ()).to_string ().c_str (),

View file

@ -47,7 +47,7 @@ static int
dummy_frame_id_eq (struct dummy_frame_id *id1, dummy_frame_id_eq (struct dummy_frame_id *id1,
struct dummy_frame_id *id2) struct dummy_frame_id *id2)
{ {
return frame_id_eq (id1->id, id2->id) && id1->thread == id2->thread; return id1->id == id2->id && id1->thread == id2->thread;
} }
/* List of dummy_frame destructors. */ /* List of dummy_frame destructors. */
@ -130,7 +130,7 @@ static bool
pop_dummy_frame_bpt (struct breakpoint *b, struct dummy_frame *dummy) pop_dummy_frame_bpt (struct breakpoint *b, struct dummy_frame *dummy)
{ {
if (b->thread == dummy->id.thread->global_num if (b->thread == dummy->id.thread->global_num
&& b->disposition == disp_del && frame_id_eq (b->frame_id, dummy->id.id)) && b->disposition == disp_del && b->frame_id == dummy->id.id)
{ {
while (b->related_breakpoint != b) while (b->related_breakpoint != b)
delete_breakpoint (b->related_breakpoint); delete_breakpoint (b->related_breakpoint);

View file

@ -946,7 +946,7 @@ elf_gnu_ifunc_resolver_stop (code_breakpoint *b)
if (b_return->thread == thread_id if (b_return->thread == thread_id
&& b_return->loc->requested_address == prev_pc && b_return->loc->requested_address == prev_pc
&& frame_id_eq (b_return->frame_id, prev_frame_id)) && b_return->frame_id == prev_frame_id)
break; break;
} }

View file

@ -229,7 +229,7 @@ default_frame_unwind_stop_reason (struct frame_info *this_frame,
{ {
struct frame_id this_id = get_frame_id (this_frame); struct frame_id this_id = get_frame_id (this_frame);
if (frame_id_eq (this_id, outer_frame_id)) if (this_id == outer_frame_id)
return UNWIND_OUTERMOST; return UNWIND_OUTERMOST;
else else
return UNWIND_NO_REASON; return UNWIND_NO_REASON;

View file

@ -244,7 +244,7 @@ frame_addr_hash (const void *ap)
} }
/* Internal equality function for the hash table. This function /* Internal equality function for the hash table. This function
defers equality operations to frame_id_eq. */ defers equality operations to frame_id::operator==. */
static int static int
frame_addr_hash_eq (const void *a, const void *b) frame_addr_hash_eq (const void *a, const void *b)
@ -252,8 +252,7 @@ frame_addr_hash_eq (const void *a, const void *b)
const struct frame_info *f_entry = (const struct frame_info *) a; const struct frame_info *f_entry = (const struct frame_info *) a;
const struct frame_info *f_element = (const struct frame_info *) b; const struct frame_info *f_element = (const struct frame_info *) b;
return frame_id_eq (f_entry->this_id.value, return f_entry->this_id.value == f_element->this_id.value;
f_element->this_id.value);
} }
/* Internal function to create the frame_stash hash table. 100 seems /* Internal function to create the frame_stash hash table. 100 seems
@ -752,28 +751,28 @@ frame_id_artificial_p (frame_id l)
} }
bool bool
frame_id_eq (frame_id l, frame_id r) frame_id::operator== (const frame_id &r) const
{ {
bool eq; bool eq;
if (l.stack_status == FID_STACK_INVALID if (stack_status == FID_STACK_INVALID
|| r.stack_status == FID_STACK_INVALID) || r.stack_status == FID_STACK_INVALID)
/* Like a NaN, if either ID is invalid, the result is false. /* Like a NaN, if either ID is invalid, the result is false.
Note that a frame ID is invalid iff it is the null frame ID. */ Note that a frame ID is invalid iff it is the null frame ID. */
eq = false; eq = false;
else if (l.stack_status != r.stack_status || l.stack_addr != r.stack_addr) else if (stack_status != r.stack_status || stack_addr != r.stack_addr)
/* If .stack addresses are different, the frames are different. */ /* If .stack addresses are different, the frames are different. */
eq = false; eq = false;
else if (l.code_addr_p && r.code_addr_p && l.code_addr != r.code_addr) else if (code_addr_p && r.code_addr_p && code_addr != r.code_addr)
/* An invalid code addr is a wild card. If .code addresses are /* An invalid code addr is a wild card. If .code addresses are
different, the frames are different. */ different, the frames are different. */
eq = false; eq = false;
else if (l.special_addr_p && r.special_addr_p else if (special_addr_p && r.special_addr_p
&& l.special_addr != r.special_addr) && special_addr != r.special_addr)
/* An invalid special addr is a wild card (or unused). Otherwise /* An invalid special addr is a wild card (or unused). Otherwise
if special addresses are different, the frames are different. */ if special addresses are different, the frames are different. */
eq = false; eq = false;
else if (l.artificial_depth != r.artificial_depth) else if (artificial_depth != r.artificial_depth)
/* If artificial depths are different, the frames must be different. */ /* If artificial depths are different, the frames must be different. */
eq = false; eq = false;
else else
@ -781,7 +780,7 @@ frame_id_eq (frame_id l, frame_id r)
eq = true; eq = true;
frame_debug_printf ("l=%s, r=%s -> %d", frame_debug_printf ("l=%s, r=%s -> %d",
l.to_string ().c_str (), r.to_string ().c_str (), eq); to_string ().c_str (), r.to_string ().c_str (), eq);
return eq; return eq;
} }
@ -875,7 +874,7 @@ frame_find_by_id (struct frame_id id)
return NULL; return NULL;
/* Check for the sentinel frame. */ /* Check for the sentinel frame. */
if (frame_id_eq (id, sentinel_frame_id)) if (id == sentinel_frame_id)
return sentinel_frame; return sentinel_frame;
/* Try using the frame stash first. Finding it there removes the need /* Try using the frame stash first. Finding it there removes the need
@ -894,7 +893,7 @@ frame_find_by_id (struct frame_id id)
{ {
struct frame_id self = get_frame_id (frame); struct frame_id self = get_frame_id (frame);
if (frame_id_eq (id, self)) if (id == self)
/* An exact match. */ /* An exact match. */
return frame; return frame;
@ -1738,7 +1737,7 @@ lookup_selected_frame (struct frame_id a_frame_id, int frame_level)
it's highly unlikely the search by level finds the wrong it's highly unlikely the search by level finds the wrong
frame, it's 99.9(9)% of the time (for all practical purposes) frame, it's 99.9(9)% of the time (for all practical purposes)
safe. */ safe. */
&& frame_id_eq (get_frame_id (frame), a_frame_id)) && get_frame_id (frame) == a_frame_id)
{ {
/* Cool, all is fine. */ /* Cool, all is fine. */
select_frame (frame); select_frame (frame);

View file

@ -173,6 +173,16 @@ struct frame_id
/* Return a string representation of this frame id. */ /* Return a string representation of this frame id. */
std::string to_string () const; std::string to_string () const;
/* Returns true when this frame_id and R identify the same
frame. */
bool operator== (const frame_id &r) const;
/* Inverse of ==. */
bool operator!= (const frame_id &r) const
{
return !(*this == r);
}
}; };
/* Save and restore the currently selected frame. */ /* Save and restore the currently selected frame. */
@ -269,9 +279,6 @@ extern bool frame_id_p (frame_id l);
TAILCALL_FRAME. */ TAILCALL_FRAME. */
extern bool frame_id_artificial_p (frame_id l); extern bool frame_id_artificial_p (frame_id l);
/* Returns true when L and R identify the same frame. */
extern bool frame_id_eq (frame_id l, frame_id r);
/* Frame types. Some are real, some are signal trampolines, and some /* Frame types. Some are real, some are signal trampolines, and some
are completely artificial (dummy). */ are completely artificial (dummy). */
@ -498,22 +505,7 @@ extern CORE_ADDR get_frame_base (struct frame_info *);
/* Return the per-frame unique identifer. Can be used to relocate a /* Return the per-frame unique identifer. Can be used to relocate a
frame after a frame cache flush (and other similar operations). If frame after a frame cache flush (and other similar operations). If
FI is NULL, return the null_frame_id. FI is NULL, return the null_frame_id. */
NOTE: kettenis/20040508: These functions return a structure. On
platforms where structures are returned in static storage (vax,
m68k), this may trigger compiler bugs in code like:
if (frame_id_eq (get_frame_id (l), get_frame_id (r)))
where the return value from the first get_frame_id (l) gets
overwritten by the second get_frame_id (r). Please avoid writing
code like this. Use code like:
struct frame_id id = get_frame_id (l);
if (frame_id_eq (id, get_frame_id (r)))
instead, since that avoids the bug. */
extern struct frame_id get_frame_id (struct frame_info *fi); extern struct frame_id get_frame_id (struct frame_info *fi);
extern struct frame_id get_stack_frame_id (struct frame_info *fi); extern struct frame_id get_stack_frame_id (struct frame_info *fi);
extern struct frame_id frame_unwind_caller_id (struct frame_info *next_frame); extern struct frame_id frame_unwind_caller_id (struct frame_info *next_frame);

View file

@ -134,7 +134,7 @@ frscm_eq_frame_smob (const void *ap, const void *bp)
const frame_smob *a = (const frame_smob *) ap; const frame_smob *a = (const frame_smob *) ap;
const frame_smob *b = (const frame_smob *) bp; const frame_smob *b = (const frame_smob *) bp;
return (frame_id_eq (a->frame_id, b->frame_id) return (a->frame_id == b->frame_id
&& a->inferior == b->inferior && a->inferior == b->inferior
&& a->inferior != NULL); && a->inferior != NULL);
} }

View file

@ -2901,7 +2901,7 @@ ia64_libunwind_frame_this_id (struct frame_info *this_frame, void **this_cache,
CORE_ADDR bsp; CORE_ADDR bsp;
libunwind_frame_this_id (this_frame, this_cache, &id); libunwind_frame_this_id (this_frame, this_cache, &id);
if (frame_id_eq (id, outer_frame_id)) if (id == outer_frame_id)
{ {
(*this_id) = outer_frame_id; (*this_id) = outer_frame_id;
return; return;
@ -3032,7 +3032,7 @@ ia64_libunwind_sigtramp_frame_this_id (struct frame_info *this_frame,
struct frame_id id = outer_frame_id; struct frame_id id = outer_frame_id;
libunwind_frame_this_id (this_frame, this_cache, &id); libunwind_frame_this_id (this_frame, this_cache, &id);
if (frame_id_eq (id, outer_frame_id)) if (id == outer_frame_id)
{ {
(*this_id) = outer_frame_id; (*this_id) = outer_frame_id;
return; return;

View file

@ -4565,7 +4565,7 @@ stepped_in_from (struct frame_info *frame, struct frame_id step_frame_id)
frame != NULL; frame != NULL;
frame = get_prev_frame (frame)) frame = get_prev_frame (frame))
{ {
if (frame_id_eq (get_frame_id (frame), step_frame_id)) if (get_frame_id (frame) == step_frame_id)
return true; return true;
if (get_frame_type (frame) != INLINE_FRAME) if (get_frame_type (frame) != INLINE_FRAME)
@ -4595,7 +4595,7 @@ inline_frame_is_marked_for_skip (bool prev_frame, struct thread_info *tp)
symtab_and_line sal; symtab_and_line sal;
struct symbol *sym; struct symbol *sym;
if (frame_id_eq (get_frame_id (frame), tp->control.step_frame_id)) if (get_frame_id (frame) == tp->control.step_frame_id)
break; break;
if (get_frame_type (frame) != INLINE_FRAME) if (get_frame_type (frame) != INLINE_FRAME)
break; break;
@ -6576,8 +6576,8 @@ handle_signal_stop (struct execution_control_state *ecs)
&& (pc_in_thread_step_range (ecs->event_thread->stop_pc (), && (pc_in_thread_step_range (ecs->event_thread->stop_pc (),
ecs->event_thread) ecs->event_thread)
|| ecs->event_thread->control.step_range_end == 1) || ecs->event_thread->control.step_range_end == 1)
&& frame_id_eq (get_stack_frame_id (frame), && (get_stack_frame_id (frame)
ecs->event_thread->control.step_stack_frame_id) == ecs->event_thread->control.step_stack_frame_id)
&& ecs->event_thread->control.step_resume_breakpoint == NULL) && ecs->event_thread->control.step_resume_breakpoint == NULL)
{ {
/* The inferior is about to take a signal that will take it /* The inferior is about to take a signal that will take it
@ -6744,8 +6744,7 @@ process_event_stop_test (struct execution_control_state *ecs)
{ {
struct frame_id current_id struct frame_id current_id
= get_frame_id (get_current_frame ()); = get_frame_id (get_current_frame ());
if (frame_id_eq (current_id, if (current_id == ecs->event_thread->initiating_frame)
ecs->event_thread->initiating_frame))
{ {
/* Case 2. Fall through. */ /* Case 2. Fall through. */
} }
@ -6918,8 +6917,7 @@ process_event_stop_test (struct execution_control_state *ecs)
if (pc_in_thread_step_range (ecs->event_thread->stop_pc (), if (pc_in_thread_step_range (ecs->event_thread->stop_pc (),
ecs->event_thread) ecs->event_thread)
&& (execution_direction != EXEC_REVERSE && (execution_direction != EXEC_REVERSE
|| frame_id_eq (get_frame_id (frame), || get_frame_id (frame) == ecs->event_thread->control.step_frame_id))
ecs->event_thread->control.step_frame_id)))
{ {
infrun_debug_printf infrun_debug_printf
("stepping inside range [%s-%s]", ("stepping inside range [%s-%s]",
@ -7053,7 +7051,7 @@ process_event_stop_test (struct execution_control_state *ecs)
previous frame's ID is sufficient - but it is a common case and previous frame's ID is sufficient - but it is a common case and
cheaper than checking the previous frame's ID. cheaper than checking the previous frame's ID.
NOTE: frame_id_eq will never report two invalid frame IDs as NOTE: frame_id::operator== will never report two invalid frame IDs as
being equal, so to get into this block, both the current and being equal, so to get into this block, both the current and
previous frame must have valid frame IDs. */ previous frame must have valid frame IDs. */
/* The outer_frame_id check is a heuristic to detect stepping /* The outer_frame_id check is a heuristic to detect stepping
@ -7063,14 +7061,14 @@ process_event_stop_test (struct execution_control_state *ecs)
"outermost" function. This could be fixed by marking "outermost" function. This could be fixed by marking
outermost frames as !stack_p,code_p,special_p. Then the outermost frames as !stack_p,code_p,special_p. Then the
initial outermost frame, before sp was valid, would initial outermost frame, before sp was valid, would
have code_addr == &_start. See the comment in frame_id_eq have code_addr == &_start. See the comment in frame_id::operator==
for more. */ for more. */
if (!frame_id_eq (get_stack_frame_id (frame), if ((get_stack_frame_id (frame)
ecs->event_thread->control.step_stack_frame_id) != ecs->event_thread->control.step_stack_frame_id)
&& (frame_id_eq (frame_unwind_caller_id (get_current_frame ()), && ((frame_unwind_caller_id (get_current_frame ())
ecs->event_thread->control.step_stack_frame_id) == ecs->event_thread->control.step_stack_frame_id)
&& (!frame_id_eq (ecs->event_thread->control.step_stack_frame_id, && ((ecs->event_thread->control.step_stack_frame_id
outer_frame_id) != outer_frame_id)
|| (ecs->event_thread->control.step_start_function || (ecs->event_thread->control.step_start_function
!= find_pc_function (ecs->event_thread->stop_pc ()))))) != find_pc_function (ecs->event_thread->stop_pc ())))))
{ {
@ -7327,8 +7325,8 @@ process_event_stop_test (struct execution_control_state *ecs)
frame machinery detected some skipped call sites, we have entered frame machinery detected some skipped call sites, we have entered
a new inline function. */ a new inline function. */
if (frame_id_eq (get_frame_id (get_current_frame ()), if ((get_frame_id (get_current_frame ())
ecs->event_thread->control.step_frame_id) == ecs->event_thread->control.step_frame_id)
&& inline_skipped_frames (ecs->event_thread)) && inline_skipped_frames (ecs->event_thread))
{ {
infrun_debug_printf ("stepped into inlined function"); infrun_debug_printf ("stepped into inlined function");
@ -7376,8 +7374,8 @@ process_event_stop_test (struct execution_control_state *ecs)
through a more inlined call beyond its call site. */ through a more inlined call beyond its call site. */
if (get_frame_type (get_current_frame ()) == INLINE_FRAME if (get_frame_type (get_current_frame ()) == INLINE_FRAME
&& !frame_id_eq (get_frame_id (get_current_frame ()), && (get_frame_id (get_current_frame ())
ecs->event_thread->control.step_frame_id) != ecs->event_thread->control.step_frame_id)
&& stepped_in_from (get_current_frame (), && stepped_in_from (get_current_frame (),
ecs->event_thread->control.step_frame_id)) ecs->event_thread->control.step_frame_id))
{ {
@ -7409,8 +7407,8 @@ process_event_stop_test (struct execution_control_state *ecs)
end_stepping_range (ecs); end_stepping_range (ecs);
return; return;
} }
else if (frame_id_eq (get_frame_id (get_current_frame ()), else if (get_frame_id (get_current_frame ())
ecs->event_thread->control.step_frame_id)) == ecs->event_thread->control.step_frame_id)
{ {
/* We are not at the start of a statement, and we have not changed /* We are not at the start of a statement, and we have not changed
frame. frame.
@ -8467,8 +8465,8 @@ print_stop_location (const target_waitstatus &ws)
should) carry around the function and does (or should) use should) carry around the function and does (or should) use
that when doing a frame comparison. */ that when doing a frame comparison. */
if (tp->control.stop_step if (tp->control.stop_step
&& frame_id_eq (tp->control.step_frame_id, && (tp->control.step_frame_id
get_frame_id (get_current_frame ())) == get_frame_id (get_current_frame ()))
&& (tp->control.step_start_function && (tp->control.step_start_function
== find_pc_function (tp->stop_pc ()))) == find_pc_function (tp->stop_pc ())))
{ {

View file

@ -729,7 +729,7 @@ parse_frame_specification (const char *frame_exp)
fid != NULL; fid != NULL;
fid = get_prev_frame (fid)) fid = get_prev_frame (fid))
{ {
if (frame_id_eq (id, get_frame_id (fid))) if (id == get_frame_id (fid))
{ {
struct frame_info *prev_frame; struct frame_info *prev_frame;
@ -737,7 +737,7 @@ parse_frame_specification (const char *frame_exp)
{ {
prev_frame = get_prev_frame (fid); prev_frame = get_prev_frame (fid);
if (!prev_frame if (!prev_frame
|| !frame_id_eq (id, get_frame_id (prev_frame))) || id != get_frame_id (prev_frame))
break; break;
fid = prev_frame; fid = prev_frame;
} }

View file

@ -1997,7 +1997,7 @@ struct user_selected_context
reports not-equal, we only do the equality test if we have something reports not-equal, we only do the equality test if we have something
other than the innermost frame selected. */ other than the innermost frame selected. */
if (current_frame_level != -1 if (current_frame_level != -1
&& !frame_id_eq (current_frame_id, m_previous_frame_id)) && current_frame_id != m_previous_frame_id)
return true; return true;
/* Nothing changed! */ /* Nothing changed! */

View file

@ -207,7 +207,7 @@ bpfinishpy_init (PyObject *self, PyObject *args, PyObject *kwargs)
else else
{ {
frame_id = get_frame_id (prev_frame); frame_id = get_frame_id (prev_frame);
if (frame_id_eq (frame_id, null_frame_id)) if (frame_id == null_frame_id)
PyErr_SetString (PyExc_ValueError, PyErr_SetString (PyExc_ValueError,
_("Invalid ID for the `frame' object.")); _("Invalid ID for the `frame' object."));
} }

View file

@ -701,7 +701,7 @@ frapy_richcompare (PyObject *self, PyObject *other, int op)
frame_object *other_frame = (frame_object *) other; frame_object *other_frame = (frame_object *) other;
if (self_frame->frame_id_is_next == other_frame->frame_id_is_next if (self_frame->frame_id_is_next == other_frame->frame_id_is_next
&& frame_id_eq (self_frame->frame_id, other_frame->frame_id)) && self_frame->frame_id == other_frame->frame_id)
result = Py_EQ; result = Py_EQ;
else else
result = Py_NE; result = Py_NE;

View file

@ -2033,10 +2033,8 @@ record_btrace_start_replaying (struct thread_info *tp)
frame_id = get_thread_current_frame_id (tp); frame_id = get_thread_current_frame_id (tp);
/* Check if we need to update any stepping-related frame id's. */ /* Check if we need to update any stepping-related frame id's. */
upd_step_frame_id = frame_id_eq (frame_id, upd_step_frame_id = (frame_id == tp->control.step_frame_id);
tp->control.step_frame_id); upd_step_stack_frame_id = (frame_id == tp->control.step_stack_frame_id);
upd_step_stack_frame_id = frame_id_eq (frame_id,
tp->control.step_stack_frame_id);
/* We start replaying at the end of the branch trace. This corresponds /* We start replaying at the end of the branch trace. This corresponds
to the current instruction. */ to the current instruction. */

View file

@ -3252,7 +3252,7 @@ find_frame_for_address (CORE_ADDR address)
fid != NULL; fid != NULL;
fid = get_prev_frame (fid)) fid = get_prev_frame (fid))
{ {
if (frame_id_eq (id, get_frame_id (fid))) if (id == get_frame_id (fid))
{ {
struct frame_info *prev_frame; struct frame_info *prev_frame;
@ -3260,7 +3260,7 @@ find_frame_for_address (CORE_ADDR address)
{ {
prev_frame = get_prev_frame (fid); prev_frame = get_prev_frame (fid);
if (!prev_frame if (!prev_frame
|| !frame_id_eq (id, get_frame_id (prev_frame))) || id != get_frame_id (prev_frame))
break; break;
fid = prev_frame; fid = prev_frame;
} }

View file

@ -2190,8 +2190,7 @@ tfind_1 (enum trace_find_type type, int num,
function and it's arguments) -- otherwise we'll just show the function and it's arguments) -- otherwise we'll just show the
new source line. */ new source line. */
if (frame_id_eq (old_frame_id, if (old_frame_id == get_frame_id (get_current_frame ()))
get_frame_id (get_current_frame ())))
print_what = SRC_LINE; print_what = SRC_LINE;
else else
print_what = SRC_AND_LOC; print_what = SRC_AND_LOC;

View file

@ -4004,7 +4004,7 @@ value_fetch_lazy_register (struct value *val)
in this situation. */ in this situation. */
if (VALUE_LVAL (new_val) == lval_register if (VALUE_LVAL (new_val) == lval_register
&& value_lazy (new_val) && value_lazy (new_val)
&& frame_id_eq (VALUE_NEXT_FRAME_ID (new_val), next_frame_id)) && VALUE_NEXT_FRAME_ID (new_val) == next_frame_id)
internal_error (__FILE__, __LINE__, internal_error (__FILE__, __LINE__,
_("infinite loop while fetching a register")); _("infinite loop while fetching a register"));
} }