[PATCH v2] libgcc: Expose the instruction pointer and stack pointer in SEH _Unwind_Backtrace
Kai Tietz
ktietz70@googlemail.com
Mon Nov 2 12:05:03 GMT 2020
Hello,
as noone seems to be able to review this patch, I will do so, even if
this is no longer a task of mine.
The patch itself is reasonable and seems to fix a pending issue we
have on CFA support. I had already private discussion with Martin,
and I would have loved to see a test-case illustrating this fix. But
as Martin explained to me, there is no trivial testcase for this, so I
would approve that patch.
Regards,
Kai
Am Di., 8. Sept. 2020 um 14:24 Uhr schrieb Martin Storsjö <martin@martin.st>:
>
> Previously, the SEH version of _Unwind_Backtrace did unwind
> the stack and call the provided callback function as intended,
> but there was little the caller could do within the callback to
> actually get any info about that particular level in the unwind.
>
> Set the ra and cfa pointers, which are used by _Unwind_GetIP
> and _Unwind_GetCFA, to allow using these functions from the
> callacb to inspect the state at each stack frame.
>
> 2020-09-08 Martin Storsjö <martin@martin.st>
>
> libgcc/Changelog:
> * unwind-seh.c (_Unwind_Backtrace): Set the ra and cfa pointers
> before calling the callback.
> ---
> libgcc/unwind-seh.c | 5 +++++
> 1 file changed, 5 insertions(+)
>
> diff --git a/libgcc/unwind-seh.c b/libgcc/unwind-seh.c
> index 1a70180cfaa..275d782903a 100644
> --- a/libgcc/unwind-seh.c
> +++ b/libgcc/unwind-seh.c
> @@ -466,6 +466,11 @@ _Unwind_Backtrace(_Unwind_Trace_Fn trace,
> &gcc_context.disp->HandlerData,
> &gcc_context.disp->EstablisherFrame, NULL);
>
> + /* Set values that the callback can inspect via _Unwind_GetIP
> + * and _Unwind_GetCFA. */
> + gcc_context.ra = ms_context.Rip;
> + gcc_context.cfa = ms_context.Rsp;
> +
> /* Call trace function. */
> if (trace (&gcc_context, trace_argument) != _URC_NO_REASON)
> return _URC_FATAL_PHASE1_ERROR;
> --
> 2.17.1
>
More information about the Gcc-patches
mailing list