Re: [RFA] OSF/1 - "next" over prologueless function call

Andrew Cagney
2003-12-04T01:49:24Z

>> See my recent comments further down in that file. I think GDB should be
>> using:
>>
>> frame_id_unwind(current_frame) == frame_id_from_before_stepi
>>
>> to determine if it did a step into a function. What happens if that is
>> used?
>
>
> Sounds like a good idea, almost obvious actually :-). I tried the
> following change on osf1 and x86-linux without any regression, and it
> does solve the problem on osf1.

(only took 15 years to realise how "obvious" it was :-)

> However, I tried it on sparc-solaris with the gdb-6.0 sources because
> I knew this target hasn't transitioned to the new frame framework.
> It doesn't look like GDB is liking this change there (I've got a lot of
> timeouts in call-ar-st). I am currently retrying on the head right now,
> hoping the testsuite completes in a reasonable amount of time.
>
>
> --- infrun.c 25 Nov 2003 16:01:36 -0000 1.122
> +++ infrun.c 3 Dec 2003 19:24:07 -0000
> @@ -2473,6 +2473,8 @@ process_event_stop_test:
> }
>
> if (((stop_pc == ecs->stop_func_start /* Quick test */
> + || frame_id_eq (get_frame_id (get_prev_frame (get_current_frame ())),
> + step_frame_id)
> || in_prologue (stop_pc, ecs->stop_func_start))
> && !IN_SOLIB_RETURN_TRAMPOLINE (stop_pc, ecs->stop_func_name))
> || IN_SOLIB_CALL_TRAMPOLINE (stop_pc, ecs->stop_func_name)
>
>
> Stay tuned.

You can use legacy_frame_p for differentiating old and new code.

Hmm, is "stop_pc == ecs->stop_func_start" a valid test, what happens if
the program is at 1: and there's a next?

foo:
...
1: goto foo

Hmm, is in_prologue() adding value when frame_id always works? Unless
it's being used to handle stepping through a prologue?

Andrew